function circlevertices(b) { b *= 20; var c = []; c.push({ x: -b / 20, y: 0 }); for (var d = -b + 1, d = Math.sqrt(b * b - d * d), e = 1; e <= d; e++) { var f = e, j = Math.sqrt(b * b - f * f); 1 > b - j && c.push({ x: -j / 20, y: -f / 20 }) } for (e = -b + 1; e <= b - 1; e++) j = e, f = Math.sqrt(b * b - j * j), c.push({ x: j / 20, y: -f / 20 }); for (e = d; 1 <= e; e--) f = e, j = Math.sqrt(b * b - f * f), 1 > b - j && c.push({ x: j / 20, y: -f / 20 }); c.push({ x: b / 20, y: 0 }); for (e = 1; e <= d; e++) f = e, j = Math.sqrt(b * b - f * f), 1 > b - j && c.push({ x: j / 20, y: f / 20 }); for (e = b - 1; e > -b + 1; e--) j = e, f = Math.sqrt(b * b - j * j), c.push({ x: j / 20, y: f / 20 }); for (e = d; 1 <= e; e--) f = e, j = Math.sqrt(b * b - f * f), 1 > b - j && c.push({ x: -j / 20, y: f / 20 }); return c } var _STRINGS = { Ad: { Mobile: { Preroll: { ReadyIn: "The game is ready in ", Loading: "Your game is loading...", Close: "Close" }, Header: { ReadyIn: "The game is ready in ", Loading: "Your game is loading...", Close: "Close" }, End: { ReadyIn: "Advertisement ends in ", Loading: "Please wait ...", Close: "Close" } } }, Splash: { Loading: "Loading ...", LogoLine1: "Some text here", LogoLine2: "powered by mobiltr", LogoLine3: "none" }, Game: { Play: "Play", Continue: "Continue", Ask: "Learn how to play?", Yes: "Yes", No: "No", Area: "Out of Bounds !", Water: "Water Hazard", Hole: "Hole", Par: "Par", Strokes: "Strokes", Overal: "Overall
Score", Holecomplete: "Hole Complete!", Holeinone: "Hole In One!", Paused: "Paused", Music: "Music", Sound: "Sound" }, Tutorial: { "0": "Basic Training", 1: "Let's learn how to play.", 2: "Press and hold left button to turn
arrow counterclockwise.", 3: "Now press and hold right button to turn
arrow clockwise.", 4: "Well done!", 5: "Try to drag the screen left or right
to see your target hole.
You can also drag up and down.", 6: "Press power button to increase your
hitting power.", 7: 'Press "Go!" to hit the ball.', 8: "Repeat until the ball gets into the hole.", 9: "Congratulations!
You finished the basic training.
Let's play!", 10: "" }, Results: { Course: "Course Complete !", Par: "Par", Yourscore: "Your Score", Bestscore: "Best Score" } }; var _SETTINGS = { API: { Enabled: !1, Log: { Events: { InitializeGame: !1, EndGame: !1, Level: { Begin: !0, End: !0, Win: !0, Lose: !0, Draw: !0 } } } }, Ad: { Mobile: { Preroll: { Enabled: 0, Duration: 5, Width: 300, Height: 250, Rotation: { Enabled: !1, Weight: { MobileAdInGamePreroll: 999999, MobileAdInGamePreroll2: 999999, MobileAdInGamePreroll3: 999999 } } }, Header: { Enabled: !1, Duration: 5, Width: 320, Height: 50, Rotation: { Enabled: !1, Weight: { MobileAdInGameHeader: 40, MobileAdInGameHeader2: 40, MobileAdInGameHeader3: 20 } } }, Footer: { Enabled: !1, Duration: 5, Width: 320, Height: 50, Rotation: { Enabled: !1, Weight: { MobileAdInGameFooter: 40, MobileAdInGameFooter2: 40, MobileAdInGameFooter3: 20 } } }, End: { Enabled: !1, Duration: 1, Width: 300, Height: 250, Rotation: { Enabled: !1, Weight: { MobileAdInGameEnd: 40, MobileAdInGameEnd2: 40, MobileAdInGameEnd3: 20 } } } } }, Language: { Default: "en" }, DeveloperBranding: { Splash: { Enabled: !1 }, Logo: { Enabled: !1, Link: "https://www.yiv.com/", LinkEnabled: !1, NewWindow: !0, Width: 166, Height: 61 } }, Branding: { Splash: { Enabled: !1 }, Logo: { Enabled: !1, Link: "https://www.yiv.com", LinkEnabled: !0, NewWindow: !0, Width: 280, Height: 34 } }, MoreGames: { Enabled: !1, Link: "../../../www.mobiltr.com/game/links/mobile.html", NewWindow: !0 }, Gamecenter: { Enabled: !1 } }; var MobileAdInGamePreroll = {}; var MobileAdInGameHeader = {}; var MobileAdInGameFooter = {}; var MobileAdInGameEnd = {}; (function(b, c) { function d(b, d, g) { if (g === c && 1 === b.nodeType) if (g = "data-" + d.replace(vb, "-$1").toLowerCase(), g = b.getAttribute(g), "string" == typeof g) { try { g = "true" === g ? !0 : "false" === g ? !1 : "null" === g ? null : +g + "" === g ? +g : wb.test(g) ? m.parseJSON(g) : g } catch (l) {} m.data(b, d, g) } else g = c; return g } function e(b) { for (var c in b) if (!("data" === c && m.isEmptyObject(b[c])) && "toJSON" !== c) return !1; return !0 } function f() { return !1 } function j() { return !0 } function q(b) { return !b || !b.parentNode || 11 === b.parentNode.nodeType } function n(b, c) { do b = b[c]; while (b && 1 !== b.nodeType); return b } function g(b, c, d) { c = c || 0; if (m.isFunction(c)) return m.grep(b, function(b, ba) { return !!c.call(b, ba, b) === d }); if (c.nodeType) return m.grep(b, function(b) { return b === c === d }); if ("string" == typeof c) { var g = m.grep(b, function(b) { return 1 === b.nodeType }); if (Oc.test(c)) return m.filter(c, g, !d); c = m.filter(c, g) } return m.grep(b, function(b) { return 0 <= m.inArray(b, c) === d }) } function y(b) { var c = kc.split("|"); b = b.createDocumentFragment(); if (b.createElement) for (; c.length;) b.createElement(c.pop()); return b } function A(b, c) { if (1 === c.nodeType && m.hasData(b)) { var d, g, l; g = m._data(b); var e = m._data(c, g), s = g.events; if (s) for (d in delete e.handle, e.events = {}, s) { g = 0; for (l = s[d].length; g < l; g++) m.event.add(c, d, s[d][g]) } e.data && (e.data = m.extend({}, e.data)) } } function z(b, c) { var d; 1 === c.nodeType && (c.clearAttributes && c.clearAttributes(), c.mergeAttributes && c.mergeAttributes(b), d = c.nodeName.toLowerCase(), "object" === d ? (c.parentNode && (c.outerHTML = b.outerHTML), m.support.html5Clone && b.innerHTML && !m.trim(c.innerHTML) && (c.innerHTML = b.innerHTML)) : "input" === d && lc.test(b.type) ? (c.defaultChecked = c.checked = b.checked, c.value !== b.value && (c.value = b.value)) : "option" === d ? c.selected = b.defaultSelected : "input" === d || "textarea" === d ? c.defaultValue = b.defaultValue : "script" === d && c.text !== b.text && (c.text = b.text), c.removeAttribute(m.expando)) } function B(b) { return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName("*") : "undefined" != typeof b.querySelectorAll ? b.querySelectorAll("*") : [] } function C(b) { lc.test(b.type) && (b.defaultChecked = b.checked) } function G(b, c) { if (c in b) return c; for (var d = c.charAt(0).toUpperCase() + c.slice(1), m = c, g = mc.length; g--;) if (c = mc[g] + d, c in b) return c; return m } function I(b, c) { return b = c || b, "none" === m.css(b, "display") || !m.contains(b.ownerDocument, b) } function u(b, c) { for (var d, g, l = [], e = 0, s = b.length; e < s; e++) d = b[e], d.style && (l[e] = m._data(d, "olddisplay"), c ? (!l[e] && "none" === d.style.display && (d.style.display = ""), "" === d.style.display && I(d) && (l[e] = m._data(d, "olddisplay", M(d.nodeName)))) : (g = ha(d, "display"), !l[e] && "none" !== g && m._data(d, "olddisplay", g))); for (e = 0; e < s; e++) if (d = b[e], d.style && (!c || "none" === d.style.display || "" === d.style.display)) d.style.display = c ? l[e] || "" : "none"; return b } function L(b, c, d) { return (b = Pc.exec(c)) ? Math.max(0, b[1] - (d || 0)) + (b[2] || "px") : c } function E(b, c, d, g) { c = d === (g ? "border" : "content") ? 4 : "width" === c ? 1 : 0; for (var l = 0; 4 > c; c += 2) "margin" === d && (l += m.css(b, d + Ba[c], !0)), g ? ("content" === d && (l -= parseFloat(ha(b, "padding" + Ba[c])) || 0), "margin" !== d && (l -= parseFloat(ha(b, "border" + Ba[c] + "Width")) || 0)) : (l += parseFloat(ha(b, "padding" + Ba[c])) || 0, "padding" !== d && (l += parseFloat(ha(b, "border" + Ba[c] + "Width")) || 0)); return l } function Q(b, c, d) { var g = "width" === c ? b.offsetWidth : b.offsetHeight, l = !0, e = m.support.boxSizing && "border-box" === m.css(b, "boxSizing"); if (0 >= g || null == g) { g = ha(b, c); if (0 > g || null == g) g = b.style[c]; if (xb.test(g)) return g; l = e && (m.support.boxSizingReliable || g === b.style[c]); g = parseFloat(g) || 0 } return g + E(b, c, d || (e ? "border" : "content"), l) + "px" } function M(b) { if (Qb[b]) return Qb[b]; var c = m("<" + b + ">").appendTo(J.body), d = c.css("display"); c.remove(); if ("none" === d || "" === d) { Ka = J.body.appendChild(Ka || m.extend(J.createElement("iframe"), { frameBorder: 0, width: 0, height: 0 })); if (!La || !Ka.createElement) La = (Ka.contentWindow || Ka.contentDocument).document, La.write(""), La.close(); c = La.body.appendChild(La.createElement(b)); d = ha(c, "display"); J.body.removeChild(Ka) } return Qb[b] = d, d } function R(b, c, d, g) { var l; if (m.isArray(c)) m.each(c, function(c, Ja) { d || Qc.test(b) ? g(b, Ja) : R(b + "[" + ("object" == typeof Ja ? c : "") + "]", Ja, d, g) }); else if (!d && "object" === m.type(c)) for (l in c) R(b + "[" + l + "]", c[l], d, g); else g(b, c) } function K(b) { return function(c, d) { "string" != typeof c && (d = c, c = "*"); var g, l, e = c.toLowerCase().split(qa), s = 0, f = e.length; if (m.isFunction(d)) for (; s < f; s++) g = e[s], (l = /^\+/.test(g)) && (g = g.substr(1) || "*"), g = b[g] = b[g] || [], g[l ? "unshift" : "push"](d) } } function X(b, d, m, g, l, e) { l = l || d.dataTypes[0]; e = e || {}; e[l] = !0; var s; l = b[l]; for (var f = 0, r = l ? l.length : 0, p = b === Rb; f < r && (p || !s); f++) s = l[f](d, m, g), "string" == typeof s && (!p || e[s] ? s = c : (d.dataTypes.unshift(s), s = X(b, d, m, g, s, e))); return (p || !s) && !e["*"] && (s = X(b, d, m, g, "*", e)), s } function P(b, d) { var g, l, e = m.ajaxSettings.flatOptions || {}; for (g in d) d[g] !== c && ((e[g] ? b : l || (l = {}))[g] = d[g]); l && m.extend(!0, b, l) } function S() { try { return new b.XMLHttpRequest } catch (c) {} } function Z() { return setTimeout(function() { yb = c }, 0), yb = m.now() } function U(b, c, d) { var g, l = 0, e = zb.length, s = m.Deferred().always(function() { delete f.elem }), f = function() { for (var c = yb || Z(), c = Math.max(0, p.startTime + p.duration - c), d = 1 - (c / p.duration || 0), g = 0, Ja = p.tweens.length; g < Ja; g++) p.tweens[g].run(d); return s.notifyWith(b, [p, d, c]), 1 > d && Ja ? c : (s.resolveWith(b, [p]), !1) }, p = s.promise({ elem: b, props: m.extend({}, c), opts: m.extend(!0, { specialEasing: {} }, d), originalProperties: c, originalOptions: d, startTime: yb || Z(), duration: d.duration, tweens: [], createTween: function(c, d) { var g = m.Tween(b, p.opts, c, d, p.opts.specialEasing[c] || p.opts.easing); return p.tweens.push(g), g }, stop: function(c) { for (var d = 0, g = c ? p.tweens.length : 0; d < g; d++) p.tweens[d].run(1); return c ? s.resolveWith(b, [p, c]) : s.rejectWith(b, [p, c]), this } }); c = p.props; d = p.opts.specialEasing; var r, j, n, F; for (g in c) if (r = m.camelCase(g), j = d[r], n = c[g], m.isArray(n) && (j = n[1], n = c[g] = n[0]), g !== r && (c[r] = n, delete c[g]), (F = m.cssHooks[r]) && "expand" in F) for (g in n = F.expand(n), delete c[r], n) g in c || (c[g] = n[g], d[g] = j); else d[r] = j; for (; l < e; l++) if (g = zb[l].call(p, b, c, p.opts)) return g; var v = p; m.each(c, function(b, c) { for (var ba = (bb[b] || []).concat(bb["*"]), d = 0, g = ba.length; d < g && !ba[d].call(v, b, c); d++); }); return m.isFunction(p.opts.start) && p.opts.start.call(b, p), m.fx.timer(m.extend(f, { anim: p, queue: p.opts.queue, elem: b })), p.progress(p.opts.progress).done(p.opts.done, p.opts.complete).fail(p.opts.fail).always(p.opts.always) } function p(b, c, d, g, m) { return new p.prototype.init(b, c, d, g, m) } function v(b, c) { var d, g = { height: b }, m = 0; for (c = c ? 1 : 0; 4 > m; m += 2 - c) d = Ba[m], g["margin" + d] = g["padding" + d] = b; return c && (g.opacity = g.width = b), g } function H(b) { return m.isWindow(b) ? b : 9 === b.nodeType ? b.defaultView || b.parentWindow : !1 } var D, N, J = b.document, V = b.location, l = b.navigator, r = b.jQuery, O = b.$, s = Array.prototype.push, F = Array.prototype.slice, aa = Array.prototype.indexOf, T = Object.prototype.toString, ka = Object.prototype.hasOwnProperty, ca = String.prototype.trim, m = function(b, c) { return new m.fn.init(b, c, D) }, la = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, Ma = /\S/, qa = /\s+/, Ab = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, cb = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, Na = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, Bb = /^[\],:{}\s]*$/, Cb = /(?:^|:|,)(?:\s*\[)+/g, db = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, eb = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, fb = /^-ms-/, Db = /-([\da-z])/gi, gb = function(b, c) { return (c + "").toUpperCase() }, Ca = function() { J.addEventListener ? (J.removeEventListener("DOMContentLoaded", Ca, !1), m.ready()) : "complete" === J.readyState && (J.detachEvent("onreadystatechange", Ca), m.ready()) }, Oa = {}; m.fn = m.prototype = { constructor: m, init: function(b, d, g) { var l, e; if (!b) return this; if (b.nodeType) return this.context = this[0] = b, this.length = 1, this; if ("string" == typeof b) { "<" === b.charAt(0) && ">" === b.charAt(b.length - 1) && 3 <= b.length ? l = [null, b, null] : l = cb.exec(b); if (l && (l[1] || !d)) { if (l[1]) return d = d instanceof m ? d[0] : d, e = d && d.nodeType ? d.ownerDocument || d : J, b = m.parseHTML(l[1], e, !0), Na.test(l[1]) && m.isPlainObject(d) && this.attr.call(b, d, !0), m.merge(this, b); if ((d = J.getElementById(l[2])) && d.parentNode) { if (d.id !== l[2]) return g.find(b); this.length = 1; this[0] = d } return this.context = J, this.selector = b, this } return !d || d.jquery ? (d || g).find(b) : this.constructor(d).find(b) } return m.isFunction(b) ? g.ready(b) : (b.selector !== c && (this.selector = b.selector, this.context = b.context), m.makeArray(b, this)) }, selector: "", jquery: "1.8.2", length: 0, size: function() { return this.length }, toArray: function() { return F.call(this) }, get: function(b) { return null == b ? this.toArray() : 0 > b ? this[this.length + b] : this[b] }, pushStack: function(b, c, d) { b = m.merge(this.constructor(), b); return b.prevObject = this, b.context = this.context, "find" === c ? b.selector = this.selector + (this.selector ? " " : "") + d : c && (b.selector = this.selector + "." + c + "(" + d + ")"), b }, each: function(b, c) { return m.each(this, b, c) }, ready: function(b) { return m.ready.promise().done(b), this }, eq: function(b) { return b = +b, -1 === b ? this.slice(b) : this.slice(b, b + 1) }, first: function() { return this.eq(0) }, last: function() { return this.eq(-1) }, slice: function() { return this.pushStack(F.apply(this, arguments), "slice", F.call(arguments).join(",")) }, map: function(b) { return this.pushStack(m.map(this, function(c, d) { return b.call(c, d, c) })) }, end: function() { return this.prevObject || this.constructor(null) }, push: s, sort: [].sort, splice: [].splice }; m.fn.init.prototype = m.fn; m.extend = m.fn.extend = function() { var b, d, g, l, e, s, f = arguments[0] || {}, p = 1, r = arguments.length, j = !1; "boolean" == typeof f && (j = f, f = arguments[1] || {}, p = 2); "object" != typeof f && !m.isFunction(f) && (f = {}); for (r === p && (f = this, --p); p < r; p++) if (null != (b = arguments[p])) for (d in b) g = f[d], l = b[d], f !== l && (j && l && (m.isPlainObject(l) || (e = m.isArray(l))) ? (e ? (e = !1, s = g && m.isArray(g) ? g : []) : s = g && m.isPlainObject(g) ? g : {}, f[d] = m.extend(j, s, l)) : l !== c && (f[d] = l)); return f }; m.extend({ noConflict: function(c) { return b.$ === m && (b.$ = O), c && b.jQuery === m && (b.jQuery = r), m }, isReady: !1, readyWait: 1, holdReady: function(b) { b ? m.readyWait++ : m.ready(!0) }, ready: function(b) { if (!(!0 === b ? --m.readyWait : m.isReady)) { if (!J.body) return setTimeout(m.ready, 1); m.isReady = !0; !0 !== b && 0 < --m.readyWait || (N.resolveWith(J, [m]), m.fn.trigger && m(J).trigger("ready").off("ready")) } }, isFunction: function(b) { return "function" === m.type(b) }, isArray: Array.isArray || function(b) { return "array" === m.type(b) }, isWindow: function(b) { return null != b && b == b.window }, isNumeric: function(b) { return !isNaN(parseFloat(b)) && isFinite(b) }, type: function(b) { return null == b ? String(b) : Oa[T.call(b)] || "object" }, isPlainObject: function(b) { if (!b || "object" !== m.type(b) || b.nodeType || m.isWindow(b)) return !1; try { if (b.constructor && !ka.call(b, "constructor") && !ka.call(b.constructor.prototype, "isPrototypeOf")) return !1 } catch (d) { return !1 } for (var g in b); return g === c || ka.call(b, g) }, isEmptyObject: function(b) { for (var c in b) return !1; return !0 }, error: function(b) { throw Error(b); }, parseHTML: function(b, c, d) { var g; return !b || "string" != typeof b ? null : ("boolean" == typeof c && (d = c, c = 0), c = c || J, (g = Na.exec(b)) ? [c.createElement(g[1])] : (g = m.buildFragment([b], c, d ? null : []), m.merge([], (g.cacheable ? m.clone(g.fragment) : g.fragment).childNodes))) }, parseJSON: function(c) { if (!c || "string" != typeof c) return null; c = m.trim(c); if (b.JSON && b.JSON.parse) return b.JSON.parse(c); if (Bb.test(c.replace(db, "@").replace(eb, "]").replace(Cb, ""))) return (new Function("return " + c))(); m.error("Invalid JSON: " + c) }, parseXML: function(ba) { var d, g; if (!ba || "string" != typeof ba) return null; try { b.DOMParser ? (g = new DOMParser, d = g.parseFromString(ba, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(ba)) } catch (l) { d = c } return (!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && m.error("Invalid XML: " + ba), d }, noop: function() {}, globalEval: function(c) { c && Ma.test(c) && (b.execScript || function(c) { b.eval.call(b, c) })(c) }, camelCase: function(b) { return b.replace(fb, "ms-").replace(Db, gb) }, nodeName: function(b, c) { return b.nodeName && b.nodeName.toLowerCase() === c.toLowerCase() }, each: function(b, d, g) { var l, e = 0, s = b.length, f = s === c || m.isFunction(b); if (g) if (f) for (l in b) { if (!1 === d.apply(b[l], g)) break } else for (; e < s && !1 !== d.apply(b[e++], g);); else if (f) for (l in b) { if (!1 === d.call(b[l], l, b[l])) break } else for (; e < s && !1 !== d.call(b[e], e, b[e++]);); return b }, trim: ca && !ca.call("\ufeff\u00a0") ? function(b) { return null == b ? "" : ca.call(b) } : function(b) { return null == b ? "" : (b + "").replace(Ab, "") }, makeArray: function(b, c) { var d, g = c || []; return null != b && (d = m.type(b), null == b.length || "string" === d || "function" === d || "regexp" === d || m.isWindow(b) ? s.call(g, b) : m.merge(g, b)), g }, inArray: function(b, c, d) { var g; if (c) { if (aa) return aa.call(c, b, d); g = c.length; for (d = d ? 0 > d ? Math.max(0, g + d) : d : 0; d < g; d++) if (d in c && c[d] === b) return d } return -1 }, merge: function(b, d) { var g = d.length, m = b.length, l = 0; if ("number" == typeof g) for (; l < g; l++) b[m++] = d[l]; else for (; d[l] !== c;) b[m++] = d[l++]; return b.length = m, b }, grep: function(b, c, d) { var g, m = [], l = 0, e = b.length; for (d = !!d; l < e; l++) g = !!c(b[l], l), d !== g && m.push(b[l]); return m }, map: function(b, d, g) { var l, e, s = [], f = 0, p = b.length; if (b instanceof m || p !== c && "number" == typeof p && (0 < p && b[0] && b[p - 1] || 0 === p || m.isArray(b))) for (; f < p; f++) l = d(b[f], f, g), null != l && (s[s.length] = l); else for (e in b) l = d(b[e], e, g), null != l && (s[s.length] = l); return s.concat.apply([], s) }, guid: 1, proxy: function(b, d) { var g, l, e; return "string" == typeof d && (g = b[d], d = b, b = g), m.isFunction(b) ? (l = F.call(arguments, 2), e = function() { return b.apply(d, l.concat(F.call(arguments))) }, e.guid = b.guid = b.guid || m.guid++, e) : c }, access: function(b, d, g, l, e, s, f) { var p, r = null == g, j = 0, n = b.length; if (g && "object" == typeof g) { for (j in g) m.access(b, d, j, g[j], 1, s, l); e = 1 } else if (l !== c) { p = f === c && m.isFunction(l); r && (p ? (p = d, d = function(b, c, d) { return p.call(m(b), d) }) : (d.call(b, l), d = null)); if (d) for (; j < n; j++) d(b[j], g, p ? l.call(b[j], j, d(b[j], g)) : l, f); e = 1 } return e ? b : r ? d.call(b) : n ? d(b[0], g) : s }, now: function() { return (new Date).getTime() } }); m.ready.promise = function(c) { if (!N) if (N = m.Deferred(), "complete" === J.readyState) setTimeout(m.ready, 1); else if (J.addEventListener) J.addEventListener("DOMContentLoaded", Ca, !1), b.addEventListener("load", m.ready, !1); else { J.attachEvent("onreadystatechange", Ca); b.attachEvent("onload", m.ready); var d = !1; try { d = null == b.frameElement && J.documentElement } catch (g) {} d && d.doScroll && function Nc() { if (!m.isReady) { try { d.doScroll("left") } catch (b) { return setTimeout(Nc, 50) } m.ready() } }() } return N.promise(c) }; m.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(b, c) { Oa["[object " + c + "]"] = c.toLowerCase() }); D = m(J); var Pa = {}; m.Callbacks = function(b) { var d; if ("string" == typeof b) { if (!(d = Pa[b])) { d = b; var g = Pa[d] = {}; d = (m.each(d.split(qa), function(b, c) { g[c] = !0 }), g) } } else d = m.extend({}, b); b = d; var l, e, s, f, p, r, j = [], n = !b.once && [], F = function(c) { l = b.memory && c; e = !0; r = f || 0; f = 0; p = j.length; for (s = !0; j && r < p; r++) if (!1 === j[r].apply(c[0], c[1]) && b.stopOnFalse) { l = !1; break } s = !1; j && (n ? n.length && F(n.shift()) : l ? j = [] : v.disable()) }, v = { add: function() { if (j) { var c = j.length; (function Rc(c) { m.each(c, function(c, d) { var g = m.type(d); "function" === g && (!b.unique || !v.has(d)) ? j.push(d) : d && d.length && "string" !== g && Rc(d) }) })(arguments); s ? p = j.length : l && (f = c, F(l)) } return this }, remove: function() { return j && m.each(arguments, function(b, c) { for (var d; - 1 < (d = m.inArray(c, j, d));) j.splice(d, 1), s && (d <= p && p--, d <= r && r--) }), this }, has: function(b) { return -1 < m.inArray(b, j) }, empty: function() { return j = [], this }, disable: function() { return j = n = l = c, this }, disabled: function() { return !j }, lock: function() { return n = c, l || v.disable(), this }, locked: function() { return !n }, fireWith: function(b, c) { return c = c || [], c = [b, c.slice ? c.slice() : c], j && (!e || n) && (s ? n.push(c) : F(c)), this }, fire: function() { return v.fireWith(this, arguments), this }, fired: function() { return !!e } }; return v }; m.extend({ Deferred: function(b) { var c = [ ["resolve", "done", m.Callbacks("once memory"), "resolved"], ["reject", "fail", m.Callbacks("once memory"), "rejected"], ["notify", "progress", m.Callbacks("memory")] ], d = "pending", g = { state: function() { return d }, always: function() { return l.done(arguments).fail(arguments), this }, then: function() { var b = arguments; return m.Deferred(function(d) { m.each(c, function(c, ba) { var g = ba[0], e = b[c]; l[ba[1]](m.isFunction(e) ? function() { var b = e.apply(this, arguments); b && m.isFunction(b.promise) ? b.promise().done(d.resolve).fail(d.reject).progress(d.notify) : d[g + "With"](this === l ? d : this, [b]) } : d[g]) }); b = null }).promise() }, promise: function(b) { return null != b ? m.extend(b, g) : g } }, l = {}; return g.pipe = g.then, m.each(c, function(b, ba) { var m = ba[2], e = ba[3]; g[ba[1]] = m.add; e && m.add(function() { d = e }, c[b ^ 1][2].disable, c[2][2].lock); l[ba[0]] = m.fire; l[ba[0] + "With"] = m.fireWith }), g.promise(l), b && b.call(l, l), l }, when: function(b) { var c = 0, d = F.call(arguments), g = d.length, l = 1 !== g || b && m.isFunction(b.promise) ? g : 0, e = 1 === l ? b : m.Deferred(), s = function(b, c, d) { return function(ba) { c[b] = this; d[b] = 1 < arguments.length ? F.call(arguments) : ba; d === f ? e.notifyWith(c, d) : --l || e.resolveWith(c, d) } }, f, p, r; if (1 < g) { f = Array(g); p = Array(g); for (r = Array(g); c < g; c++) d[c] && m.isFunction(d[c].promise) ? d[c].promise().done(s(c, r, d)).fail(e.reject).progress(s(c, p, f)) : --l } return l || e.resolveWith(r, d), e.promise() } }); var Eb = m, Qa, ea, Da, ra, wa, Ea, ga, sa, Fa, Ra, ua, hb, Y = J.createElement("div"); Y.setAttribute("className", "t"); Y.innerHTML = "
a"; Da = Y.getElementsByTagName("*"); ra = Y.getElementsByTagName("a")[0]; ra.style.cssText = "top:1px;float:left;opacity:.5"; if (!Da || !Da.length) Qa = {}; else { wa = J.createElement("select"); Ea = wa.appendChild(J.createElement("option")); ga = Y.getElementsByTagName("input")[0]; ea = { leadingWhitespace: 3 === Y.firstChild.nodeType, tbody: !Y.getElementsByTagName("tbody").length, htmlSerialize: !!Y.getElementsByTagName("link").length, style: /top/.test(ra.getAttribute("style")), hrefNormalized: "/a" === ra.getAttribute("href"), opacity: /^0.5/.test(ra.style.opacity), cssFloat: !!ra.style.cssFloat, checkOn: "on" === ga.value, optSelected: Ea.selected, getSetAttribute: "t" !== Y.className, enctype: !!J.createElement("form").enctype, html5Clone: "<:nav>" !== J.createElement("nav").cloneNode(!0).outerHTML, boxModel: "CSS1Compat" === J.compatMode, submitBubbles: !0, changeBubbles: !0, focusinBubbles: !1, deleteExpando: !0, noCloneEvent: !0, inlineBlockNeedsLayout: !1, shrinkWrapBlocks: !1, reliableMarginRight: !0, boxSizingReliable: !0, pixelPosition: !1 }; ga.checked = !0; ea.noCloneChecked = ga.cloneNode(!0).checked; wa.disabled = !0; ea.optDisabled = !Ea.disabled; try { delete Y.test } catch (Sb) { ea.deleteExpando = !1 }!Y.addEventListener && Y.attachEvent && Y.fireEvent && (Y.attachEvent("onclick", hb = function() { ea.noCloneEvent = !1 }), Y.cloneNode(!0).fireEvent("onclick"), Y.detachEvent("onclick", hb)); ga = J.createElement("input"); ga.value = "t"; ga.setAttribute("type", "radio"); ea.radioValue = "t" === ga.value; ga.setAttribute("checked", "checked"); ga.setAttribute("name", "t"); Y.appendChild(ga); sa = J.createDocumentFragment(); sa.appendChild(Y.lastChild); ea.checkClone = sa.cloneNode(!0).cloneNode(!0).lastChild.checked; ea.appendChecked = ga.checked; sa.removeChild(ga); sa.appendChild(Y); if (Y.attachEvent) for (Ra in { submit: !0, change: !0, focusin: !0 }) Fa = "on" + Ra, (ua = Fa in Y) || (Y.setAttribute(Fa, "return;"), ua = "function" == typeof Y[Fa]), ea[Ra + "Bubbles"] = ua; Qa = (m(function() { var c, d, g, l, m = J.getElementsByTagName("body")[0]; m && (c = J.createElement("div"), c.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", m.insertBefore(c, m.firstChild), d = J.createElement("div"), c.appendChild(d), d.innerHTML = "
t
", g = d.getElementsByTagName("td"), g[0].style.cssText = "padding:0;margin:0;border:0;display:none", ua = 0 === g[0].offsetHeight, g[0].style.display = "", g[1].style.display = "none", ea.reliableHiddenOffsets = ua && 0 === g[0].offsetHeight, d.innerHTML = "", d.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", ea.boxSizing = 4 === d.offsetWidth, ea.doesNotIncludeMarginInBodyOffset = 1 !== m.offsetTop, b.getComputedStyle && (ea.pixelPosition = "1%" !== (b.getComputedStyle(d, null) || {}).top, ea.boxSizingReliable = "4px" === (b.getComputedStyle(d, null) || { width: "4px" }).width, l = J.createElement("div"), l.style.cssText = d.style.cssText = "padding:0;margin:0;border:0;display:block;overflow:hidden;", l.style.marginRight = l.style.width = "0", d.style.width = "1px", d.appendChild(l), ea.reliableMarginRight = !parseFloat((b.getComputedStyle(l, null) || {}).marginRight)), "undefined" != typeof d.style.zoom && (d.innerHTML = "", d.style.cssText = "padding:0;margin:0;border:0;display:block;overflow:hidden;width:1px;padding:1px;display:inline;zoom:1", ea.inlineBlockNeedsLayout = 3 === d.offsetWidth, d.style.display = "block", d.style.overflow = "visible", d.innerHTML = "
", d.firstChild.style.width = "5px", ea.shrinkWrapBlocks = 3 !== d.offsetWidth, c.style.zoom = 1), m.removeChild(c)) }), sa.removeChild(Y), Da = ra = wa = Ea = ga = sa = Y = null, ea) } Eb.support = Qa; var wb = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, vb = /([A-Z])/g; m.extend({ cache: {}, deletedIds: [], uuid: 0, expando: "jQuery" + (m.fn.jquery + Math.random()).replace(/\D/g, ""), noData: { embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", applet: !0 }, hasData: function(b) { return b = b.nodeType ? m.cache[b[m.expando]] : b[m.expando], !!b && !e(b) }, data: function(b, d, g, l) { if (m.acceptData(b)) { var e, s, f = m.expando, p = "string" == typeof d, r = b.nodeType, j = r ? m.cache : b, n = r ? b[f] : b[f] && f; if (n && j[n] && (l || j[n].data) || !(p && g === c)) { n || (r ? b[f] = n = m.deletedIds.pop() || m.guid++ : n = f); j[n] || (j[n] = {}, r || (j[n].toJSON = m.noop)); if ("object" == typeof d || "function" == typeof d) l ? j[n] = m.extend(j[n], d) : j[n].data = m.extend(j[n].data, d); return e = j[n], l || (e.data || (e.data = {}), e = e.data), g !== c && (e[m.camelCase(d)] = g), p ? (s = e[d], null == s && (s = e[m.camelCase(d)])) : s = e, s } } }, removeData: function(b, c, d) { if (m.acceptData(b)) { var g, l, s, f = b.nodeType, p = f ? m.cache : b, r = f ? b[m.expando] : m.expando; if (p[r]) { if (c && (g = d ? p[r] : p[r].data)) { m.isArray(c) || (c in g ? c = [c] : (c = m.camelCase(c), c in g ? c = [c] : c = c.split(" "))); l = 0; for (s = c.length; l < s; l++) delete g[c[l]]; if (!(d ? e : m.isEmptyObject)(g)) return } if (d || !(delete p[r].data, !e(p[r]))) f ? m.cleanData([b], !0) : m.support.deleteExpando || p != p.window ? delete p[r] : p[r] = null } } }, _data: function(b, c, d) { return m.data(b, c, d, !0) }, acceptData: function(b) { var c = b.nodeName && m.noData[b.nodeName.toLowerCase()]; return !c || !0 !== c && b.getAttribute("classid") === c } }); m.fn.extend({ data: function(b, g) { var l, e, s, f, p, r = this[0], j = 0, n = null; if (b === c) { if (this.length && (n = m.data(r), 1 === r.nodeType && !m._data(r, "parsedAttrs"))) { s = r.attributes; for (p = s.length; j < p; j++) f = s[j].name, f.indexOf("data-") || (f = m.camelCase(f.substring(5)), d(r, f, n[f])); m._data(r, "parsedAttrs", !0) } return n } return "object" == typeof b ? this.each(function() { m.data(this, b) }) : (l = b.split(".", 2), l[1] = l[1] ? "." + l[1] : "", e = l[1] + "!", m.access(this, function(g) { if (g === c) return n = this.triggerHandler("getData" + e, [l[0]]), n === c && r && (n = m.data(r, b), n = d(r, b, n)), n === c && l[1] ? this.data(l[0]) : n; l[1] = g; this.each(function() { var c = m(this); c.triggerHandler("setData" + e, l); m.data(this, b, g); c.triggerHandler("changeData" + e, l) }) }, null, g, 1 < arguments.length, null, !1)) }, removeData: function(b) { return this.each(function() { m.removeData(this, b) }) } }); m.extend({ queue: function(b, c, d) { var g; if (b) return c = (c || "fx") + "queue", g = m._data(b, c), d && (!g || m.isArray(d) ? g = m._data(b, c, m.makeArray(d)) : g.push(d)), g || [] }, dequeue: function(b, c) { c = c || "fx"; var d = m.queue(b, c), g = d.length, l = d.shift(), e = m._queueHooks(b, c), s = function() { m.dequeue(b, c) }; "inprogress" === l && (l = d.shift(), g--); l && ("fx" === c && d.unshift("inprogress"), delete e.stop, l.call(b, s, e)); !g && e && e.empty.fire() }, _queueHooks: function(b, c) { var d = c + "queueHooks"; return m._data(b, d) || m._data(b, d, { empty: m.Callbacks("once memory").add(function() { m.removeData(b, c + "queue", !0); m.removeData(b, d, !0) }) }) } }); m.fn.extend({ queue: function(b, d) { var g = 2; return "string" != typeof b && (d = b, b = "fx", g--), arguments.length < g ? m.queue(this[0], b) : d === c ? this : this.each(function() { var c = m.queue(this, b, d); m._queueHooks(this, b); "fx" === b && "inprogress" !== c[0] && m.dequeue(this, b) }) }, dequeue: function(b) { return this.each(function() { m.dequeue(this, b) }) }, delay: function(b, c) { return b = m.fx ? m.fx.speeds[b] || b : b, c = c || "fx", this.queue(c, function(c, d) { var g = setTimeout(c, b); d.stop = function() { clearTimeout(g) } }) }, clearQueue: function(b) { return this.queue(b || "fx", []) }, promise: function(b, d) { var g, l = 1, e = m.Deferred(), s = this, f = this.length, p = function() { --l || e.resolveWith(s, [s]) }; "string" != typeof b && (d = b, b = c); for (b = b || "fx"; f--;)(g = m._data(s[f], b + "queueHooks")) && g.empty && (l++, g.empty.add(p)); return p(), e.promise(d) } }); var ma, ib, Sa, Ta = /[\t\r\n]/g, jb = /\r/g, kb = /^(?:button|input)$/i, lb = /^(?:button|input|object|select|textarea)$/i, mb = /^a(?:rea|)$/i, nb = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, Ua = m.support.getSetAttribute; m.fn.extend({ attr: function(b, c) { return m.access(this, m.attr, b, c, 1 < arguments.length) }, removeAttr: function(b) { return this.each(function() { m.removeAttr(this, b) }) }, prop: function(b, c) { return m.access(this, m.prop, b, c, 1 < arguments.length) }, removeProp: function(b) { return b = m.propFix[b] || b, this.each(function() { try { this[b] = c, delete this[b] } catch (d) {} }) }, addClass: function(b) { var c, d, g, l, e, s, f; if (m.isFunction(b)) return this.each(function(c) { m(this).addClass(b.call(this, c, this.className)) }); if (b && "string" == typeof b) { c = b.split(qa); d = 0; for (g = this.length; d < g; d++) if (l = this[d], 1 === l.nodeType) if (!l.className && 1 === c.length) l.className = b; else { e = " " + l.className + " "; s = 0; for (f = c.length; s < f; s++) 0 > e.indexOf(" " + c[s] + " ") && (e += c[s] + " "); l.className = m.trim(e) } } return this }, removeClass: function(b) { var d, g, l, e, s, f, p; if (m.isFunction(b)) return this.each(function(c) { m(this).removeClass(b.call(this, c, this.className)) }); if (b && "string" == typeof b || b === c) { d = (b || "").split(qa); f = 0; for (p = this.length; f < p; f++) if (l = this[f], 1 === l.nodeType && l.className) { g = (" " + l.className + " ").replace(Ta, " "); e = 0; for (s = d.length; e < s; e++) for (; 0 <= g.indexOf(" " + d[e] + " ");) g = g.replace(" " + d[e] + " ", " "); l.className = b ? m.trim(g) : "" } } return this }, toggleClass: function(b, c) { var d = typeof b, g = "boolean" == typeof c; return m.isFunction(b) ? this.each(function(d) { m(this).toggleClass(b.call(this, d, this.className, c), c) }) : this.each(function() { if ("string" === d) for (var l, e = 0, s = m(this), f = c, p = b.split(qa); l = p[e++];) f = g ? f : !s.hasClass(l), s[f ? "addClass" : "removeClass"](l); else if ("undefined" === d || "boolean" === d) this.className && m._data(this, "__className__", this.className), this.className = this.className || !1 === b ? "" : m._data(this, "__className__") || "" }) }, hasClass: function(b) { b = " " + b + " "; for (var c = 0, d = this.length; c < d; c++) if (1 === this[c].nodeType && 0 <= (" " + this[c].className + " ").replace(Ta, " ").indexOf(b)) return !0; return !1 }, val: function(b) { var d, g, l, e = this[0]; if (arguments.length) return l = m.isFunction(b), this.each(function(g) { var e, s = m(this); if (1 === this.nodeType && (l ? e = b.call(this, g, s.val()) : e = b, null == e ? e = "" : "number" == typeof e ? e += "" : m.isArray(e) && (e = m.map(e, function(b) { return null == b ? "" : b + "" })), d = m.valHooks[this.type] || m.valHooks[this.nodeName.toLowerCase()], !d || !("set" in d) || d.set(this, e, "value") === c)) this.value = e }); if (e) return d = m.valHooks[e.type] || m.valHooks[e.nodeName.toLowerCase()], d && "get" in d && (g = d.get(e, "value")) !== c ? g : (g = e.value, "string" == typeof g ? g.replace(jb, "") : null == g ? "" : g) } }); m.extend({ valHooks: { option: { get: function(b) { var c = b.attributes.value; return !c || c.specified ? b.value : b.text } }, select: { get: function(b) { var c, d, g = b.selectedIndex, l = [], e = b.options, s = "select-one" === b.type; if (0 > g) return null; b = s ? g : 0; for (d = s ? g + 1 : e.length; b < d; b++) if (c = e[b], c.selected && (m.support.optDisabled ? !c.disabled : null === c.getAttribute("disabled")) && (!c.parentNode.disabled || !m.nodeName(c.parentNode, "optgroup"))) { c = m(c).val(); if (s) return c; l.push(c) } return s && !l.length && e.length ? m(e[g]).val() : l }, set: function(b, c) { var d = m.makeArray(c); return m(b).find("option").each(function() { this.selected = 0 <= m.inArray(m(this).val(), d) }), d.length || (b.selectedIndex = -1), d } } }, attrFn: {}, attr: function(b, d, g, l) { var e, s, f = b.nodeType; if (b && !(3 === f || 8 === f || 2 === f)) { if (l && m.isFunction(m.fn[d])) return m(b)[d](g); if ("undefined" == typeof b.getAttribute) return m.prop(b, d, g); (l = 1 !== f || !m.isXMLDoc(b)) && (d = d.toLowerCase(), s = m.attrHooks[d] || (nb.test(d) ? ib : ma)); if (g !== c) { if (null === g) { m.removeAttr(b, d); return } return s && "set" in s && l && (e = s.set(b, g, d)) !== c ? e : (b.setAttribute(d, g + ""), g) } return s && "get" in s && l && null !== (e = s.get(b, d)) ? e : (e = b.getAttribute(d), null === e ? c : e) } }, removeAttr: function(b, c) { var d, g, l, e, s = 0; if (c && 1 === b.nodeType) for (g = c.split(qa); s < g.length; s++)(l = g[s]) && (d = m.propFix[l] || l, e = nb.test(l), e || m.attr(b, l, ""), b.removeAttribute(Ua ? l : d), e && d in b && (b[d] = !1)) }, attrHooks: { type: { set: function(b, c) { if (kb.test(b.nodeName) && b.parentNode) m.error("type property can't be changed"); else if (!m.support.radioValue && "radio" === c && m.nodeName(b, "input")) { var d = b.value; return b.setAttribute("type", c), d && (b.value = d), c } } }, value: { get: function(b, c) { return ma && m.nodeName(b, "button") ? ma.get(b, c) : c in b ? b.value : null }, set: function(b, c, d) { if (ma && m.nodeName(b, "button")) return ma.set(b, c, d); b.value = c } } }, propFix: { tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" }, prop: function(b, d, g) { var l, e, s, f = b.nodeType; if (b && !(3 === f || 8 === f || 2 === f)) return s = 1 !== f || !m.isXMLDoc(b), s && (d = m.propFix[d] || d, e = m.propHooks[d]), g !== c ? e && "set" in e && (l = e.set(b, g, d)) !== c ? l : b[d] = g : e && "get" in e && null !== (l = e.get(b, d)) ? l : b[d] }, propHooks: { tabIndex: { get: function(b) { var d = b.getAttributeNode("tabindex"); return d && d.specified ? parseInt(d.value, 10) : lb.test(b.nodeName) || mb.test(b.nodeName) && b.href ? 0 : c } } } }); ib = { get: function(b, d) { var g, l = m.prop(b, d); return !0 === l || "boolean" != typeof l && (g = b.getAttributeNode(d)) && !1 !== g.nodeValue ? d.toLowerCase() : c }, set: function(b, c, d) { var g; return !1 === c ? m.removeAttr(b, d) : (g = m.propFix[d] || d, g in b && (b[g] = !0), b.setAttribute(d, d.toLowerCase())), d } }; Ua || (Sa = { name: !0, id: !0, coords: !0 }, ma = m.valHooks.button = { get: function(b, d) { var g; return g = b.getAttributeNode(d), g && (Sa[d] ? "" !== g.value : g.specified) ? g.value : c }, set: function(b, c, d) { var g = b.getAttributeNode(d); return g || (g = J.createAttribute(d), b.setAttributeNode(g)), g.value = c + "" } }, m.each(["width", "height"], function(b, c) { m.attrHooks[c] = m.extend(m.attrHooks[c], { set: function(b, d) { if ("" === d) return b.setAttribute(c, "auto"), d } }) }), m.attrHooks.contenteditable = { get: ma.get, set: function(b, c, d) { "" === c && (c = "false"); ma.set(b, c, d) } }); m.support.hrefNormalized || m.each(["href", "src", "width", "height"], function(b, d) { m.attrHooks[d] = m.extend(m.attrHooks[d], { get: function(b) { b = b.getAttribute(d, 2); return null === b ? c : b } }) }); m.support.style || (m.attrHooks.style = { get: function(b) { return b.style.cssText.toLowerCase() || c }, set: function(b, c) { return b.style.cssText = c + "" } }); m.support.optSelected || (m.propHooks.selected = m.extend(m.propHooks.selected, { get: function(b) { b = b.parentNode; return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null } })); m.support.enctype || (m.propFix.enctype = "encoding"); m.support.checkOn || m.each(["radio", "checkbox"], function() { m.valHooks[this] = { get: function(b) { return null === b.getAttribute("value") ? "on" : b.value } } }); m.each(["radio", "checkbox"], function() { m.valHooks[this] = m.extend(m.valHooks[this], { set: function(b, c) { if (m.isArray(c)) return b.checked = 0 <= m.inArray(m(b).val(), c) } }) }); var Ga = /^(?:textarea|input|select)$/i, ob = /^([^\.]*|)(?:\.(.+)|)$/, pb = /(?:^|\s)hover(\.\S+|)\b/, qb = /^key/, rb = /^(?:mouse|contextmenu)|click/, Va = /^(?:focusinfocus|focusoutblur)$/, Wa = function(b) { return m.event.special.hover ? b : b.replace(pb, "mouseenter$1 mouseleave$1") }; m.event = { add: function(b, d, g, l, e) { var s, f, p, r, j, n, F, v, D; if (!(3 === b.nodeType || 8 === b.nodeType || !d || !g || !(s = m._data(b)))) { g.handler && (F = g, g = F.handler, e = F.selector); g.guid || (g.guid = m.guid++); (p = s.events) || (s.events = p = {}); (f = s.handle) || (s.handle = f = function(b) { return "undefined" != typeof m && (!b || m.event.triggered !== b.type) ? m.event.dispatch.apply(f.elem, arguments) : c }, f.elem = b); d = m.trim(Wa(d)).split(" "); for (s = 0; s < d.length; s++) { r = ob.exec(d[s]) || []; j = r[1]; n = (r[2] || "").split(".").sort(); D = m.event.special[j] || {}; j = (e ? D.delegateType : D.bindType) || j; D = m.event.special[j] || {}; r = m.extend({ type: j, origType: r[1], data: l, handler: g, guid: g.guid, selector: e, needsContext: e && m.expr.match.needsContext.test(e), namespace: n.join(".") }, F); v = p[j]; if (!v && (v = p[j] = [], v.delegateCount = 0, !D.setup || !1 === D.setup.call(b, l, n, f))) b.addEventListener ? b.addEventListener(j, f, !1) : b.attachEvent && b.attachEvent("on" + j, f); D.add && (D.add.call(b, r), r.handler.guid || (r.handler.guid = g.guid)); e ? v.splice(v.delegateCount++, 0, r) : v.push(r); m.event.global[j] = !0 } b = null } }, global: {}, remove: function(b, c, d, g, l) { var e, s, f, p, r, j, n, F, v, D, aa = m.hasData(b) && m._data(b); if (aa && (n = aa.events)) { c = m.trim(Wa(c || "")).split(" "); for (e = 0; e < c.length; e++) if (s = ob.exec(c[e]) || [], f = p = s[1], s = s[2], f) { F = m.event.special[f] || {}; f = (g ? F.delegateType : F.bindType) || f; v = n[f] || []; r = v.length; s = s ? RegExp("(^|\\.)" + s.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; for (j = 0; j < v.length; j++) D = v[j], (l || p === D.origType) && (!d || d.guid === D.guid) && (!s || s.test(D.namespace)) && (!g || g === D.selector || "**" === g && D.selector) && (v.splice(j--, 1), D.selector && v.delegateCount--, F.remove && F.remove.call(b, D)); 0 === v.length && r !== v.length && ((!F.teardown || !1 === F.teardown.call(b, s, aa.handle)) && m.removeEvent(b, f, aa.handle), delete n[f]) } else for (f in n) m.event.remove(b, f + c[e], d, g, !0); m.isEmptyObject(n) && (delete aa.handle, m.removeData(b, "events", !0)) } }, customEvent: { getData: !0, setData: !0, changeData: !0 }, trigger: function(d, g, l, e) { if (!l || 3 !== l.nodeType && 8 !== l.nodeType) { var s, f, p, r, j, n, F, v = d.type || d; r = []; if (!Va.test(v + m.event.triggered) && (0 <= v.indexOf("!") && (v = v.slice(0, -1), s = !0), 0 <= v.indexOf(".") && (r = v.split("."), v = r.shift(), r.sort()), l && !m.event.customEvent[v] || m.event.global[v])) if (d = "object" == typeof d ? d[m.expando] ? d : new m.Event(v, d) : new m.Event(v), d.type = v, d.isTrigger = !0, d.exclusive = s, d.namespace = r.join("."), d.namespace_re = d.namespace ? RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, r = 0 > v.indexOf(":") ? "on" + v : "", l) { if (d.result = c, d.target || (d.target = l), g = null != g ? m.makeArray(g) : [], g.unshift(d), j = m.event.special[v] || {}, !(j.trigger && !1 === j.trigger.apply(l, g))) { F = [ [l, j.bindType || v] ]; if (!e && !j.noBubble && !m.isWindow(l)) { f = j.delegateType || v; s = Va.test(f + v) ? l : l.parentNode; for (p = l; s; s = s.parentNode) F.push([s, f]), p = s; p === (l.ownerDocument || J) && F.push([p.defaultView || p.parentWindow || b, f]) } for (f = 0; f < F.length && !d.isPropagationStopped(); f++) s = F[f][0], d.type = F[f][1], (n = (m._data(s, "events") || {})[d.type] && m._data(s, "handle")) && n.apply(s, g), (n = r && s[r]) && m.acceptData(s) && n.apply && !1 === n.apply(s, g) && d.preventDefault(); return d.type = v, !e && !d.isDefaultPrevented() && (!j._default || !1 === j._default.apply(l.ownerDocument, g)) && ("click" !== v || !m.nodeName(l, "a")) && m.acceptData(l) && r && l[v] && ("focus" !== v && "blur" !== v || 0 !== d.target.offsetWidth) && !m.isWindow(l) && (p = l[r], p && (l[r] = null), m.event.triggered = v, l[v](), m.event.triggered = c, p && (l[r] = p)), d.result } } else for (f in l = m.cache, l) l[f].events && l[f].events[v] && m.event.trigger(d, g, l[f].handle.elem, !0) } }, dispatch: function(d) { d = m.event.fix(d || b.event); var g, l, e, s, f, p, r = (m._data(this, "events") || {})[d.type] || [], j = r.delegateCount, n = F.call(arguments), v = !d.exclusive && !d.namespace, D = m.event.special[d.type] || {}, aa = []; n[0] = d; d.delegateTarget = this; if (!(D.preDispatch && !1 === D.preDispatch.call(this, d))) { if (j && (!d.button || "click" !== d.type)) for (l = d.target; l != this; l = l.parentNode || this) if (!0 !== l.disabled || "click" !== d.type) { s = {}; f = []; for (g = 0; g < j; g++) e = r[g], p = e.selector, s[p] === c && (s[p] = e.needsContext ? 0 <= m(p, this).index(l) : m.find(p, this, null, [l]).length), s[p] && f.push(e); f.length && aa.push({ elem: l, matches: f }) } r.length > j && aa.push({ elem: this, matches: r.slice(j) }); for (g = 0; g < aa.length && !d.isPropagationStopped(); g++) { s = aa[g]; d.currentTarget = s.elem; for (l = 0; l < s.matches.length && !d.isImmediatePropagationStopped(); l++) if (e = s.matches[l], v || !d.namespace && !e.namespace || d.namespace_re && d.namespace_re.test(e.namespace)) d.data = e.data, d.handleObj = e, e = ((m.event.special[e.origType] || {}).handle || e.handler).apply(s.elem, n), e !== c && (d.result = e, !1 === e && (d.preventDefault(), d.stopPropagation())) } return D.postDispatch && D.postDispatch.call(this, d), d.result } }, props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: ["char", "charCode", "key", "keyCode"], filter: function(b, c) { return null == b.which && (b.which = null != c.charCode ? c.charCode : c.keyCode), b } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function(b, d) { var g, l, e, m = d.button, s = d.fromElement; return null == b.pageX && null != d.clientX && (g = b.target.ownerDocument || J, l = g.documentElement, e = g.body, b.pageX = d.clientX + (l && l.scrollLeft || e && e.scrollLeft || 0) - (l && l.clientLeft || e && e.clientLeft || 0), b.pageY = d.clientY + (l && l.scrollTop || e && e.scrollTop || 0) - (l && l.clientTop || e && e.clientTop || 0)), !b.relatedTarget && s && (b.relatedTarget = s === b.target ? d.toElement : s), !b.which && m !== c && (b.which = m & 1 ? 1 : m & 2 ? 3 : m & 4 ? 2 : 0), b } }, fix: function(b) { if (b[m.expando]) return b; var c, d, g = b, l = m.event.fixHooks[b.type] || {}, e = l.props ? this.props.concat(l.props) : this.props; b = m.Event(g); for (c = e.length; c;) d = e[--c], b[d] = g[d]; return b.target || (b.target = g.srcElement || J), 3 === b.target.nodeType && (b.target = b.target.parentNode), b.metaKey = !!b.metaKey, l.filter ? l.filter(b, g) : b }, special: { load: { noBubble: !0 }, focus: { delegateType: "focusin" }, blur: { delegateType: "focusout" }, beforeunload: { setup: function(b, c, d) { m.isWindow(this) && (this.onbeforeunload = d) }, teardown: function(b, c) { this.onbeforeunload === c && (this.onbeforeunload = null) } } }, simulate: function(b, c, d, g) { b = m.extend(new m.Event, d, { type: b, isSimulated: !0, originalEvent: {} }); g ? m.event.trigger(b, null, c) : m.event.dispatch.call(c, b); b.isDefaultPrevented() && d.preventDefault() } }; m.event.handle = m.event.dispatch; m.removeEvent = J.removeEventListener ? function(b, c, d) { b.removeEventListener && b.removeEventListener(c, d, !1) } : function(b, c, d) { c = "on" + c; b.detachEvent && ("undefined" == typeof b[c] && (b[c] = null), b.detachEvent(c, d)) }; m.Event = function(b, c) { if (this instanceof m.Event) b && b.type ? (this.originalEvent = b, this.type = b.type, this.isDefaultPrevented = b.defaultPrevented || !1 === b.returnValue || b.getPreventDefault && b.getPreventDefault() ? j : f) : this.type = b, c && m.extend(this, c), this.timeStamp = b && b.timeStamp || m.now(), this[m.expando] = !0; else return new m.Event(b, c) }; m.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = j; var b = this.originalEvent; b && (b.preventDefault ? b.preventDefault() : b.returnValue = !1) }, stopPropagation: function() { this.isPropagationStopped = j; var b = this.originalEvent; b && (b.stopPropagation && b.stopPropagation(), b.cancelBubble = !0) }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = j; this.stopPropagation() }, isDefaultPrevented: f, isPropagationStopped: f, isImmediatePropagationStopped: f }; m.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function(b, c) { m.event.special[b] = { delegateType: c, bindType: c, handle: function(b) { var d, g = b.relatedTarget, l = b.handleObj; if (!g || g !== this && !m.contains(this, g)) b.type = l.origType, d = l.handler.apply(this, arguments), b.type = c; return d } } }); m.support.submitBubbles || (m.event.special.submit = { setup: function() { if (m.nodeName(this, "form")) return !1; m.event.add(this, "click._submit keypress._submit", function(b) { b = b.target; (b = m.nodeName(b, "input") || m.nodeName(b, "button") ? b.form : c) && !m._data(b, "_submit_attached") && (m.event.add(b, "submit._submit", function(b) { b._submit_bubble = !0 }), m._data(b, "_submit_attached", !0)) }) }, postDispatch: function(b) { b._submit_bubble && (delete b._submit_bubble, this.parentNode && !b.isTrigger && m.event.simulate("submit", this.parentNode, b, !0)) }, teardown: function() { if (m.nodeName(this, "form")) return !1; m.event.remove(this, "._submit") } }); m.support.changeBubbles || (m.event.special.change = { setup: function() { if (Ga.test(this.nodeName)) { if ("checkbox" === this.type || "radio" === this.type) m.event.add(this, "propertychange._change", function(b) { "checked" === b.originalEvent.propertyName && (this._just_changed = !0) }), m.event.add(this, "click._change", function(b) { this._just_changed && !b.isTrigger && (this._just_changed = !1); m.event.simulate("change", this, b, !0) }); return !1 } m.event.add(this, "beforeactivate._change", function(b) { b = b.target; Ga.test(b.nodeName) && !m._data(b, "_change_attached") && (m.event.add(b, "change._change", function(b) { this.parentNode && !b.isSimulated && !b.isTrigger && m.event.simulate("change", this.parentNode, b, !0) }), m._data(b, "_change_attached", !0)) }) }, handle: function(b) { var c = b.target; if (this !== c || b.isSimulated || b.isTrigger || "radio" !== c.type && "checkbox" !== c.type) return b.handleObj.handler.apply(this, arguments) }, teardown: function() { return m.event.remove(this, "._change"), !Ga.test(this.nodeName) } }); m.support.focusinBubbles || m.each({ focus: "focusin", blur: "focusout" }, function(b, c) { var d = 0, g = function(b) { m.event.simulate(c, b.target, m.event.fix(b), !0) }; m.event.special[c] = { setup: function() { 0 === d++ && J.addEventListener(b, g, !0) }, teardown: function() { 0 === --d && J.removeEventListener(b, g, !0) } } }); m.fn.extend({ on: function(b, d, g, l, e) { var s, p; if ("object" == typeof b) { "string" != typeof d && (g = g || d, d = c); for (p in b) this.on(p, d, g, b[p], e); return this } null == g && null == l ? (l = d, g = d = c) : null == l && ("string" == typeof d ? (l = g, g = c) : (l = g, g = d, d = c)); if (!1 === l) l = f; else if (!l) return this; return 1 === e && (s = l, l = function(b) { return m().off(b), s.apply(this, arguments) }, l.guid = s.guid || (s.guid = m.guid++)), this.each(function() { m.event.add(this, b, l, g, d) }) }, one: function(b, c, d, g) { return this.on(b, c, d, g, 1) }, off: function(b, d, g) { var l, e; if (b && b.preventDefault && b.handleObj) return l = b.handleObj, m(b.delegateTarget).off(l.namespace ? l.origType + "." + l.namespace : l.origType, l.selector, l.handler), this; if ("object" == typeof b) { for (e in b) this.off(e, d, b[e]); return this } if (!1 === d || "function" == typeof d) g = d, d = c; return !1 === g && (g = f), this.each(function() { m.event.remove(this, b, g, d) }) }, bind: function(b, c, d) { return this.on(b, null, c, d) }, unbind: function(b, c) { return this.off(b, null, c) }, live: function(b, c, d) { return m(this.context).on(b, this.selector, c, d), this }, die: function(b, c) { return m(this.context).off(b, this.selector || "**", c), this }, delegate: function(b, c, d, g) { return this.on(c, b, d, g) }, undelegate: function(b, c, d) { return 1 === arguments.length ? this.off(b, "**") : this.off(c, b || "**", d) }, trigger: function(b, c) { return this.each(function() { m.event.trigger(b, c, this) }) }, triggerHandler: function(b, c) { if (this[0]) return m.event.trigger(b, c, this[0], !0) }, toggle: function(b) { var c = arguments, d = b.guid || m.guid++, g = 0, l = function(d) { var l = (m._data(this, "lastToggle" + b.guid) || 0) % g; return m._data(this, "lastToggle" + b.guid, l + 1), d.preventDefault(), c[l].apply(this, arguments) || !1 }; for (l.guid = d; g < c.length;) c[g++].guid = d; return this.click(l) }, hover: function(b, c) { return this.mouseenter(b).mouseleave(c || b) } }); m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(b, c) { m.fn[c] = function(b, d) { return null == d && (d = b, b = null), 0 < arguments.length ? this.on(c, null, b, d) : this.trigger(c) }; qb.test(c) && (m.event.fixHooks[c] = m.event.keyHooks); rb.test(c) && (m.event.fixHooks[c] = m.event.mouseHooks) }); var sb = b, W = function(b, c, d, g) { d = d || []; c = c || na; var l, e, m, s, f = c.nodeType; if (!b || "string" != typeof b) return d; if (1 !== f && 9 !== f) return []; m = Fb(c); if (!m && !g && (l = Sc.exec(b))) if (s = l[1]) if (9 === f) { e = c.getElementById(s); if (!e || !e.parentNode) return d; if (e.id === s) return d.push(e), d } else { if (c.ownerDocument && (e = c.ownerDocument.getElementById(s)) && nc(c, e) && e.id === s) return d.push(e), d } else { if (l[2]) return Xa.apply(d, Ya.call(c.getElementsByTagName(b), 0)), d; if ((s = l[3]) && oc && c.getElementsByClassName) return Xa.apply(d, Ya.call(c.getElementsByClassName(s), 0)), d } return Tb(b.replace(Gb, "$1"), c, d, g, m) }, va = function(b) { return function(c) { return "input" === c.nodeName.toLowerCase() && c.type === b } }, Za = function(b) { return function(c) { var d = c.nodeName.toLowerCase(); return ("input" === d || "button" === d) && c.type === b } }, pa = function(b) { return oa(function(c) { return c = +c, oa(function(d, g) { for (var l, e = b([], d.length, c), s = e.length; s--;) d[l = e[s]] && (d[l] = !(g[l] = d[l])) }) }) }, xa = function(b, c, d) { if (b === c) return d; for (b = b.nextSibling; b;) { if (b === c) return -1; b = b.nextSibling } return 1 }, ya = function(b, c) { var d, g, l, e, s, m, f; if (s = pc[fa][b]) return c ? 0 : s.slice(0); s = b; m = []; for (f = da.preFilter; s;) { if (!d || (g = Tc.exec(s))) g && (s = s.slice(g[0].length)), m.push(l = []); d = !1; if (g = Uc.exec(s)) l.push(d = new qc(g.shift())), s = s.slice(d.length), d.type = g[0].replace(Gb, " "); for (e in da.filter)(g = Hb[e].exec(s)) && (!f[e] || (g = f[e](g, na, !0))) && (l.push(d = new qc(g.shift())), s = s.slice(d.length), d.type = e, d.matches = g); if (!d) break } return c ? s.length : s ? W.error(b) : pc(b, m).slice(0) }, Vb = function(b, c, d) { var g = c.dir, l = d && "parentNode" === c.dir, e = Vc++; return c.first ? function(c, d, e) { for (; c = c[g];) if (l || 1 === c.nodeType) return b(c, d, e) } : function(c, d, s) { if (s) for (; c = c[g];) { if ((l || 1 === c.nodeType) && b(c, d, s)) return c } else for (var m, f = tb + " " + e + " ", p = f + Ub; c = c[g];) if (l || 1 === c.nodeType) { if ((m = c[fa]) === p) return c.sizset; if ("string" == typeof m && 0 === m.indexOf(f)) { if (c.sizset) return c } else { c[fa] = p; if (b(c, d, s)) return c.sizset = !0, c; c.sizset = !1 } } } }, Wb = function(b) { return 1 < b.length ? function(c, d, g) { for (var l = b.length; l--;) if (!b[l](c, d, g)) return !1; return !0 } : b[0] }, Ib = function(b, c, d, g, l) { for (var e, s = [], m = 0, f = b.length, p = null != c; m < f; m++) if (e = b[m]) if (!d || d(e, g, l)) s.push(e), p && c.push(m); return s }, Xb = function(b, c, d, g, l, e) { return g && !g[fa] && (g = Xb(g)), l && !l[fa] && (l = Xb(l, e)), oa(function(e, s, m, f) { if (!e || !l) { var p, r, j = [], n = [], F = s.length; if (!(r = e)) { r = c || "*"; var v = m.nodeType ? [m] : m, D = []; p = 0; for (var aa = v.length; p < aa; p++) W(r, v[p], D, e); r = D } v = b && (e || !c) ? Ib(r, j, b, m, f) : r; D = d ? l || (e ? b : F || g) ? [] : s : v; d && d(v, D, m, f); if (g) { r = Ib(D, n); g(r, [], m, f); for (m = r.length; m--;) if (p = r[m]) D[n[m]] = !(v[n[m]] = p) } if (e) for (m = b && D.length; m--;) { if (p = D[m]) e[j[m]] = !(s[j[m]] = p) } else D = Ib(D === s ? D.splice(F, D.length) : D), l ? l(null, s, D, f) : Xa.apply(s, D) } }) }, Yb = function(b) { var c, d, g, l = b.length, e = da.relative[b[0].type]; d = e || da.relative[" "]; for (var s = e ? 1 : 0, m = Vb(function(b) { return b === c }, d, !0), f = Vb(function(b) { return -1 < rc.call(c, b) }, d, !0), p = [ function(b, d, g) { return !e && (g || d !== Jb) || ((c = d).nodeType ? m(b, d, g) : f(b, d, g)) } ]; s < l; s++) if (d = da.relative[b[s].type]) p = [Vb(Wb(p), d)]; else { d = da.filter[b[s].type].apply(null, b[s].matches); if (d[fa]) { for (g = ++s; g < l && !da.relative[b[g].type]; g++); return Xb(1 < s && Wb(p), 1 < s && b.slice(0, s - 1).join("").replace(Gb, "$1"), d, s < g && Yb(b.slice(s, g)), g < l && Yb(b = b.slice(g)), g < l && b.join("")) } p.push(d) } return Wb(p) }, Tb = function(b, c, d, g, l) { var e, s, m, f, p = ya(b); if (!g && 1 === p.length) { s = p[0] = p[0].slice(0); if (2 < s.length && "ID" === (m = s[0]).type && 9 === c.nodeType && !l && da.relative[s[1].type]) { c = da.find.ID(m.matches[0].replace(Ha, ""), c, l)[0]; if (!c) return d; b = b.slice(s.shift().length) } for (e = Hb.POS.test(b) ? -1 : s.length - 1; 0 <= e; e--) { m = s[e]; if (da.relative[f = m.type]) break; if (f = da.find[f]) if (g = f(m.matches[0].replace(Ha, ""), Zb.test(s[0].type) && c.parentNode || c, l)) { s.splice(e, 1); b = g.length && s.join(""); if (!b) return Xa.apply(d, Ya.call(g, 0)), d; break } } } return $b(b, p)(g, c, l, d, Zb.test(b)), d }, sc = function() {}, Ub, ac, da, Kb, Fb, nc, $b, bc, ub, Jb, tc = !0, fa = ("sizcache" + Math.random()).replace(".", ""), qc = String, na = sb.document, ja = na.documentElement, tb = 0, Vc = 0, Wc = [].pop, Xa = [].push, Ya = [].slice, rc = [].indexOf || function(b) { for (var c = 0, d = this.length; c < d; c++) if (this[c] === b) return c; return -1 }, oa = function(b, c) { return b[fa] = null == c || c, b }, cc = function() { var b = {}, c = []; return oa(function(d, g) { return c.push(d) > da.cacheLength && delete b[c.shift()], b[d] = g }, b) }, uc = cc(), pc = cc(), vc = cc(), wc = "\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[-\\w]|[^\\x00-\\xa0])+)[\\x20\\t\\r\\n\\f]*(?:([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+".replace("w", "w#") + ")|)|)[\\x20\\t\\r\\n\\f]*\\]", dc = ":((?:\\\\.|[-\\w]|[^\\x00-\\xa0])+)(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + wc + ")|[^:]|\\\\.)*|.*))\\)|)", Gb = /^[\x20\t\r\n\f]+|((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$/g, Tc = /^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/, Uc = /^[\x20\t\r\n\f]*([\x20\t\r\n\f>+~])[\x20\t\r\n\f]*/, Xc = RegExp(dc), Sc = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, Zb = /[\x20\t\r\n\f]*[+~]/, Yc = /h\d/i, Zc = /input|select|textarea|button/i, Ha = /\\(?!\\)/g, Hb = { ID: /^#((?:\\.|[-\w]|[^\x00-\xa0])+)/, CLASS: /^\.((?:\\.|[-\w]|[^\x00-\xa0])+)/, NAME: /^\[name=['"]?((?:\\.|[-\w]|[^\x00-\xa0])+)['"]?\]/, TAG: RegExp("^(" + "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+".replace("w", "w*") + ")"), ATTR: RegExp("^" + wc), PSEUDO: RegExp("^" + dc), POS: /:(even|odd|eq|gt|lt|nth|first|last)(?:\([\x20\t\r\n\f]*((?:-\d)?\d*)[\x20\t\r\n\f]*\)|)(?=[^-]|$)/i, CHILD: RegExp("^:(only|nth|first|last)-child(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)", "i"), needsContext: RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)", "i") }, za = function(b) { var c = na.createElement("div"); try { return b(c) } catch (d) { return !1 } finally {} }, $c = za(function(b) { return b.appendChild(na.createComment("")), !b.getElementsByTagName("*").length }), ad = za(function(b) { return b.innerHTML = "", b.firstChild && "undefined" !== typeof b.firstChild.getAttribute && "#" === b.firstChild.getAttribute("href") }), bd = za(function(b) { b.innerHTML = ""; b = typeof b.lastChild.getAttribute("multiple"); return "boolean" !== b && "string" !== b }), oc = za(function(b) { return b.innerHTML = "", !b.getElementsByClassName || !b.getElementsByClassName("e").length ? !1 : (b.lastChild.className = "e", 2 === b.getElementsByClassName("e").length) }), cd = za(function(b) { b.id = fa + 0; b.innerHTML = "
"; ja.insertBefore(b, ja.firstChild); var c = na.getElementsByName && na.getElementsByName(fa).length === 2 + na.getElementsByName(fa + 0).length; return ac = !na.getElementById(fa), ja.removeChild(b), c }); try { Ya.call(ja.childNodes, 0)[0].nodeType } catch (Ld) { Ya = function(b) { for (var c, d = []; c = this[b]; b++) d.push(c); return d } } W.matches = function(b, c) { return W(b, null, null, c) }; W.matchesSelector = function(b, c) { return 0 < W(c, null, null, [b]).length }; Kb = W.getText = function(b) { var c, d = "", g = 0; if (c = b.nodeType) if (1 === c || 9 === c || 11 === c) { if ("string" == typeof b.textContent) return b.textContent; for (b = b.firstChild; b; b = b.nextSibling) d += Kb(b) } else { if (3 === c || 4 === c) return b.nodeValue } else for (; c = b[g]; g++) d += Kb(c); return d }; Fb = W.isXML = function(b) { return (b = b && (b.ownerDocument || b).documentElement) ? "HTML" !== b.nodeName : !1 }; nc = W.contains = ja.contains ? function(b, c) { var d = 9 === b.nodeType ? b.documentElement : b, g = c && c.parentNode; return b === g || !(!g || !(1 === g.nodeType && d.contains && d.contains(g))) } : ja.compareDocumentPosition ? function(b, c) { return c && !!(b.compareDocumentPosition(c) & 16) } : function(b, c) { for (; c = c.parentNode;) if (c === b) return !0; return !1 }; W.attr = function(b, c) { var d, g = Fb(b); return g || (c = c.toLowerCase()), (d = da.attrHandle[c]) ? d(b) : g || bd ? b.getAttribute(c) : (d = b.getAttributeNode(c), d ? "boolean" == typeof b[c] ? b[c] ? c : null : d.specified ? d.value : null : null) }; da = W.selectors = { cacheLength: 50, createPseudo: oa, match: Hb, attrHandle: ad ? {} : { href: function(b) { return b.getAttribute("href", 2) }, type: function(b) { return b.getAttribute("type") } }, find: { ID: ac ? function(b, c, d) { if ("undefined" !== typeof c.getElementById && !d) return (b = c.getElementById(b)) && b.parentNode ? [b] : [] } : function(b, c, d) { if ("undefined" !== typeof c.getElementById && !d) return (c = c.getElementById(b)) ? c.id === b || "undefined" !== typeof c.getAttributeNode && c.getAttributeNode("id").value === b ? [c] : void 0 : [] }, TAG: $c ? function(b, c) { if ("undefined" !== typeof c.getElementsByTagName) return c.getElementsByTagName(b) } : function(b, c) { var d = c.getElementsByTagName(b); if ("*" === b) { for (var g, l = [], e = 0; g = d[e]; e++) 1 === g.nodeType && l.push(g); return l } return d }, NAME: cd && function(b, c) { if ("undefined" !== typeof c.getElementsByName) return c.getElementsByName(name) }, CLASS: oc && function(b, c, d) { if ("undefined" !== typeof c.getElementsByClassName && !d) return c.getElementsByClassName(b) } }, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function(b) { return b[1] = b[1].replace(Ha, ""), b[3] = (b[4] || b[5] || "").replace(Ha, ""), "~=" === b[2] && (b[3] = " " + b[3] + " "), b.slice(0, 4) }, CHILD: function(b) { return b[1] = b[1].toLowerCase(), "nth" === b[1] ? (b[2] || W.error(b[0]), b[3] = +(b[3] ? b[4] + (b[5] || 1) : 2 * ("even" === b[2] || "odd" === b[2])), b[4] = +(b[6] + b[7] || "odd" === b[2])) : b[2] && W.error(b[0]), b }, PSEUDO: function(b) { var c, d; if (Hb.CHILD.test(b[0])) return null; if (b[3]) b[2] = b[3]; else if (c = b[4]) Xc.test(c) && (d = ya(c, !0)) && (d = c.indexOf(")", c.length - d) - c.length) && (c = c.slice(0, d), b[0] = b[0].slice(0, d)), b[2] = c; return b.slice(0, 3) } }, filter: { ID: ac ? function(b) { return b = b.replace(Ha, ""), function(c) { return c.getAttribute("id") === b } } : function(b) { return b = b.replace(Ha, ""), function(c) { return (c = "undefined" !== typeof c.getAttributeNode && c.getAttributeNode("id")) && c.value === b } }, TAG: function(b) { return "*" === b ? function() { return !0 } : (b = b.replace(Ha, "").toLowerCase(), function(c) { return c.nodeName && c.nodeName.toLowerCase() === b }) }, CLASS: function(b) { var c = uc[fa][b]; return c || (c = uc(b, RegExp("(^|[\\x20\\t\\r\\n\\f])" + b + "([\\x20\\t\\r\\n\\f]|$)"))), function(b) { return c.test(b.className || "undefined" !== typeof b.getAttribute && b.getAttribute("class") || "") } }, ATTR: function(b, c, d) { return function(g) { g = W.attr(g, b); return null == g ? "!=" === c : c ? (g += "", "=" === c ? g === d : "!=" === c ? g !== d : "^=" === c ? d && 0 === g.indexOf(d) : "*=" === c ? d && -1 < g.indexOf(d) : "$=" === c ? d && g.substr(g.length - d.length) === d : "~=" === c ? -1 < (" " + g + " ").indexOf(d) : "|=" === c ? g === d || g.substr(0, d.length + 1) === d + "-" : !1) : !0 } }, CHILD: function(b, c, d, g) { return "nth" === b ? function(b) { var c, l; c = b.parentNode; if (1 === d && 0 === g) return !0; if (c) { l = 0; for (c = c.firstChild; c && !(1 === c.nodeType && (l++, b === c)); c = c.nextSibling); } return l -= g, l === d || 0 === l % d && 0 <= l / d } : function(c) { var d = c; switch (b) { case "only": case "first": for (; d = d.previousSibling;) if (1 === d.nodeType) return !1; if ("first" === b) return !0; d = c; case "last": for (; d = d.nextSibling;) if (1 === d.nodeType) return !1; return !0 } } }, PSEUDO: function(b, c) { var d, g = da.pseudos[b] || da.setFilters[b.toLowerCase()] || W.error("unsupported pseudo: " + b); return g[fa] ? g(c) : 1 < g.length ? (d = [b, b, "", c], da.setFilters.hasOwnProperty(b.toLowerCase()) ? oa(function(b, d) { for (var l, e = g(b, c), s = e.length; s--;) l = rc.call(b, e[s]), b[l] = !(d[l] = e[s]) }) : function(b) { return g(b, 0, d) }) : g } }, pseudos: { not: oa(function(b) { var c = [], d = [], g = $b(b.replace(Gb, "$1")); return g[fa] ? oa(function(b, c, d, l) { l = g(b, null, l, []); for (var e = b.length; e--;) if (d = l[e]) b[e] = !(c[e] = d) }) : function(b, l, e) { return c[0] = b, g(c, null, e, d), !d.pop() } }), has: oa(function(b) { return function(c) { return 0 < W(b, c).length } }), contains: oa(function(b) { return function(c) { return -1 < (c.textContent || c.innerText || Kb(c)).indexOf(b) } }), enabled: function(b) { return !1 === b.disabled }, disabled: function(b) { return !0 === b.disabled }, checked: function(b) { var c = b.nodeName.toLowerCase(); return "input" === c && !!b.checked || "option" === c && !!b.selected }, selected: function(b) { return b.parentNode && b.parentNode.selectedIndex, !0 === b.selected }, parent: function(b) { return !da.pseudos.empty(b) }, empty: function(b) { var c; for (b = b.firstChild; b;) { if ("@" < b.nodeName || 3 === (c = b.nodeType) || 4 === c) return !1; b = b.nextSibling } return !0 }, header: function(b) { return Yc.test(b.nodeName) }, text: function(b) { var c, d; return "input" === b.nodeName.toLowerCase() && "text" === (c = b.type) && (null == (d = b.getAttribute("type")) || d.toLowerCase() === c) }, radio: va("radio"), checkbox: va("checkbox"), file: va("file"), password: va("password"), image: va("image"), submit: Za("submit"), reset: Za("reset"), button: function(b) { var c = b.nodeName.toLowerCase(); return "input" === c && "button" === b.type || "button" === c }, input: function(b) { return Zc.test(b.nodeName) }, focus: function(b) { var c = b.ownerDocument; return b === c.activeElement && (!c.hasFocus || c.hasFocus()) && (!!b.type || !!b.href) }, active: function(b) { return b === b.ownerDocument.activeElement }, first: pa(function() { return [0] }), last: pa(function(b, c) { return [c - 1] }), eq: pa(function(b, c, d) { return [0 > d ? d + c : d] }), even: pa(function(b, c) { for (var d = 0; d < c; d += 2) b.push(d); return b }), odd: pa(function(b, c) { for (var d = 1; d < c; d += 2) b.push(d); return b }), lt: pa(function(b, c, d) { for (c = 0 > d ? d + c : d; 0 <= --c;) b.push(c); return b }), gt: pa(function(b, c, d) { for (d = 0 > d ? d + c : d; ++d < c;) b.push(d); return b }) } }; bc = ja.compareDocumentPosition ? function(b, c) { return b === c ? (ub = !0, 0) : (!b.compareDocumentPosition || !c.compareDocumentPosition ? b.compareDocumentPosition : b.compareDocumentPosition(c) & 4) ? -1 : 1 } : function(b, c) { if (b === c) return ub = !0, 0; if (b.sourceIndex && c.sourceIndex) return b.sourceIndex - c.sourceIndex; var d, g, l = [], e = []; d = b.parentNode; g = c.parentNode; var s = d; if (d === g) return xa(b, c); if (!d) return -1; if (!g) return 1; for (; s;) l.unshift(s), s = s.parentNode; for (s = g; s;) e.unshift(s), s = s.parentNode; d = l.length; g = e.length; for (s = 0; s < d && s < g; s++) if (l[s] !== e[s]) return xa(l[s], e[s]); return s === d ? xa(b, e[s], -1) : xa(l[s], c, 1) }; [0, 0].sort(bc); tc = !ub; W.uniqueSort = function(b) { var c, d = 1; ub = tc; b.sort(bc); if (ub) for (; c = b[d]; d++) c === b[d - 1] && b.splice(d--, 1); return b }; W.error = function(b) { throw Error("Syntax error, unrecognized expression: " + b); }; $b = W.compile = function(b, c) { var d, g = [], l = [], e = vc[fa][b]; if (!e) { c || (c = ya(b)); for (d = c.length; d--;) e = Yb(c[d]), e[fa] ? g.push(e) : l.push(e); var s = 0 < g.length, m = 0 < l.length, f = function(b, c, d, e, p) { var r, j, n = [], F = 0, v = "0", D = b && [], ba = null != p, aa = Jb, y = b || m && da.find.TAG("*", p && c.parentNode || c), O = tb += null == aa ? 1 : Math.E; for (ba && (Jb = c !== na && c, Ub = f.el); null != (p = y[v]); v++) { if (m && p) { for (r = 0; j = l[r]; r++) if (j(p, c, d)) { e.push(p); break } ba && (tb = O, Ub = ++f.el) } s && ((p = !j && p) && F--, b && D.push(p)) } F += v; if (s && v !== F) { for (r = 0; j = g[r]; r++) j(D, n, c, d); if (b) { if (0 < F) for (; v--;) !D[v] && !n[v] && (n[v] = Wc.call(e)); n = Ib(n) } Xa.apply(e, n); ba && !b && 0 < n.length && 1 < F + g.length && W.uniqueSort(e) } return ba && (tb = O, Jb = aa), D }; d = (f.el = 0, s ? oa(f) : f); e = vc(b, d) } return e }; if (na.querySelectorAll) { var xc, dd = Tb, ed = /'|\\/g, fd = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, ta = [":focus"], Lb = [":active", ":focus"], Mb = ja.matchesSelector || ja.mozMatchesSelector || ja.webkitMatchesSelector || ja.oMatchesSelector || ja.msMatchesSelector; za(function(b) { b.innerHTML = ""; b.querySelectorAll("[selected]").length || ta.push("\\[[\\x20\\t\\r\\n\\f]*(?:checked|disabled|ismap|multiple|readonly|selected|value)"); b.querySelectorAll(":checked").length || ta.push(":checked") }); za(function(b) { b.innerHTML = "

"; b.querySelectorAll("[test^='']").length && ta.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:\"\"|'')"); b.innerHTML = ""; b.querySelectorAll(":enabled").length || ta.push(":enabled", ":disabled") }); ta = RegExp(ta.join("|")); Tb = function(b, c, d, g, l) { if (!g && !l && (!ta || !ta.test(b))) { var e, s, m = !0, f = fa; s = c; e = 9 === c.nodeType && b; if (1 === c.nodeType && "object" !== c.nodeName.toLowerCase()) { e = ya(b); (m = c.getAttribute("id")) ? f = m.replace(ed, "\\$&"): c.setAttribute("id", f); f = "[id='" + f + "'] "; for (s = e.length; s--;) e[s] = f + e[s].join(""); s = Zb.test(b) && c.parentNode || c; e = e.join(",") } if (e) try { return Xa.apply(d, Ya.call(s.querySelectorAll(e), 0)), d } catch (p) {} finally { m || c.removeAttribute("id") } } return dd(b, c, d, g, l) }; Mb && (za(function(b) { xc = Mb.call(b, "div"); try { Mb.call(b, "[test!='']:sizzle"), Lb.push("!=", dc) } catch (c) {} }), Lb = RegExp(Lb.join("|")), W.matchesSelector = function(b, c) { c = c.replace(fd, "='$1']"); if (!Fb(b) && !Lb.test(c) && (!ta || !ta.test(c))) try { var d = Mb.call(b, c); if (d || xc || b.document && 11 !== b.document.nodeType) return d } catch (g) {} return 0 < W(c, null, null, [b]).length }) } da.pseudos.nth = da.pseudos.eq; da.filters = sc.prototype = da.pseudos; da.setFilters = new sc; W.attr = m.attr; m.find = W; m.expr = W.selectors; m.expr[":"] = m.expr.pseudos; m.unique = W.uniqueSort; m.text = W.getText; m.isXMLDoc = W.isXML; m.contains = W.contains; var gd = /Until$/, hd = /^(?:parents|prev(?:Until|All))/, Oc = /^.[^:#\[\.,]*$/, yc = m.expr.match.needsContext, id = { children: !0, contents: !0, next: !0, prev: !0 }; m.fn.extend({ find: function(b) { var c, d, g, l, e, s, f = this; if ("string" != typeof b) return m(b).filter(function() { c = 0; for (d = f.length; c < d; c++) if (m.contains(f[c], this)) return !0 }); s = this.pushStack("", "find", b); c = 0; for (d = this.length; c < d; c++) if (g = s.length, m.find(b, this[c], s), 0 < c) for (l = g; l < s.length; l++) for (e = 0; e < g; e++) if (s[e] === s[l]) { s.splice(l--, 1); break } return s }, has: function(b) { var c, d = m(b, this), g = d.length; return this.filter(function() { for (c = 0; c < g; c++) if (m.contains(this, d[c])) return !0 }) }, not: function(b) { return this.pushStack(g(this, b, !1), "not", b) }, filter: function(b) { return this.pushStack(g(this, b, !0), "filter", b) }, is: function(b) { return !!b && ("string" == typeof b ? yc.test(b) ? 0 <= m(b, this.context).index(this[0]) : 0 < m.filter(b, this).length : 0 < this.filter(b).length) }, closest: function(b, c) { for (var d, g = 0, l = this.length, e = [], s = yc.test(b) || "string" != typeof b ? m(b, c || this.context) : 0; g < l; g++) for (d = this[g]; d && d.ownerDocument && d !== c && 11 !== d.nodeType;) { if (s ? -1 < s.index(d) : m.find.matchesSelector(d, b)) { e.push(d); break } d = d.parentNode } return e = 1 < e.length ? m.unique(e) : e, this.pushStack(e, "closest", b) }, index: function(b) { return b ? "string" == typeof b ? m.inArray(this[0], m(b)) : m.inArray(b.jquery ? b[0] : b, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1 }, add: function(b, c) { var d = "string" == typeof b ? m(b, c) : m.makeArray(b && b.nodeType ? [b] : b), g = m.merge(this.get(), d); return this.pushStack(q(d[0]) || q(g[0]) ? g : m.unique(g)) }, addBack: function(b) { return this.add(null == b ? this.prevObject : this.prevObject.filter(b)) } }); m.fn.andSelf = m.fn.addBack; m.each({ parent: function(b) { return (b = b.parentNode) && 11 !== b.nodeType ? b : null }, parents: function(b) { return m.dir(b, "parentNode") }, parentsUntil: function(b, c, d) { return m.dir(b, "parentNode", d) }, next: function(b) { return n(b, "nextSibling") }, prev: function(b) { return n(b, "previousSibling") }, nextAll: function(b) { return m.dir(b, "nextSibling") }, prevAll: function(b) { return m.dir(b, "previousSibling") }, nextUntil: function(b, c, d) { return m.dir(b, "nextSibling", d) }, prevUntil: function(b, c, d) { return m.dir(b, "previousSibling", d) }, siblings: function(b) { return m.sibling((b.parentNode || {}).firstChild, b) }, children: function(b) { return m.sibling(b.firstChild) }, contents: function(b) { return m.nodeName(b, "iframe") ? b.contentDocument || b.contentWindow.document : m.merge([], b.childNodes) } }, function(b, c) { m.fn[b] = function(d, g) { var l = m.map(this, c, d); return gd.test(b) || (g = d), g && "string" == typeof g && (l = m.filter(g, l)), l = 1 < this.length && !id[b] ? m.unique(l) : l, 1 < this.length && hd.test(b) && (l = l.reverse()), this.pushStack(l, b, F.call(arguments).join(",")) } }); m.extend({ filter: function(b, c, d) { return d && (b = ":not(" + b + ")"), 1 === c.length ? m.find.matchesSelector(c[0], b) ? [c[0]] : [] : m.find.matches(b, c) }, dir: function(b, d, g) { var l = []; for (b = b[d]; b && 9 !== b.nodeType && (g === c || 1 !== b.nodeType || !m(b).is(g));) 1 === b.nodeType && l.push(b), b = b[d]; return l }, sibling: function(b, c) { for (var d = []; b; b = b.nextSibling) 1 === b.nodeType && b !== c && d.push(b); return d } }); var kc = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", jd = / jQuery\d+="(?:null|\d+)"/g, ec = /^\s+/, zc = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, Ac = /<([\w:]+)/, kd = /]", "i"), lc = /^(?:checkbox|radio)$/, Bc = /checked\s*(?:[^=]|=\s*.checked.)/i, od = /\/(java|ecma)script/i, pd = /^\s*\s*$/g, ia = { option: [1, ""], legend: [1, "
", "
"], thead: [1, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], col: [2, "", "
"], area: [1, "", ""], _default: [0, "", ""] }, Cc = y(J), gc = Cc.appendChild(J.createElement("div")); ia.optgroup = ia.option; ia.tbody = ia.tfoot = ia.colgroup = ia.caption = ia.thead; ia.th = ia.td; m.support.htmlSerialize || (ia._default = [1, "X
", "
"]); m.fn.extend({ text: function(b) { return m.access(this, function(b) { return b === c ? m.text(this) : this.empty().append((this[0] && this[0].ownerDocument || J).createTextNode(b)) }, null, b, arguments.length) }, wrapAll: function(b) { if (m.isFunction(b)) return this.each(function(c) { m(this).wrapAll(b.call(this, c)) }); if (this[0]) { var c = m(b, this[0].ownerDocument).eq(0).clone(!0); this[0].parentNode && c.insertBefore(this[0]); c.map(function() { for (var b = this; b.firstChild && 1 === b.firstChild.nodeType;) b = b.firstChild; return b }).append(this) } return this }, wrapInner: function(b) { return m.isFunction(b) ? this.each(function(c) { m(this).wrapInner(b.call(this, c)) }) : this.each(function() { var c = m(this), d = c.contents(); d.length ? d.wrapAll(b) : c.append(b) }) }, wrap: function(b) { var c = m.isFunction(b); return this.each(function(d) { m(this).wrapAll(c ? b.call(this, d) : b) }) }, unwrap: function() { return this.parent().each(function() { m.nodeName(this, "body") || m(this).replaceWith(this.childNodes) }).end() }, append: function() { return this.domManip(arguments, !0, function(b) { (1 === this.nodeType || 11 === this.nodeType) && this.appendChild(b) }) }, prepend: function() { return this.domManip(arguments, !0, function(b) { (1 === this.nodeType || 11 === this.nodeType) && this.insertBefore(b, this.firstChild) }) }, before: function() { if (!q(this[0])) return this.domManip(arguments, !1, function(b) { this.parentNode.insertBefore(b, this) }); if (arguments.length) { var b = m.clean(arguments); return this.pushStack(m.merge(b, this), "before", this.selector) } }, after: function() { if (!q(this[0])) return this.domManip(arguments, !1, function(b) { this.parentNode.insertBefore(b, this.nextSibling) }); if (arguments.length) { var b = m.clean(arguments); return this.pushStack(m.merge(this, b), "after", this.selector) } }, remove: function(b, c) { for (var d, g = 0; null != (d = this[g]); g++) if (!b || m.filter(b, [d]).length) !c && 1 === d.nodeType && (m.cleanData(d.getElementsByTagName("*")), m.cleanData([d])), d.parentNode && d.parentNode.removeChild(d); return this }, empty: function() { for (var b, c = 0; null != (b = this[c]); c++) for (1 === b.nodeType && m.cleanData(b.getElementsByTagName("*")); b.firstChild;) b.removeChild(b.firstChild); return this }, clone: function(b, c) { return b = null == b ? !1 : b, c = null == c ? b : c, this.map(function() { return m.clone(this, b, c) }) }, html: function(b) { return m.access(this, function(b) { var d = this[0] || {}, g = 0, l = this.length; if (b === c) return 1 === d.nodeType ? d.innerHTML.replace(jd, "") : c; if ("string" == typeof b && !md.test(b) && (m.support.htmlSerialize || !fc.test(b)) && (m.support.leadingWhitespace || !ec.test(b)) && !ia[(Ac.exec(b) || ["", ""])[1].toLowerCase()]) { b = b.replace(zc, "<$1>"); try { for (; g < l; g++) d = this[g] || {}, 1 === d.nodeType && (m.cleanData(d.getElementsByTagName("*")), d.innerHTML = b); d = 0 } catch (e) {} } d && this.empty().append(b) }, null, b, arguments.length) }, replaceWith: function(b) { return q(this[0]) ? this.length ? this.pushStack(m(m.isFunction(b) ? b() : b), "replaceWith", b) : this : m.isFunction(b) ? this.each(function(c) { var d = m(this), g = d.html(); d.replaceWith(b.call(this, c, g)) }) : ("string" != typeof b && (b = m(b).detach()), this.each(function() { var c = this.nextSibling, d = this.parentNode; m(this).remove(); c ? m(c).before(b) : m(d).append(b) })) }, detach: function(b) { return this.remove(b, !0) }, domManip: function(b, d, g) { b = [].concat.apply([], b); var l, e, s, f = 0, p = b[0], r = [], j = this.length; if (!m.support.checkClone && 1 < j && "string" == typeof p && Bc.test(p)) return this.each(function() { m(this).domManip(b, d, g) }); if (m.isFunction(p)) return this.each(function(l) { var e = m(this); b[0] = p.call(this, l, d ? e.html() : c); e.domManip(b, d, g) }); if (this[0]) { l = m.buildFragment(b, this, r); s = l.fragment; e = s.firstChild; 1 === s.childNodes.length && (s = e); if (e) { d = d && m.nodeName(e, "tr"); for (l = l.cacheable || j - 1; f < j; f++) g.call(d && m.nodeName(this[f], "table") ? this[f].getElementsByTagName("tbody")[0] || this[f].appendChild(this[f].ownerDocument.createElement("tbody")) : this[f], f === l ? s : m.clone(s, !0, !0)) } s = e = null; r.length && m.each(r, function(b, c) { c.src ? m.ajax ? m.ajax({ url: c.src, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0 }) : m.error("no ajax") : m.globalEval((c.text || c.textContent || c.innerHTML || "").replace(pd, "")); c.parentNode && c.parentNode.removeChild(c) }) } return this } }); m.buildFragment = function(b, d, g) { var l, e, s, f = b[0]; return d = d || J, d = !d.nodeType && d[0] || d, d = d.ownerDocument || d, 1 === b.length && "string" == typeof f && 512 > f.length && d === J && "<" === f.charAt(0) && !nd.test(f) && (m.support.checkClone || !Bc.test(f)) && (m.support.html5Clone || !fc.test(f)) && (e = !0, l = m.fragments[f], s = l !== c), l || (l = d.createDocumentFragment(), m.clean(b, d, l, g), e && (m.fragments[f] = s && l)), { fragment: l, cacheable: e } }; m.fragments = {}; m.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(b, c) { m.fn[b] = function(d) { var g, l = 0, e = []; d = m(d); var s = d.length; g = 1 === this.length && this[0].parentNode; if ((null == g || g && 11 === g.nodeType && 1 === g.childNodes.length) && 1 === s) return d[c](this[0]), this; for (; l < s; l++) g = (0 < l ? this.clone(!0) : this).get(), m(d[l])[c](g), e = e.concat(g); return this.pushStack(e, b, d.selector) } }); m.extend({ clone: function(b, c, d) { var g, l, e, s; m.support.html5Clone || m.isXMLDoc(b) || !fc.test("<" + b.nodeName + ">") ? s = b.cloneNode(!0) : (gc.innerHTML = b.outerHTML, gc.removeChild(s = gc.firstChild)); if ((!m.support.noCloneEvent || !m.support.noCloneChecked) && (1 === b.nodeType || 11 === b.nodeType) && !m.isXMLDoc(b)) { z(b, s); g = B(b); l = B(s); for (e = 0; g[e]; ++e) l[e] && z(g[e], l[e]) } if (c && (A(b, s), d)) { g = B(b); l = B(s); for (e = 0; g[e]; ++e) A(g[e], l[e]) } return s }, clean: function(b, c, d, g) { var l, e, s, f, p, r, j, n = c === J && Cc, F = []; if (!c || "undefined" == typeof c.createDocumentFragment) c = J; for (l = 0; null != (s = b[l]); l++) if ("number" == typeof s && (s += ""), s) { if ("string" == typeof s) if (ld.test(s)) { n = n || y(c); r = c.createElement("div"); n.appendChild(r); s = s.replace(zc, "<$1>"); e = (Ac.exec(s) || ["", ""])[1].toLowerCase(); f = ia[e] || ia._default; p = f[0]; for (r.innerHTML = f[1] + s + f[2]; p--;) r = r.lastChild; if (!m.support.tbody) { p = kd.test(s); f = "table" === e && !p ? r.firstChild && r.firstChild.childNodes : "" === f[1] && !p ? r.childNodes : []; for (e = f.length - 1; 0 <= e; --e) m.nodeName(f[e], "tbody") && !f[e].childNodes.length && f[e].parentNode.removeChild(f[e]) }!m.support.leadingWhitespace && ec.test(s) && r.insertBefore(c.createTextNode(ec.exec(s)[0]), r.firstChild); s = r.childNodes; r.parentNode.removeChild(r) } else s = c.createTextNode(s); s.nodeType ? F.push(s) : m.merge(F, s) } r && (s = r = n = null); if (!m.support.appendChecked) for (l = 0; null != (s = F[l]); l++) m.nodeName(s, "input") ? C(s) : "undefined" != typeof s.getElementsByTagName && m.grep(s.getElementsByTagName("input"), C); if (d) { b = function(b) { if (!b.type || od.test(b.type)) return g ? g.push(b.parentNode ? b.parentNode.removeChild(b) : b) : d.appendChild(b) }; for (l = 0; null != (s = F[l]); l++) if (!m.nodeName(s, "script") || !b(s)) d.appendChild(s), "undefined" != typeof s.getElementsByTagName && (j = m.grep(m.merge([], s.getElementsByTagName("script")), b), F.splice.apply(F, [l + 1, 0].concat(j)), l += j.length) } return F }, cleanData: function(b, c) { for (var d, g, l, e, s = 0, f = m.expando, p = m.cache, r = m.support.deleteExpando, j = m.event.special; null != (l = b[s]); s++) if (c || m.acceptData(l)) if (d = (g = l[f]) && p[g]) { if (d.events) for (e in d.events) j[e] ? m.event.remove(l, e) : m.removeEvent(l, e, d.handle); p[g] && (delete p[g], r ? delete l[f] : l.removeAttribute ? l.removeAttribute(f) : l[f] = null, m.deletedIds.push(g)) } } }); var Nb, Aa; m.uaMatch = function(b) { b = b.toLowerCase(); b = /(chrome)[ \/]([\w.]+)/.exec(b) || /(webkit)[ \/]([\w.]+)/.exec(b) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(b) || /(msie) ([\w.]+)/.exec(b) || 0 > b.indexOf("compatible") && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(b) || []; return { browser: b[1] || "", version: b[2] || "0" } }; Nb = m.uaMatch(l.userAgent); Aa = {}; Nb.browser && (Aa[Nb.browser] = !0, Aa.version = Nb.version); Aa.chrome ? Aa.webkit = !0 : Aa.webkit && (Aa.safari = !0); m.browser = Aa; m.sub = function() { function b(c, d) { return new b.fn.init(c, d) } m.extend(!0, b, this); b.superclass = this; b.fn = b.prototype = this(); b.fn.constructor = b; b.sub = this.sub; b.fn.init = function(d, g) { return g && g instanceof m && !(g instanceof b) && (g = b(g)), m.fn.init.call(this, d, g, c) }; b.fn.init.prototype = b.fn; var c = b(J); return b }; var ha, Ka, La, hc = /alpha\([^)]*\)/i, qd = /opacity=([^)]*)/, rd = /^(top|right|bottom|left)$/, sd = /^(none|table(?!-c[ea]).+)/, Dc = /^margin/, Pc = RegExp("^(" + la + ")(.*)$", "i"), xb = RegExp("^(" + la + ")(?!px)[a-z%]+$", "i"), td = RegExp("^([-+])=(" + la + ")", "i"), Qb = {}, ud = { position: "absolute", visibility: "hidden", display: "block" }, Ec = { letterSpacing: 0, fontWeight: 400 }, Ba = ["Top", "Right", "Bottom", "Left"], mc = ["Webkit", "O", "Moz", "ms"], vd = m.fn.toggle; m.fn.extend({ css: function(b, d) { return m.access(this, function(b, d, g) { return g !== c ? m.style(b, d, g) : m.css(b, d) }, b, d, 1 < arguments.length) }, show: function() { return u(this, !0) }, hide: function() { return u(this) }, toggle: function(b, c) { var d = "boolean" == typeof b; return m.isFunction(b) && m.isFunction(c) ? vd.apply(this, arguments) : this.each(function() { (d ? b : I(this)) ? m(this).show(): m(this).hide() }) } }); m.extend({ cssHooks: { opacity: { get: function(b, c) { if (c) { var d = ha(b, "opacity"); return "" === d ? "1" : d } } } }, cssNumber: { fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: { "float": m.support.cssFloat ? "cssFloat" : "styleFloat" }, style: function(b, d, g, l) { if (b && !(3 === b.nodeType || 8 === b.nodeType || !b.style)) { var e, s, f, p = m.camelCase(d), r = b.style; d = m.cssProps[p] || (m.cssProps[p] = G(r, p)); f = m.cssHooks[d] || m.cssHooks[p]; if (g === c) return f && "get" in f && (e = f.get(b, !1, l)) !== c ? e : r[d]; s = typeof g; "string" === s && (e = td.exec(g)) && (g = (e[1] + 1) * e[2] + parseFloat(m.css(b, d)), s = "number"); if (!(null == g || "number" === s && isNaN(g))) if ("number" === s && !m.cssNumber[p] && (g += "px"), !f || !("set" in f) || (g = f.set(b, g, l)) !== c) try { r[d] = g } catch (j) {} } }, css: function(b, d, g, l) { var e, s, f, p = m.camelCase(d); return d = m.cssProps[p] || (m.cssProps[p] = G(b.style, p)), f = m.cssHooks[d] || m.cssHooks[p], f && "get" in f && (e = f.get(b, !0, l)), e === c && (e = ha(b, d)), "normal" === e && d in Ec && (e = Ec[d]), g || l !== c ? (s = parseFloat(e), g || m.isNumeric(s) ? s || 0 : e) : e }, swap: function(b, c, d) { var g, l = {}; for (g in c) l[g] = b.style[g], b.style[g] = c[g]; d = d.call(b); for (g in c) b.style[g] = l[g]; return d } }); b.getComputedStyle ? ha = function(c, d) { var g, l, e, s, f = b.getComputedStyle(c, null), p = c.style; return f && (g = f[d], "" === g && !m.contains(c.ownerDocument, c) && (g = m.style(c, d)), xb.test(g) && Dc.test(d) && (l = p.width, e = p.minWidth, s = p.maxWidth, p.minWidth = p.maxWidth = p.width = g, g = f.width, p.width = l, p.minWidth = e, p.maxWidth = s)), g } : J.documentElement.currentStyle && (ha = function(b, c) { var d, g, l = b.currentStyle && b.currentStyle[c], e = b.style; return null == l && e && e[c] && (l = e[c]), xb.test(l) && !rd.test(c) && (d = e.left, g = b.runtimeStyle && b.runtimeStyle.left, g && (b.runtimeStyle.left = b.currentStyle.left), e.left = "fontSize" === c ? "1em" : l, l = e.pixelLeft + "px", e.left = d, g && (b.runtimeStyle.left = g)), "" === l ? "auto" : l }); m.each(["height", "width"], function(b, c) { m.cssHooks[c] = { get: function(b, d, g) { if (d) return 0 === b.offsetWidth && sd.test(ha(b, "display")) ? m.swap(b, ud, function() { return Q(b, c, g) }) : Q(b, c, g) }, set: function(b, d, g) { return L(b, d, g ? E(b, c, g, m.support.boxSizing && "border-box" === m.css(b, "boxSizing")) : 0) } } }); m.support.opacity || (m.cssHooks.opacity = { get: function(b, c) { return qd.test((c && b.currentStyle ? b.currentStyle.filter : b.style.filter) || "") ? 0.01 * parseFloat(RegExp.$1) + "" : c ? "1" : "" }, set: function(b, c) { var d = b.style, g = b.currentStyle, l = m.isNumeric(c) ? "alpha(opacity=" + 100 * c + ")" : "", e = g && g.filter || d.filter || ""; d.zoom = 1; if (!(1 <= c && "" === m.trim(e.replace(hc, "")) && d.removeAttribute && (d.removeAttribute("filter"), g && !g.filter))) d.filter = hc.test(e) ? e.replace(hc, l) : e + " " + l } }); m(function() { m.support.reliableMarginRight || (m.cssHooks.marginRight = { get: function(b, c) { return m.swap(b, { display: "inline-block" }, function() { if (c) return ha(b, "marginRight") }) } }); !m.support.pixelPosition && m.fn.position && m.each(["top", "left"], function(b, c) { m.cssHooks[c] = { get: function(b, d) { if (d) { var g = ha(b, c); return xb.test(g) ? m(b).position()[c] + "px" : g } } } }) }); m.expr && m.expr.filters && (m.expr.filters.hidden = function(b) { return 0 === b.offsetWidth && 0 === b.offsetHeight || !m.support.reliableHiddenOffsets && "none" === (b.style && b.style.display || ha(b, "display")) }, m.expr.filters.visible = function(b) { return !m.expr.filters.hidden(b) }); m.each({ margin: "", padding: "", border: "Width" }, function(b, c) { m.cssHooks[b + c] = { expand: function(d) { var g = "string" == typeof d ? d.split(" ") : [d], l = {}; for (d = 0; 4 > d; d++) l[b + Ba[d] + c] = g[d] || g[d - 2] || g[0]; return l } }; Dc.test(b) || (m.cssHooks[b + c].set = L) }); var wd = /%20/g, Qc = /\[\]$/, Fc = /\r?\n/g, xd = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, yd = /^(?:select|textarea)/i; m.fn.extend({ serialize: function() { return m.param(this.serializeArray()) }, serializeArray: function() { return this.map(function() { return this.elements ? m.makeArray(this.elements) : this }).filter(function() { return this.name && !this.disabled && (this.checked || yd.test(this.nodeName) || xd.test(this.type)) }).map(function(b, c) { var d = m(this).val(); return null == d ? null : m.isArray(d) ? m.map(d, function(b) { return { name: c.name, value: b.replace(Fc, "\r\n") } }) : { name: c.name, value: d.replace(Fc, "\r\n") } }).get() } }); m.param = function(b, d) { var g, l = [], e = function(b, c) { c = m.isFunction(c) ? c() : null == c ? "" : c; l[l.length] = encodeURIComponent(b) + "=" + encodeURIComponent(c) }; d === c && (d = m.ajaxSettings && m.ajaxSettings.traditional); if (m.isArray(b) || b.jquery && !m.isPlainObject(b)) m.each(b, function() { e(this.name, this.value) }); else for (g in b) R(g, b[g], d, e); return l.join("&").replace(wd, "+") }; var $a, Ia, zd = /#.*$/, Ad = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, Bd = /^(?:GET|HEAD)$/, Cd = /^\/\//, Gc = /\?/, Dd = /)<[^<]*)*<\/script>/gi, Ed = /([?&])_=[^&]*/, Hc = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Ic = m.fn.load, Rb = {}, Jc = {}, Kc = ["*/"] + ["*"]; try { Ia = V.href } catch (Md) { Ia = J.createElement("a"), Ia.href = "", Ia = Ia.href } $a = Hc.exec(Ia.toLowerCase()) || []; m.fn.load = function(b, d, g) { if ("string" != typeof b && Ic) return Ic.apply(this, arguments); if (!this.length) return this; var l, e, s, f = this, p = b.indexOf(" "); return 0 <= p && (l = b.slice(p, b.length), b = b.slice(0, p)), m.isFunction(d) ? (g = d, d = c) : d && "object" == typeof d && (e = "POST"), m.ajax({ url: b, type: e, dataType: "html", data: d, complete: function(b, c) { g && f.each(g, s || [b.responseText, c, b]) } }).done(function(b) { s = arguments; f.html(l ? m("
").append(b.replace(Dd, "")).find(l) : b) }), this }; m.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(b, c) { m.fn[c] = function(b) { return this.on(c, b) } }); m.each(["get", "post"], function(b, d) { m[d] = function(b, g, l, e) { return m.isFunction(g) && (e = e || l, l = g, g = c), m.ajax({ type: d, url: b, data: g, success: l, dataType: e }) } }); m.extend({ getScript: function(b, d) { return m.get(b, c, d, "script") }, getJSON: function(b, c, d) { return m.get(b, c, d, "json") }, ajaxSetup: function(b, c) { return c ? P(b, m.ajaxSettings) : (c = b, b = m.ajaxSettings), P(b, c), b }, ajaxSettings: { url: Ia, isLocal: /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/.test($a[1]), global: !0, type: "GET", contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: !0, async: !0, accepts: { xml: "application/xml, text/xml", html: "text/html", text: "text/plain", json: "application/json, text/javascript", "*": Kc }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: "responseXML", text: "responseText" }, converters: { "* text": b.String, "text html": !0, "text json": m.parseJSON, "text xml": m.parseXML }, flatOptions: { context: !0, url: !0 } }, ajaxPrefilter: K(Rb), ajaxTransport: K(Jc), ajax: function(b, d) { function g(b, d, s, r) { var n, u, H, N, V, J = d; if (2 !== A) { A = 2; p && clearTimeout(p); f = c; e = r || ""; T.readyState = 0 < b ? 4 : 0; if (s) { N = F; r = T; var z, B, q, ka, C = N.contents, E = N.dataTypes, la = N.responseFields; for (B in la) B in s && (r[la[B]] = s[B]); for (; "*" === E[0];) E.shift(), z === c && (z = N.mimeType || r.getResponseHeader("content-type")); if (z) for (B in C) if (C[B] && C[B].test(z)) { E.unshift(B); break } if (E[0] in s) q = E[0]; else { for (B in s) { if (!E[0] || N.converters[B + " " + E[0]]) { q = B; break } ka || (ka = B) } q = q || ka } N = s = q ? (q !== E[0] && E.unshift(q), s[q]) : void 0 } if (200 <= b && 300 > b || 304 === b) if (F.ifModified && (V = T.getResponseHeader("Last-Modified"), V && (m.lastModified[l] = V), V = T.getResponseHeader("Etag"), V && (m.etag[l] = V)), 304 === b) J = "notmodified", n = !0; else { var ca; a: { n = F; u = N; var L, J = n.dataTypes.slice(); s = J[0]; z = {}; B = 0; n.dataFilter && (u = n.dataFilter(u, n.dataType)); if (J[1]) for (ca in n.converters) z[ca.toLowerCase()] = n.converters[ca]; for (; H = J[++B];) if ("*" !== H) { if ("*" !== s && s !== H) { ca = z[s + " " + H] || z["* " + H]; if (!ca) for (L in z) if (V = L.split(" "), V[1] === H && (ca = z[s + " " + V[0]] || z["* " + V[0]])) { !0 === ca ? ca = z[L] : !0 !== z[L] && (H = V[0], J.splice(B--, 0, H)); break } if (!0 !== ca) if (ca && n["throws"]) u = ca(u); else try { u = ca(u) } catch (Ma) { ca = { state: "parsererror", error: ca ? Ma : "No conversion from " + s + " to " + H }; break a } } s = H } ca = { state: "success", data: u } } n = ca; J = n.state; u = n.data; H = n.error; n = !H } else if (H = J, !J || b) J = "error", 0 > b && (b = 0); T.status = b; T.statusText = (d || J) + ""; n ? aa.resolveWith(v, [u, J, T]) : aa.rejectWith(v, [T, J, H]); T.statusCode(O); O = c; j && D.trigger("ajax" + (n ? "Success" : "Error"), [T, F, n ? u : H]); y.fireWith(v, [T, J]); j && (D.trigger("ajaxComplete", [T, F]), --m.active || m.event.trigger("ajaxStop")) } } "object" == typeof b && (d = b, b = c); d = d || {}; var l, e, s, f, p, r, j, n, F = m.ajaxSetup({}, d), v = F.context || F, D = v !== F && (v.nodeType || v instanceof m) ? m(v) : m.event, aa = m.Deferred(), y = m.Callbacks("once memory"), O = F.statusCode || {}, u = {}, H = {}, A = 0, N = "canceled", T = { readyState: 0, setRequestHeader: function(b, c) { if (!A) { var d = b.toLowerCase(); b = H[d] = H[d] || b; u[b] = c } return this }, getAllResponseHeaders: function() { return 2 === A ? e : null }, getResponseHeader: function(b) { var d; if (2 === A) { if (!s) for (s = {}; d = Ad.exec(e);) s[d[1].toLowerCase()] = d[2]; d = s[b.toLowerCase()] } return d === c ? null : d }, overrideMimeType: function(b) { return A || (F.mimeType = b), this }, abort: function(b) { return b = b || N, f && f.abort(b), g(0, b), this } }; aa.promise(T); T.success = T.done; T.error = T.fail; T.complete = y.add; T.statusCode = function(b) { if (b) { var c; if (2 > A) for (c in b) O[c] = [O[c], b[c]]; else c = b[T.status], T.always(c) } return this }; F.url = ((b || F.url) + "").replace(zd, "").replace(Cd, $a[1] + "//"); F.dataTypes = m.trim(F.dataType || "*").toLowerCase().split(qa); null == F.crossDomain && (r = Hc.exec(F.url.toLowerCase()) || !1, F.crossDomain = r && r.join(":") + (r[3] ? "" : "http:" === r[1] ? 80 : 443) !== $a.join(":") + ($a[3] ? "" : "http:" === $a[1] ? 80 : 443)); F.data && F.processData && "string" != typeof F.data && (F.data = m.param(F.data, F.traditional)); X(Rb, F, d, T); if (2 === A) return T; j = F.global; F.type = F.type.toUpperCase(); F.hasContent = !Bd.test(F.type); j && 0 === m.active++ && m.event.trigger("ajaxStart"); if (!F.hasContent && (F.data && (F.url += (Gc.test(F.url) ? "&" : "?") + F.data, delete F.data), l = F.url, !1 === F.cache)) { r = m.now(); var V = F.url.replace(Ed, "$1_=" + r); F.url = V + (V === F.url ? (Gc.test(F.url) ? "&" : "?") + "_=" + r : "") }(F.data && F.hasContent && !1 !== F.contentType || d.contentType) && T.setRequestHeader("Content-Type", F.contentType); F.ifModified && (l = l || F.url, m.lastModified[l] && T.setRequestHeader("If-Modified-Since", m.lastModified[l]), m.etag[l] && T.setRequestHeader("If-None-Match", m.etag[l])); T.setRequestHeader("Accept", F.dataTypes[0] && F.accepts[F.dataTypes[0]] ? F.accepts[F.dataTypes[0]] + ("*" !== F.dataTypes[0] ? ", " + Kc + "; q=0.01" : "") : F.accepts["*"]); for (n in F.headers) T.setRequestHeader(n, F.headers[n]); if (!F.beforeSend || !1 !== F.beforeSend.call(v, T, F) && 2 !== A) { N = "abort"; for (n in { success: 1, error: 1, complete: 1 }) T[n](F[n]); if (f = X(Jc, F, d, T)) { T.readyState = 1; j && D.trigger("ajaxSend", [T, F]); F.async && 0 < F.timeout && (p = setTimeout(function() { T.abort("timeout") }, F.timeout)); try { A = 1, f.send(u, g) } catch (J) { if (2 > A) g(-1, J); else throw J; } } else g(-1, "No Transport"); return T } return T.abort() }, active: 0, lastModified: {}, etag: {} }); var Lc = [], Fd = /\?/, Ob = /(=)\?(?=&|$)|\?\?/, Gd = m.now(); m.ajaxSetup({ jsonp: "callback", jsonpCallback: function() { var b = Lc.pop() || m.expando + "_" + Gd++; return this[b] = !0, b } }); m.ajaxPrefilter("json jsonp", function(d, g, l) { var e, s, f, p = d.data, r = d.url, j = !1 !== d.jsonp, n = j && Ob.test(r), F = j && !n && "string" == typeof p && !(d.contentType || "").indexOf("application/x-www-form-urlencoded") && Ob.test(p); if ("jsonp" === d.dataTypes[0] || n || F) return e = d.jsonpCallback = m.isFunction(d.jsonpCallback) ? d.jsonpCallback() : d.jsonpCallback, s = b[e], n ? d.url = r.replace(Ob, "$1" + e) : F ? d.data = p.replace(Ob, "$1" + e) : j && (d.url += (Fd.test(r) ? "&" : "?") + d.jsonp + "=" + e), d.converters["script json"] = function() { return f || m.error(e + " was not called"), f[0] }, d.dataTypes[0] = "json", b[e] = function() { f = arguments }, l.always(function() { b[e] = s; d[e] && (d.jsonpCallback = g.jsonpCallback, Lc.push(e)); f && m.isFunction(s) && s(f[0]); f = s = c }), "script" }); m.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /javascript|ecmascript/ }, converters: { "text script": function(b) { return m.globalEval(b), b } } }); m.ajaxPrefilter("script", function(b) { b.cache === c && (b.cache = !1); b.crossDomain && (b.type = "GET", b.global = !1) }); m.ajaxTransport("script", function(b) { if (b.crossDomain) { var d, g = J.head || J.getElementsByTagName("head")[0] || J.documentElement; return { send: function(l, e) { d = J.createElement("script"); d.async = "async"; b.scriptCharset && (d.charset = b.scriptCharset); d.src = b.url; d.onload = d.onreadystatechange = function(b, l) { if (l || !d.readyState || /loaded|complete/.test(d.readyState)) d.onload = d.onreadystatechange = null, g && d.parentNode && g.removeChild(d), d = c, l || e(200, "success") }; g.insertBefore(d, g.firstChild) }, abort: function() { d && d.onload(0, 1) } } } }); var ab, ic = b.ActiveXObject ? function() { for (var b in ab) ab[b](0, 1) } : !1, Hd = 0; m.ajaxSettings.xhr = b.ActiveXObject ? function() { var c; if (!(c = !this.isLocal && S())) a: { try { c = new b.ActiveXObject("Microsoft.XMLHTTP"); break a } catch (d) {} c = void 0 } return c } : S; var jc = m.ajaxSettings.xhr(); m.extend(m.support, { ajax: !!jc, cors: !!jc && "withCredentials" in jc }); m.support.ajax && m.ajaxTransport(function(d) { if (!d.crossDomain || m.support.cors) { var g; return { send: function(l, e) { var s, f, p = d.xhr(); d.username ? p.open(d.type, d.url, d.async, d.username, d.password) : p.open(d.type, d.url, d.async); if (d.xhrFields) for (f in d.xhrFields) p[f] = d.xhrFields[f]; d.mimeType && p.overrideMimeType && p.overrideMimeType(d.mimeType); !d.crossDomain && !l["X-Requested-With"] && (l["X-Requested-With"] = "XMLHttpRequest"); try { for (f in l) p.setRequestHeader(f, l[f]) } catch (r) {} p.send(d.hasContent && d.data || null); g = function(b, l) { var f, r, j, n, F; try { if (g && (l || 4 === p.readyState)) if (g = c, s && (p.onreadystatechange = m.noop, ic && delete ab[s]), l) 4 !== p.readyState && p.abort(); else { f = p.status; j = p.getAllResponseHeaders(); n = {}; (F = p.responseXML) && F.documentElement && (n.xml = F); try { n.text = p.responseText } catch (v) {} try { r = p.statusText } catch (D) { r = "" }!f && d.isLocal && !d.crossDomain ? f = n.text ? 200 : 404 : 1223 === f && (f = 204) } } catch (aa) { l || e(-1, aa) } n && e(f, r, n, j) }; d.async ? 4 === p.readyState ? setTimeout(g, 0) : (s = ++Hd, ic && (ab || (ab = {}, m(b).unload(ic)), ab[s] = g), p.onreadystatechange = g) : g() }, abort: function() { g && g(0, 1) } } } }); var yb, Pb, Id = /^(?:toggle|show|hide)$/, Jd = RegExp("^(?:([-+])=|)(" + la + ")([a-z%]*)$", "i"), Kd = /queueHooks$/, zb = [ function(b, c, d) { var g, l, e, s, f, p, r = this, j = b.style, n = {}, F = [], v = b.nodeType && I(b); d.queue || (f = m._queueHooks(b, "fx"), null == f.unqueued && (f.unqueued = 0, p = f.empty.fire, f.empty.fire = function() { f.unqueued || p() }), f.unqueued++, r.always(function() { r.always(function() { f.unqueued--; m.queue(b, "fx").length || f.empty.fire() }) })); 1 === b.nodeType && ("height" in c || "width" in c) && (d.overflow = [j.overflow, j.overflowX, j.overflowY], "inline" === m.css(b, "display") && "none" === m.css(b, "float") && (!m.support.inlineBlockNeedsLayout || "inline" === M(b.nodeName) ? j.display = "inline-block" : j.zoom = 1)); d.overflow && (j.overflow = "hidden", m.support.shrinkWrapBlocks || r.done(function() { j.overflow = d.overflow[0]; j.overflowX = d.overflow[1]; j.overflowY = d.overflow[2] })); for (g in c) l = c[g], Id.exec(l) && (delete c[g], l !== (v ? "hide" : "show") && F.push(g)); if (l = F.length) { e = m._data(b, "fxshow") || m._data(b, "fxshow", {}); v ? m(b).show() : r.done(function() { m(b).hide() }); r.done(function() { var c; m.removeData(b, "fxshow", !0); for (c in n) m.style(b, c, n[c]) }); for (g = 0; g < l; g++) c = F[g], s = r.createTween(c, v ? e[c] : 0), n[c] = e[c] || m.style(b, c), c in e || (e[c] = s.start, v && (s.end = s.start, s.start = "width" === c || "height" === c ? 1 : 0)) } } ], bb = { "*": [ function(b, c) { var d, g, l = this.createTween(b, c), e = Jd.exec(c), s = l.cur(), f = +s || 0, p = 1, r = 20; if (e) { d = +e[2]; g = e[3] || (m.cssNumber[b] ? "" : "px"); if ("px" !== g && f) { f = m.css(l.elem, b, !0) || d || 1; do p = p || ".5", f /= p, m.style(l.elem, b, f + g); while (p !== (p = l.cur() / s) && 1 !== p && --r) } l.unit = g; l.start = f; l.end = e[1] ? f + (e[1] + 1) * d : d } return l } ] }; m.Animation = m.extend(U, { tweener: function(b, c) { m.isFunction(b) ? (c = b, b = ["*"]) : b = b.split(" "); for (var d, g = 0, l = b.length; g < l; g++) d = b[g], bb[d] = bb[d] || [], bb[d].unshift(c) }, prefilter: function(b, c) { c ? zb.unshift(b) : zb.push(b) } }); m.Tween = p; p.prototype = { constructor: p, init: function(b, c, d, g, l, e) { this.elem = b; this.prop = d; this.easing = l || "swing"; this.options = c; this.start = this.now = this.cur(); this.end = g; this.unit = e || (m.cssNumber[d] ? "" : "px") }, cur: function() { var b = p.propHooks[this.prop]; return b && b.get ? b.get(this) : p.propHooks._default.get(this) }, run: function(b) { var c, d = p.propHooks[this.prop]; return this.options.duration ? this.pos = c = m.easing[this.easing](b, this.options.duration * b, 0, 1, this.options.duration) : this.pos = c = b, this.now = (this.end - this.start) * c + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), d && d.set ? d.set(this) : p.propHooks._default.set(this), this } }; p.prototype.init.prototype = p.prototype; p.propHooks = { _default: { get: function(b) { var c; return null == b.elem[b.prop] || b.elem.style && null != b.elem.style[b.prop] ? (c = m.css(b.elem, b.prop, !1, ""), !c || "auto" === c ? 0 : c) : b.elem[b.prop] }, set: function(b) { m.fx.step[b.prop] ? m.fx.step[b.prop](b) : b.elem.style && (null != b.elem.style[m.cssProps[b.prop]] || m.cssHooks[b.prop]) ? m.style(b.elem, b.prop, b.now + b.unit) : b.elem[b.prop] = b.now } } }; p.propHooks.scrollTop = p.propHooks.scrollLeft = { set: function(b) { b.elem.nodeType && b.elem.parentNode && (b.elem[b.prop] = b.now) } }; m.each(["toggle", "show", "hide"], function(b, c) { var d = m.fn[c]; m.fn[c] = function(g, l, e) { return null == g || "boolean" == typeof g || !b && m.isFunction(g) && m.isFunction(l) ? d.apply(this, arguments) : this.animate(v(c, !0), g, l, e) } }); m.fn.extend({ fadeTo: function(b, c, d, g) { return this.filter(I).css("opacity", 0).show().end().animate({ opacity: c }, b, d, g) }, animate: function(b, c, d, g) { var l = m.isEmptyObject(b), e = m.speed(c, d, g); c = function() { var c = U(this, m.extend({}, b), e); l && c.stop(!0) }; return l || !1 === e.queue ? this.each(c) : this.queue(e.queue, c) }, stop: function(b, d, g) { var l = function(b) { var c = b.stop; delete b.stop; c(g) }; return "string" != typeof b && (g = d, d = b, b = c), d && !1 !== b && this.queue(b || "fx", []), this.each(function() { var c = !0, d = null != b && b + "queueHooks", e = m.timers, s = m._data(this); if (d) s[d] && s[d].stop && l(s[d]); else for (d in s) s[d] && s[d].stop && Kd.test(d) && l(s[d]); for (d = e.length; d--;) e[d].elem === this && (null == b || e[d].queue === b) && (e[d].anim.stop(g), c = !1, e.splice(d, 1)); (c || !g) && m.dequeue(this, b) }) } }); m.each({ slideDown: v("show"), slideUp: v("hide"), slideToggle: v("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function(b, c) { m.fn[b] = function(b, d, g) { return this.animate(c, b, d, g) } }); m.speed = function(b, c, d) { var g = b && "object" == typeof b ? m.extend({}, b) : { complete: d || !d && c || m.isFunction(b) && b, duration: b, easing: d && c || c && !m.isFunction(c) && c }; g.duration = m.fx.off ? 0 : "number" == typeof g.duration ? g.duration : g.duration in m.fx.speeds ? m.fx.speeds[g.duration] : m.fx.speeds._default; if (null == g.queue || !0 === g.queue) g.queue = "fx"; return g.old = g.complete, g.complete = function() { m.isFunction(g.old) && g.old.call(this); g.queue && m.dequeue(this, g.queue) }, g }; m.easing = { linear: function(b) { return b }, swing: function(b) { return 0.5 - Math.cos(b * Math.PI) / 2 } }; m.timers = []; m.fx = p.prototype.init; m.fx.tick = function() { for (var b, c = m.timers, d = 0; d < c.length; d++) b = c[d], !b() && c[d] === b && c.splice(d--, 1); c.length || m.fx.stop() }; m.fx.timer = function(b) { b() && m.timers.push(b) && !Pb && (Pb = setInterval(m.fx.tick, m.fx.interval)) }; m.fx.interval = 13; m.fx.stop = function() { clearInterval(Pb); Pb = null }; m.fx.speeds = { slow: 600, fast: 200, _default: 400 }; m.fx.step = {}; m.expr && m.expr.filters && (m.expr.filters.animated = function(b) { return m.grep(m.timers, function(c) { return b === c.elem }).length }); var Mc = /^(?:body|html)$/i; m.fn.offset = function(b) { if (arguments.length) return b === c ? this : this.each(function(c) { m.offset.setOffset(this, b, c) }); var d, g, l, e, s, f, p, r = { top: 0, left: 0 }, j = this[0], n = j && j.ownerDocument; if (n) return (g = n.body) === j ? m.offset.bodyOffset(j) : (d = n.documentElement, m.contains(d, j) ? ("undefined" != typeof j.getBoundingClientRect && (r = j.getBoundingClientRect()), l = H(n), e = d.clientTop || g.clientTop || 0, s = d.clientLeft || g.clientLeft || 0, f = l.pageYOffset || d.scrollTop, p = l.pageXOffset || d.scrollLeft, { top: r.top + f - e, left: r.left + p - s }) : r) }; m.offset = { bodyOffset: function(b) { var c = b.offsetTop, d = b.offsetLeft; return m.support.doesNotIncludeMarginInBodyOffset && (c += parseFloat(m.css(b, "marginTop")) || 0, d += parseFloat(m.css(b, "marginLeft")) || 0), { top: c, left: d } }, setOffset: function(b, c, d) { var g = m.css(b, "position"); "static" === g && (b.style.position = "relative"); var l = m(b), e = l.offset(), s = m.css(b, "top"), f = m.css(b, "left"), p = {}, r = {}, j, n; ("absolute" === g || "fixed" === g) && -1 < m.inArray("auto", [s, f]) ? (r = l.position(), j = r.top, n = r.left) : (j = parseFloat(s) || 0, n = parseFloat(f) || 0); m.isFunction(c) && (c = c.call(b, d, e)); null != c.top && (p.top = c.top - e.top + j); null != c.left && (p.left = c.left - e.left + n); "using" in c ? c.using.call(b, p) : l.css(p) } }; m.fn.extend({ position: function() { if (this[0]) { var b = this[0], c = this.offsetParent(), d = this.offset(), g = Mc.test(c[0].nodeName) ? { top: 0, left: 0 } : c.offset(); return d.top -= parseFloat(m.css(b, "marginTop")) || 0, d.left -= parseFloat(m.css(b, "marginLeft")) || 0, g.top += parseFloat(m.css(c[0], "borderTopWidth")) || 0, g.left += parseFloat(m.css(c[0], "borderLeftWidth")) || 0, { top: d.top - g.top, left: d.left - g.left } } }, offsetParent: function() { return this.map(function() { for (var b = this.offsetParent || J.body; b && !Mc.test(b.nodeName) && "static" === m.css(b, "position");) b = b.offsetParent; return b || J.body }) } }); m.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(b, d) { var g = /Y/.test(d); m.fn[b] = function(l) { return m.access(this, function(b, l, e) { var s = H(b); if (e === c) return s ? d in s ? s[d] : s.document.documentElement[l] : b[l]; s ? s.scrollTo(g ? m(s).scrollLeft() : e, g ? e : m(s).scrollTop()) : b[l] = e }, b, l, arguments.length, null) } }); m.each({ Height: "height", Width: "width" }, function(b, d) { m.each({ padding: "inner" + b, content: d, "": "outer" + b }, function(g, l) { m.fn[l] = function(l, e) { var s = arguments.length && (g || "boolean" != typeof l), f = g || (!0 === l || !0 === e ? "margin" : "border"); return m.access(this, function(d, g, l) { var e; return m.isWindow(d) ? d.document.documentElement["client" + b] : 9 === d.nodeType ? (e = d.documentElement, Math.max(d.body["scroll" + b], e["scroll" + b], d.body["offset" + b], e["offset" + b], e["client" + b])) : l === c ? m.css(d, g, l, f) : m.style(d, g, l, f) }, d, s ? l : c, s, null) } }) }); b.jQuery = b.$ = m; "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() { return m }) })(window); function getInternetExplorerVersion() { var b = -1; "Microsoft Internet Explorer" == navigator.appName && null != /MSIE ([0-9]{1,}[.0-9]{0,})/.exec(navigator.userAgent) && (b = parseFloat(RegExp.$1)); return b } var ie = getInternetExplorerVersion(); function getQueryVariable(b) { for (var c = window.location.search.substring(1).split("&"), d = 0; d < c.length; d++) { var e = c[d].split("="); if (decodeURIComponent(e[0]) == b) return decodeURIComponent(e[1]) } } this.jukebox = {}; jukebox.Player = function(b, c) { this.id = ++jukebox.__jukeboxId; this.origin = c || null; this.settings = {}; for (var d in this.defaults) this.settings[d] = this.defaults[d]; if ("[object Object]" === Object.prototype.toString.call(b)) for (var e in b) this.settings[e] = b[e]; "[object Function]" === Object.prototype.toString.call(jukebox.Manager) && (jukebox.Manager = new jukebox.Manager); this.resource = this.isPlaying = null; this.resource = "[object Object]" === Object.prototype.toString.call(jukebox.Manager) ? jukebox.Manager.getPlayableResource(this.settings.resources) : this.settings.resources[0] || null; if (null === this.resource) throw "Your browser can't playback the given resources - or you have missed to include jukebox.Manager"; this.__init(); return this }; jukebox.__jukeboxId = 0; jukebox.Player.prototype = { defaults: { resources: [], autoplay: !1, spritemap: {}, flashMediaElement: "./swf/FlashMediaElement.swf", timeout: 1E3 }, __addToManager: function() { !0 !== this.__wasAddedToManager && (jukebox.Manager.add(this), this.__wasAddedToManager = !0) }, __init: function() { var b = this, c = this.settings, d = {}, e; jukebox.Manager && void 0 !== jukebox.Manager.features && (d = jukebox.Manager.features); if (!0 === d.html5audio) { this.context = new Audio; this.context.src = this.resource; if (null === this.origin) { var f = function(c) { b.__addToManager(c) }; this.context.addEventListener("canplaythrough", f, !0); window.setTimeout(function() { b.context.removeEventListener("canplaythrough", f, !0); f("timeout") }, c.timeout) } this.context.autobuffer = !0; this.context.preload = !0; for (e in this.HTML5API) this[e] = this.HTML5API[e]; 1 < d.channels ? !0 === c.autoplay ? this.context.autoplay = !0 : void 0 !== c.spritemap[c.autoplay] && this.play(c.autoplay) : 1 === d.channels && void 0 !== c.spritemap[c.autoplay] && (this.backgroundMusic = c.spritemap[c.autoplay], this.backgroundMusic.started = Date.now ? Date.now() : +new Date, this.play(c.autoplay)); 1 == d.channels && !0 !== c.canPlayBackground && (window.addEventListener("pagehide", function() { null !== b.isPlaying && (b.pause(), b.__wasAutoPaused = !0) }), window.addEventListener("pageshow", function() { b.__wasAutoPaused && (b.resume(), delete b._wasAutoPaused) })) } else if (!0 === d.flashaudio) { for (e in this.FLASHAPI) this[e] = this.FLASHAPI[e]; d = ["id=jukebox-flashstream-" + this.id, "autoplay=" + c.autoplay, "file=" + window.encodeURIComponent(this.resource)]; this.__initFlashContext(d); !0 === c.autoplay ? this.play(0) : c.spritemap[c.autoplay] && this.play(c.autoplay) } else throw "Your Browser does not support Flash Audio or HTML5 Audio."; }, __initFlashContext: function(b) { var c, d = this.settings.flashMediaElement, e, f = { flashvars: b.join("&"), quality: "high", bgcolor: "#000000", wmode: "transparent", allowscriptaccess: "always", allowfullscreen: "true" }; if (navigator.userAgent.match(/MSIE/)) { c = document.createElement("div"); document.getElementsByTagName("body")[0].appendChild(c); var j = document.createElement("object"); j.id = "jukebox-flashstream-" + this.id; j.setAttribute("type", "application/x-shockwave-flash"); j.setAttribute("classid", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"); j.setAttribute("width", "0"); j.setAttribute("height", "0"); f.movie = d + "?x=" + (Date.now ? Date.now() : +new Date); f.flashvars = b.join("&"); for (e in f) b = document.createElement("param"), b.setAttribute("name", e), b.setAttribute("value", f[e]), j.appendChild(b); c.outerHTML = j.outerHTML; this.context = document.getElementById("jukebox-flashstream-" + this.id) } else { c = document.createElement("embed"); c.id = "jukebox-flashstream-" + this.id; c.setAttribute("type", "application/x-shockwave-flash"); c.setAttribute("width", "100"); c.setAttribute("height", "100"); f.play = !1; f.loop = !1; f.src = d + "?x=" + (Date.now ? Date.now() : +new Date); for (e in f) c.setAttribute(e, f[e]); document.getElementsByTagName("body")[0].appendChild(c); this.context = c } }, backgroundHackForiOS: function() { if (void 0 !== this.backgroundMusic) { var b = Date.now ? Date.now() : +new Date; void 0 === this.backgroundMusic.started ? (this.backgroundMusic.started = b, this.setCurrentTime(this.backgroundMusic.start)) : (this.backgroundMusic.lastPointer = (b - this.backgroundMusic.started) / 1E3 % (this.backgroundMusic.end - this.backgroundMusic.start) + this.backgroundMusic.start, this.play(this.backgroundMusic.lastPointer)) } }, play: function(b, c) { if (null !== this.isPlaying && !0 !== c) void 0 !== jukebox.Manager && jukebox.Manager.addToQueue(b, this.id); else { var d = this.settings.spritemap, e; if (void 0 !== d[b]) e = d[b].start; else if ("number" === typeof b) { e = b; for (var f in d) if (e >= d[f].start && e <= d[f].end) { b = f; break } } void 0 !== e && "[object Object]" === Object.prototype.toString.call(d[b]) && (this.isPlaying = this.settings.spritemap[b], this.context.play && this.context.play(), this.wasReady = this.setCurrentTime(e)) } }, stop: function() { this.__lastPosition = 0; this.isPlaying = null; this.backgroundMusic ? this.backgroundHackForiOS() : this.context.pause(); return !0 }, pause: function() { this.isPlaying = null; this.__lastPosition = this.getCurrentTime(); this.context.pause(); return this.__lastPosition }, resume: function(b) { b = "number" === typeof b ? b : this.__lastPosition; if (null !== b) return this.play(b), this.__lastPosition = null, !0; this.context.play(); return !1 }, HTML5API: { getVolume: function() { return this.context.volume || 1 }, setVolume: function(b) { this.context.volume = b; return 1E-4 > Math.abs(this.context.volume - b) ? !0 : !1 }, getCurrentTime: function() { return this.context.currentTime || 0 }, setCurrentTime: function(b) { try { return this.context.currentTime = b, !0 } catch (c) { return !1 } } }, FLASHAPI: { getVolume: function() { return this.context && "function" === typeof this.context.getVolume ? this.context.getVolume() : 1 }, setVolume: function(b) { return this.context && "function" === typeof this.context.setVolume ? (this.context.setVolume(b), !0) : !1 }, getCurrentTime: function() { return this.context && "function" === typeof this.context.getCurrentTime ? this.context.getCurrentTime() : 0 }, setCurrentTime: function(b) { return this.context && "function" === typeof this.context.setCurrentTime ? this.context.setCurrentTime(b) : !1 } } }; if (void 0 === this.jukebox) throw "jukebox.Manager requires jukebox.Player (Player.js) to run properly."; jukebox.Manager = function(b) { this.features = {}; this.codecs = {}; this.__players = {}; this.__playersLength = 0; this.__clones = {}; this.__queue = []; this.settings = {}; for (var c in this.defaults) this.settings[c] = this.defaults[c]; if ("[object Object]" === Object.prototype.toString.call(b)) for (var d in b) this.settings[d] = b[d]; this.__detectFeatures(); jukebox.Manager.__initialized = !1 === this.settings.useGameLoop ? window.setInterval(function() { jukebox.Manager.loop() }, 20) : !0 }; jukebox.Manager.prototype = { defaults: { useFlash: !1, useGameLoop: !1 }, __detectFeatures: function() { var b = window.Audio && new Audio; if (b && b.canPlayType && !1 === this.settings.useFlash) { for (var c = [{ e: "3gp", m: ["audio/3gpp", "audio/amr"] }, { e: "aac", m: ["audio/aac", "audio/aacp"] }, { e: "amr", m: ["audio/amr", "audio/3gpp"] }, { e: "caf", m: ["audio/IMA-ADPCM", "audio/x-adpcm", 'audio/x-aiff; codecs="IMA-ADPCM, ADPCM"'] }, { e: "m4a", m: 'audio/mp4{audio/mp4; codecs="mp4a.40.2,avc1.42E01E"{audio/mpeg4{audio/mpeg4-generic{audio/mp4a-latm{audio/MP4A-LATM{audio/x-m4a'.split("{") }, { e: "mp3", m: ["audio/mp3", "audio/mpeg", 'audio/mpeg; codecs="mp3"', "audio/MPA", "audio/mpa-robust"] }, { e: "mpga", m: ["audio/MPA", "audio/mpa-robust", "audio/mpeg", "video/mpeg"] }, { e: "mp4", m: ["audio/mp4", "video/mp4"] }, { e: "ogg", m: ["application/ogg", "audio/ogg", 'audio/ogg; codecs="theora, vorbis"', "video/ogg", 'video/ogg; codecs="theora, vorbis"'] }, { e: "wav", m: ["audio/wave", "audio/wav", 'audio/wav; codecs="1"', "audio/x-wav", "audio/x-pn-wav"] }, { e: "webm", m: ["audio/webm", 'audio/webm; codecs="vorbis"', "video/webm"] }], d, e, f = 0, j = c.length; f < j; f++) if (e = c[f].e, c[f].m.length && "object" === typeof c[f].m) for (var q = 0, n = c[f].m.length; q < n; q++) if (d = c[f].m[q], "" !== b.canPlayType(d)) { this.codecs[e] = d; break } else this.codecs[e] || (this.codecs[e] = !1); this.features.html5audio = !(!this.codecs.mp3 && !this.codecs.ogg && !this.codecs.webm && !this.codecs.wav); this.features.channels = 8; b.volume = 0.1337; this.features.volume = !!(1E-4 > Math.abs(b.volume - 0.1337)); navigator.userAgent.match(/iPhone|iPod|iPad/i) && (this.features.channels = 1) } this.features.flashaudio = !!navigator.mimeTypes["application/x-shockwave-flash"] || !!navigator.plugins["Shockwave Flash"] || !1; if (window.ActiveXObject) try { new ActiveXObject("ShockwaveFlash.ShockwaveFlash.10"), this.features.flashaudio = !0 } catch (g) {}!0 === this.settings.useFlash && (this.features.flashaudio = !0); !0 === this.features.flashaudio && !this.features.html5audio && (this.codecs.mp3 = "audio/mp3", this.codecs.mpga = "audio/mpeg", this.codecs.mp4 = "audio/mp4", this.codecs.m4a = "audio/mp4", this.codecs["3gp"] = "audio/3gpp", this.codecs.amr = "audio/amr", this.features.volume = !0, this.features.channels = 1) }, __getPlayerById: function(b) { return this.__players && void 0 !== this.__players[b] ? this.__players[b] : null }, __getClone: function(b, c) { for (var d in this.__clones) { var e = this.__clones[d]; if (null === e.isPlaying && e.origin === b) return e } if ("[object Object]" === Object.prototype.toString.call(c)) { d = {}; for (var f in c) d[f] = c[f]; d.autoplay = !1; f = new jukebox.Player(d, b); f.isClone = !0; f.wasReady = !1; return this.__clones[f.id] = f } return null }, loop: function() { if (0 !== this.__playersLength) if (this.__queue.length && this.__playersLength < this.features.channels) { var b = this.__queue[0], c = this.__getPlayerById(b.origin); if (null !== c) { var d = this.__getClone(b.origin, c.settings); null !== d && (!0 === this.features.volume && (c = this.__players[b.origin]) && d.setVolume(c.getVolume()), this.add(d), d.play(b.pointer, !0)) } this.__queue.splice(0, 1) } else for (d in this.__queue.length && 1 === this.features.channels && (b = this.__queue[0], c = this.__getPlayerById(b.origin), null !== c && c.play(b.pointer, !0), this.__queue.splice(0, 1)), this.__players) b = this.__players[d], c = b.getCurrentTime() || 0, b.isPlaying && !1 === b.wasReady ? b.wasReady = b.setCurrentTime(b.isPlaying.start) : b.isPlaying && !0 === b.wasReady ? c > b.isPlaying.end && (!0 === b.isPlaying.loop ? b.play(b.isPlaying.start, !0) : b.stop()) : b.isClone && null === b.isPlaying ? this.remove(b) : void 0 !== b.backgroundMusic && null === b.isPlaying && c > b.backgroundMusic.end && b.backgroundHackForiOS() }, getPlayableResource: function(b) { "[object Array]" !== Object.prototype.toString.call(b) && (b = [b]); for (var c = 0, d = b.length; c < d; c++) { var e = b[c], f = e.match(/\.([^\.]*)$/)[1]; if (f && this.codecs[f]) return e } return null }, add: function(b) { return b instanceof jukebox.Player && void 0 === this.__players[b.id] ? (this.__playersLength++, this.__players[b.id] = b, !0) : !1 }, remove: function(b) { return b instanceof jukebox.Player && void 0 !== this.__players[b.id] ? (this.__playersLength--, delete this.__players[b.id], !0) : !1 }, addToQueue: function(b, c) { return ("string" === typeof b || "number" === typeof b) && void 0 !== this.__players[c] ? (this.__queue.push({ pointer: b, origin: c }), !0) : !1 } }; (function() { var b = function() { this.init() }; b.prototype = { init: function() { var b = this || c; b._codecs = {}; b._howls = []; b._muted = !1; b._volume = 1; b._canPlayEvent = "canplaythrough"; b._navigator = "undefined" !== typeof window && window.navigator ? window.navigator : null; b.masterGain = null; b.noAudio = !1; b.usingWebAudio = !0; b.autoSuspend = !0; b.ctx = null; b.mobileAutoEnable = !0; b._setup(); return b }, volume: function(b) { var d = this || c; b = parseFloat(b); d.ctx || n(); if ("undefined" !== typeof b && 0 <= b && 1 >= b) { d._volume = b; if (d._muted) return d; d.usingWebAudio && (d.masterGain.gain.value = b); for (var e = 0; e < d._howls.length; e++) if (!d._howls[e]._webAudio) for (var f = d._howls[e]._getSoundIds(), j = 0; j < f.length; j++) { var q = d._howls[e]._soundById(f[j]); q && q._node && (q._node.volume = q._volume * b) } return d } return d._volume }, mute: function(b) { var d = this || c; d.ctx || n(); d._muted = b; d.usingWebAudio && (d.masterGain.gain.value = b ? 0 : d._volume); for (var e = 0; e < d._howls.length; e++) if (!d._howls[e]._webAudio) for (var f = d._howls[e]._getSoundIds(), j = 0; j < f.length; j++) { var q = d._howls[e]._soundById(f[j]); q && q._node && (q._node.muted = b ? !0 : q._muted) } return d }, unload: function() { for (var b = this || c, d = b._howls.length - 1; 0 <= d; d--) b._howls[d].unload(); b.usingWebAudio && b.ctx && "undefined" !== typeof b.ctx.close && (b.ctx.close(), b.ctx = null, n()); return b }, codecs: function(b) { return (this || c)._codecs[b.replace(/^x-/, "")] }, _setup: function() { var b = this || c; b.state = b.ctx ? b.ctx.state || "running" : "running"; b._autoSuspend(); if (!b.usingWebAudio) if ("undefined" !== typeof Audio) try { var d = new Audio; "undefined" === typeof d.oncanplaythrough && (b._canPlayEvent = "canplay") } catch (e) { b.noAudio = !0 } else b.noAudio = !0; try { d = new Audio, d.muted && (b.noAudio = !0) } catch (f) {} b.noAudio || b._setupCodecs(); return b }, _setupCodecs: function() { var b = this || c, d = null; try { d = "undefined" !== typeof Audio ? new Audio : null } catch (e) { return b } if (!d || "function" !== typeof d.canPlayType) return b; var f = d.canPlayType("audio/mpeg;").replace(/^no$/, ""), j = b._navigator && b._navigator.userAgent.match(/OPR\/([0-6].)/g), j = j && 33 > parseInt(j[0].split("/")[1], 10); b._codecs = { mp3: !(j || !f && !d.canPlayType("audio/mp3;").replace(/^no$/, "")), mpeg: !!f, opus: !!d.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""), ogg: !!d.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), oga: !!d.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), wav: !!d.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), aac: !!d.canPlayType("audio/aac;").replace(/^no$/, ""), caf: !!d.canPlayType("audio/x-caf;").replace(/^no$/, ""), m4a: !!(d.canPlayType("audio/x-m4a;") || d.canPlayType("audio/m4a;") || d.canPlayType("audio/aac;")).replace(/^no$/, ""), mp4: !!(d.canPlayType("audio/x-mp4;") || d.canPlayType("audio/mp4;") || d.canPlayType("audio/aac;")).replace(/^no$/, ""), weba: !!d.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""), webm: !!d.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""), dolby: !!d.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/, ""), flac: !!(d.canPlayType("audio/x-flac;") || d.canPlayType("audio/flac;")).replace(/^no$/, "") }; return b }, _enableMobileAudio: function() { var b = this || c, d = /iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi/i.test(b._navigator && b._navigator.userAgent), e = !!("ontouchend" in window || b._navigator && 0 < b._navigator.maxTouchPoints || b._navigator && 0 < b._navigator.msMaxTouchPoints); if (!b._mobileEnabled && b.ctx && (d || e)) { b._mobileEnabled = !1; !b._mobileUnloaded && 44100 !== b.ctx.sampleRate && (b._mobileUnloaded = !0, b.unload()); b._scratchBuffer = b.ctx.createBuffer(1, 1, 22050); var f = function() { var c = b.ctx.createBufferSource(); c.buffer = b._scratchBuffer; c.connect(b.ctx.destination); "undefined" === typeof c.start ? c.noteOn(0) : c.start(0); c.onended = function() { c.disconnect(0); b._mobileEnabled = !0; b.mobileAutoEnable = !1; document.removeEventListener("touchend", f, !0) } }; document.addEventListener("touchend", f, !0); return b } }, _autoSuspend: function() { var b = this; if (b.autoSuspend && b.ctx && "undefined" !== typeof b.ctx.suspend && c.usingWebAudio) { for (var d = 0; d < b._howls.length; d++) if (b._howls[d]._webAudio) for (var e = 0; e < b._howls[d]._sounds.length; e++) if (!b._howls[d]._sounds[e]._paused) return b; b._suspendTimer && clearTimeout(b._suspendTimer); b._suspendTimer = setTimeout(function() { b.autoSuspend && (b._suspendTimer = null, b.state = "suspending", b.ctx.suspend().then(function() { b.state = "suspended"; b._resumeAfterSuspend && (delete b._resumeAfterSuspend, b._autoResume()) })) }, 3E4); return b } }, _autoResume: function() { var b = this; if (b.ctx && "undefined" !== typeof b.ctx.resume && c.usingWebAudio) return "running" === b.state && b._suspendTimer ? (clearTimeout(b._suspendTimer), b._suspendTimer = null) : "suspended" === b.state ? (b.state = "resuming", b.ctx.resume().then(function() { b.state = "running"; for (var c = 0; c < b._howls.length; c++) b._howls[c]._emit("resume") }), b._suspendTimer && (clearTimeout(b._suspendTimer), b._suspendTimer = null)) : "suspending" === b.state && (b._resumeAfterSuspend = !0), b } }; var c = new b, d = function(b) { !b.src || 0 === b.src.length ? console.error("An array of source files must be passed with any new Howl.") : this.init(b) }; d.prototype = { init: function(b) { var d = this; c.ctx || n(); d._autoplay = b.autoplay || !1; d._format = "string" !== typeof b.format ? b.format : [b.format]; d._html5 = b.html5 || !1; d._muted = b.mute || !1; d._loop = b.loop || !1; d._pool = b.pool || 5; d._preload = "boolean" === typeof b.preload ? b.preload : !0; d._rate = b.rate || 1; d._sprite = b.sprite || {}; d._src = "string" !== typeof b.src ? b.src : [b.src]; d._volume = void 0 !== b.volume ? b.volume : 1; d._duration = 0; d._state = "unloaded"; d._sounds = []; d._endTimers = {}; d._queue = []; d._onend = b.onend ? [{ fn: b.onend }] : []; d._onfade = b.onfade ? [{ fn: b.onfade }] : []; d._onload = b.onload ? [{ fn: b.onload }] : []; d._onloaderror = b.onloaderror ? [{ fn: b.onloaderror }] : []; d._onpause = b.onpause ? [{ fn: b.onpause }] : []; d._onplay = b.onplay ? [{ fn: b.onplay }] : []; d._onstop = b.onstop ? [{ fn: b.onstop }] : []; d._onmute = b.onmute ? [{ fn: b.onmute }] : []; d._onvolume = b.onvolume ? [{ fn: b.onvolume }] : []; d._onrate = b.onrate ? [{ fn: b.onrate }] : []; d._onseek = b.onseek ? [{ fn: b.onseek }] : []; d._onresume = []; d._webAudio = c.usingWebAudio && !d._html5; "undefined" !== typeof c.ctx && c.ctx && c.mobileAutoEnable && c._enableMobileAudio(); c._howls.push(d); d._autoplay && d._queue.push({ event: "play", action: function() { d.play() } }); d._preload && d.load(); return d }, load: function() { var b = null; if (c.noAudio) this._emit("loaderror", null, "No audio support."); else { "string" === typeof this._src && (this._src = [this._src]); for (var d = 0; d < this._src.length; d++) { var n, z; if (this._format && this._format[d]) n = this._format[d]; else { z = this._src[d]; if ("string" !== typeof z) { this._emit("loaderror", null, "Non-string found in selected audio sources - ignoring."); continue }(n = /^data:audio\/([^;,]+);/i.exec(z)) || (n = /\.([^.]+)$/.exec(z.split("?", 1)[0])); n && (n = n[1].toLowerCase()) } if (c.codecs(n)) { b = this._src[d]; break } } if (b) { this._src = b; this._state = "loading"; "https:" === window.location.protocol && "http:" === b.slice(0, 5) && (this._html5 = !0, this._webAudio = !1); new e(this); if (this._webAudio) { var B = this, C = B._src; if (f[C]) B._duration = f[C].duration, q(B); else if (/^data:[^;]+;base64,/.test(C)) { b = atob(C.split(",")[1]); d = new Uint8Array(b.length); for (n = 0; n < b.length; ++n) d[n] = b.charCodeAt(n); j(d.buffer, B) } else { var G = new XMLHttpRequest; G.open("GET", C, !0); G.responseType = "arraybuffer"; G.onload = function() { var b = (G.status + "")[0]; "0" !== b && "2" !== b && "3" !== b ? B._emit("loaderror", null, "Failed loading audio file with status: " + G.status + ".") : j(G.response, B) }; G.onerror = function() { B._webAudio && (B._html5 = !0, B._webAudio = !1, B._sounds = [], delete f[C], B.load()) }; try { G.send() } catch (I) { G.onerror() } } } return this } this._emit("loaderror", null, "No codec support for selected audio sources.") } }, play: function(b, d) { var e = this, f = null; if ("number" === typeof b) f = b, b = null; else { if ("string" === typeof b && "loaded" === e._state && !e._sprite[b]) return null; if ("undefined" === typeof b) { b = "__default"; for (var j = 0, n = 0; n < e._sounds.length; n++) e._sounds[n]._paused && !e._sounds[n]._ended && (j++, f = e._sounds[n]._id); 1 === j ? b = null : f = null } } var q = f ? e._soundById(f) : e._inactiveSound(); if (!q) return null; f && !b && (b = q._sprite || "__default"); if ("loaded" !== e._state && !e._sprite[b]) return e._queue.push({ event: "play", action: function() { e.play(e._soundById(q._id) ? q._id : void 0) } }), q._id; if (f && !q._paused) return d || setTimeout(function() { e._emit("play", q._id) }, 0), q._id; e._webAudio && c._autoResume(); var I = Math.max(0, 0 < q._seek ? q._seek : e._sprite[b][0] / 1E3), u = Math.max(0, (e._sprite[b][0] + e._sprite[b][1]) / 1E3 - I), L = 1E3 * u / Math.abs(q._rate); q._paused = !1; q._ended = !1; q._sprite = b; q._seek = I; q._start = e._sprite[b][0] / 1E3; q._stop = (e._sprite[b][0] + e._sprite[b][1]) / 1E3; q._loop = !(!q._loop && !e._sprite[b][2]); var E = q._node; if (e._webAudio) f = function() { e._refreshBuffer(q); E.gain.setValueAtTime(q._muted || e._muted ? 0 : q._volume, c.ctx.currentTime); q._playStart = c.ctx.currentTime; "undefined" === typeof E.bufferSource.start ? q._loop ? E.bufferSource.noteGrainOn(0, I, 86400) : E.bufferSource.noteGrainOn(0, I, u) : q._loop ? E.bufferSource.start(0, I, 86400) : E.bufferSource.start(0, I, u); Infinity !== L && (e._endTimers[q._id] = setTimeout(e._ended.bind(e, q), L)); d || setTimeout(function() { e._emit("play", q._id) }, 0) }, j = "running" === c.state, "loaded" === e._state && j ? f() : (e.once(j ? "load" : "resume", f, j ? q._id : null), e._clearTimer(q._id)); else { var Q = function() { E.currentTime = I; E.muted = q._muted || e._muted || c._muted || E.muted; E.volume = q._volume * c.volume(); E.playbackRate = q._rate; setTimeout(function() { E.play(); Infinity !== L && (e._endTimers[q._id] = setTimeout(e._ended.bind(e, q), L)); d || e._emit("play", q._id) }, 0) }, f = "loaded" === e._state && (window && window.ejecta || !E.readyState && c._navigator.isCocoonJS); if (4 === E.readyState || f) Q(); else { var M = function() { Q(); E.removeEventListener(c._canPlayEvent, M, !1) }; E.addEventListener(c._canPlayEvent, M, !1); e._clearTimer(q._id) } } return q._id }, pause: function(b, c) { var d = this; if ("loaded" !== d._state) return d._queue.push({ event: "pause", action: function() { d.pause(b) } }), d; for (var e = d._getSoundIds(b), f = 0; f < e.length; f++) { d._clearTimer(e[f]); var j = d._soundById(e[f]); if (j && !j._paused && (j._seek = d.seek(e[f]), j._rateSeek = 0, j._paused = !0, d._stopFade(e[f]), j._node)) if (d._webAudio) { if (!j._node.bufferSource) break; "undefined" === typeof j._node.bufferSource.stop ? j._node.bufferSource.noteOff(0) : j._node.bufferSource.stop(0); d._cleanBuffer(j._node) } else(!isNaN(j._node.duration) || Infinity === j._node.duration) && j._node.pause(); c || d._emit("pause", j ? j._id : null) } return d }, stop: function(b, c) { var d = this; if ("loaded" !== d._state) return d._queue.push({ event: "stop", action: function() { d.stop(b) } }), d; for (var e = d._getSoundIds(b), f = 0; f < e.length; f++) { d._clearTimer(e[f]); var j = d._soundById(e[f]); if (j && (j._seek = j._start || 0, j._rateSeek = 0, j._paused = !0, j._ended = !0, d._stopFade(e[f]), j._node)) if (d._webAudio) { if (!j._node.bufferSource) { c || d._emit("stop", j._id); break } "undefined" === typeof j._node.bufferSource.stop ? j._node.bufferSource.noteOff(0) : j._node.bufferSource.stop(0); d._cleanBuffer(j._node) } else if (!isNaN(j._node.duration) || Infinity === j._node.duration) j._node.currentTime = j._start || 0, j._node.pause(); j && !c && d._emit("stop", j._id) } return d }, mute: function(b, d) { var e = this; if ("loaded" !== e._state) return e._queue.push({ event: "mute", action: function() { e.mute(b, d) } }), e; if ("undefined" === typeof d) if ("boolean" === typeof b) e._muted = b; else return e._muted; for (var f = e._getSoundIds(d), j = 0; j < f.length; j++) { var n = e._soundById(f[j]); n && (n._muted = b, e._webAudio && n._node ? n._node.gain.setValueAtTime(b ? 0 : n._volume, c.ctx.currentTime) : n._node && (n._node.muted = c._muted ? !0 : b), e._emit("mute", n._id)) } return e }, volume: function() { var b = this, d = arguments, e, f; if (0 === d.length) return b._volume; 1 === d.length || 2 === d.length && "undefined" === typeof d[1] ? 0 <= b._getSoundIds().indexOf(d[0]) ? f = parseInt(d[0], 10) : e = parseFloat(d[0]) : 2 <= d.length && (e = parseFloat(d[0]), f = parseInt(d[1], 10)); var j; if ("undefined" !== typeof e && 0 <= e && 1 >= e) { if ("loaded" !== b._state) return b._queue.push({ event: "volume", action: function() { b.volume.apply(b, d) } }), b; "undefined" === typeof f && (b._volume = e); f = b._getSoundIds(f); for (var n = 0; n < f.length; n++) if (j = b._soundById(f[n])) j._volume = e, d[2] || b._stopFade(f[n]), b._webAudio && j._node && !j._muted ? j._node.gain.setValueAtTime(e, c.ctx.currentTime) : j._node && !j._muted && (j._node.volume = e * c.volume()), b._emit("volume", j._id) } else return (j = f ? b._soundById(f) : b._sounds[0]) ? j._volume : 0; return b }, fade: function(b, d, e, f) { var j = this, n = Math.abs(b - d), q = b > d ? "out" : "in", I = n / 0.01, n = 0 < I ? e / I : e; 4 > n && (I = Math.ceil(I / (4 / n)), n = 4); if ("loaded" !== j._state) return j._queue.push({ event: "fade", action: function() { j.fade(b, d, e, f) } }), j; j.volume(b, f); for (var u = j._getSoundIds(f), L = 0; L < u.length; L++) { var E = j._soundById(u[L]); if (E) { f || j._stopFade(u[L]); if (j._webAudio && !E._muted) { var Q = c.ctx.currentTime, M = Q + e / 1E3; E._volume = b; E._node.gain.setValueAtTime(b, Q); E._node.gain.linearRampToValueAtTime(d, M) } var R = b; E._interval = setInterval(function(b, c) { 0 < I && (R += "in" === q ? 0.01 : -0.01); R = Math.max(0, R); R = Math.min(1, R); R = Math.round(100 * R) / 100; j._webAudio ? ("undefined" === typeof f && (j._volume = R), c._volume = R) : j.volume(R, b, !0); R === d && (clearInterval(c._interval), c._interval = null, j.volume(R, b), j._emit("fade", b)) }.bind(j, u[L], E), n) } } return j }, _stopFade: function(b) { var d = this._soundById(b); d && d._interval && (this._webAudio && d._node.gain.cancelScheduledValues(c.ctx.currentTime), clearInterval(d._interval), d._interval = null, this._emit("fade", b)); return this }, loop: function() { var b = arguments, c, d; if (0 === b.length) return this._loop; if (1 === b.length) if ("boolean" === typeof b[0]) this._loop = c = b[0]; else return (b = this._soundById(parseInt(b[0], 10))) ? b._loop : !1; else 2 === b.length && (c = b[0], d = parseInt(b[1], 10)); d = this._getSoundIds(d); for (var e = 0; e < d.length; e++) if (b = this._soundById(d[e])) if (b._loop = c, this._webAudio && b._node && b._node.bufferSource && (b._node.bufferSource.loop = c)) b._node.bufferSource.loopStart = b._start || 0, b._node.bufferSource.loopEnd = b._stop; return this }, rate: function() { var b = this, d = arguments, e, f; 0 === d.length ? f = b._sounds[0]._id : 1 === d.length ? 0 <= b._getSoundIds().indexOf(d[0]) ? f = parseInt(d[0], 10) : e = parseFloat(d[0]) : 2 === d.length && (e = parseFloat(d[0]), f = parseInt(d[1], 10)); var j; if ("number" === typeof e) { if ("loaded" !== b._state) return b._queue.push({ event: "rate", action: function() { b.rate.apply(b, d) } }), b; "undefined" === typeof f && (b._rate = e); f = b._getSoundIds(f); for (var n = 0; n < f.length; n++) if (j = b._soundById(f[n])) { j._rateSeek = b.seek(f[n]); j._playStart = b._webAudio ? c.ctx.currentTime : j._playStart; j._rate = e; b._webAudio && j._node && j._node.bufferSource ? j._node.bufferSource.playbackRate.value = e : j._node && (j._node.playbackRate = e); var q = b.seek(f[n]), q = 1E3 * ((b._sprite[j._sprite][0] + b._sprite[j._sprite][1]) / 1E3 - q) / Math.abs(j._rate); if (b._endTimers[f[n]] || !j._paused) b._clearTimer(f[n]), b._endTimers[f[n]] = setTimeout(b._ended.bind(b, j), q); b._emit("rate", j._id) } } else return (j = b._soundById(f)) ? j._rate : b._rate; return b }, seek: function() { var b = this, d = arguments, e, f; 0 === d.length ? f = b._sounds[0]._id : 1 === d.length ? 0 <= b._getSoundIds().indexOf(d[0]) ? f = parseInt(d[0], 10) : (f = b._sounds[0]._id, e = parseFloat(d[0])) : 2 === d.length && (e = parseFloat(d[0]), f = parseInt(d[1], 10)); if ("undefined" === typeof f) return b; if ("loaded" !== b._state) return b._queue.push({ event: "seek", action: function() { b.seek.apply(b, d) } }), b; var j = b._soundById(f); if (j) if ("number" === typeof e && 0 <= e) { var n = b.playing(f); n && b.pause(f, !0); j._seek = e; j._ended = !1; b._clearTimer(f); n && b.play(f, !0); !b._webAudio && j._node && (j._node.currentTime = e); b._emit("seek", f) } else return b._webAudio ? (e = b.playing(f) ? c.ctx.currentTime - j._playStart : 0, j._seek + ((j._rateSeek ? j._rateSeek - j._seek : 0) + e * Math.abs(j._rate))) : j._node.currentTime; return b }, playing: function(b) { if ("number" === typeof b) return (b = this._soundById(b)) ? !b._paused : !1; for (b = 0; b < this._sounds.length; b++) if (!this._sounds[b]._paused) return !0; return !1 }, duration: function(b) { var c = this._duration; (b = this._soundById(b)) && (c = this._sprite[b._sprite][1] / 1E3); return c }, state: function() { return this._state }, unload: function() { for (var b = this._sounds, d = 0; d < b.length; d++) { b[d]._paused || (this.stop(b[d]._id), this._emit("end", b[d]._id)); this._webAudio || (b[d]._node.src = "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=", b[d]._node.removeEventListener("error", b[d]._errorFn, !1), b[d]._node.removeEventListener(c._canPlayEvent, b[d]._loadFn, !1)); delete b[d]._node; this._clearTimer(b[d]._id); var e = c._howls.indexOf(this); 0 <= e && c._howls.splice(e, 1) } b = !0; for (d = 0; d < c._howls.length; d++) if (c._howls[d]._src === this._src) { b = !1; break } f && b && delete f[this._src]; c.noAudio = !1; this._state = "unloaded"; this._sounds = []; return null }, on: function(b, c, d, e) { b = this["_on" + b]; "function" === typeof c && b.push(e ? { id: d, fn: c, once: e } : { id: d, fn: c }); return this }, off: function(b, c, d) { var e = this["_on" + b], f = 0; if (c) for (f = 0; f < e.length; f++) { if (c === e[f].fn && d === e[f].id) { e.splice(f, 1); break } } else if (b) this["_on" + b] = []; else { b = Object.keys(this); for (f = 0; f < b.length; f++) 0 === b[f].indexOf("_on") && Array.isArray(this[b[f]]) && (this[b[f]] = []) } return this }, once: function(b, c, d) { this.on(b, c, d, 1); return this }, _emit: function(b, c, d) { for (var e = this["_on" + b], f = e.length - 1; 0 <= f; f--) if (!e[f].id || e[f].id === c || "load" === b) setTimeout(function(b) { b.call(this, c, d) }.bind(this, e[f].fn), 0), e[f].once && this.off(b, e[f].fn, e[f].id); return this }, _loadQueue: function() { var b = this; if (0 < b._queue.length) { var c = b._queue[0]; b.once(c.event, function() { b._queue.shift(); b._loadQueue() }); c.action() } return b }, _ended: function(b) { var d = b._sprite, d = !(!b._loop && !this._sprite[d][2]); this._emit("end", b._id); !this._webAudio && d && this.stop(b._id, !0).play(b._id); if (this._webAudio && d) { this._emit("play", b._id); b._seek = b._start || 0; b._rateSeek = 0; b._playStart = c.ctx.currentTime; var e = 1E3 * (b._stop - b._start) / Math.abs(b._rate); this._endTimers[b._id] = setTimeout(this._ended.bind(this, b), e) } this._webAudio && !d && (b._paused = !0, b._ended = !0, b._seek = b._start || 0, b._rateSeek = 0, this._clearTimer(b._id), this._cleanBuffer(b._node), c._autoSuspend()); !this._webAudio && !d && this.stop(b._id); return this }, _clearTimer: function(b) { this._endTimers[b] && (clearTimeout(this._endTimers[b]), delete this._endTimers[b]); return this }, _soundById: function(b) { for (var c = 0; c < this._sounds.length; c++) if (b === this._sounds[c]._id) return this._sounds[c]; return null }, _inactiveSound: function() { this._drain(); for (var b = 0; b < this._sounds.length; b++) if (this._sounds[b]._ended) return this._sounds[b].reset(); return new e(this) }, _drain: function() { var b = this._pool, c = 0, d = 0; if (!(this._sounds.length < b)) { for (d = 0; d < this._sounds.length; d++) this._sounds[d]._ended && c++; for (d = this._sounds.length - 1; 0 <= d && !(c <= b); d--) this._sounds[d]._ended && (this._webAudio && this._sounds[d]._node && this._sounds[d]._node.disconnect(0), this._sounds.splice(d, 1), c--) } }, _getSoundIds: function(b) { if ("undefined" === typeof b) { b = []; for (var c = 0; c < this._sounds.length; c++) b.push(this._sounds[c]._id); return b } return [b] }, _refreshBuffer: function(b) { b._node.bufferSource = c.ctx.createBufferSource(); b._node.bufferSource.buffer = f[this._src]; b._panner ? b._node.bufferSource.connect(b._panner) : b._node.bufferSource.connect(b._node); if (b._node.bufferSource.loop = b._loop) b._node.bufferSource.loopStart = b._start || 0, b._node.bufferSource.loopEnd = b._stop; b._node.bufferSource.playbackRate.value = b._rate; return this }, _cleanBuffer: function(b) { if (this._scratchBuffer) { b.bufferSource.onended = null; b.bufferSource.disconnect(0); try { b.bufferSource.buffer = this._scratchBuffer } catch (c) {} } b.bufferSource = null; return this } }; var e = function(b) { this._parent = b; this.init() }; e.prototype = { init: function() { var b = this._parent; this._muted = b._muted; this._loop = b._loop; this._volume = b._volume; this._muted = b._muted; this._rate = b._rate; this._seek = 0; this._ended = this._paused = !0; this._sprite = "__default"; this._id = Math.round(Date.now() * Math.random()); b._sounds.push(this); this.create(); return this }, create: function() { var b = this._parent, d = c._muted || this._muted || this._parent._muted ? 0 : this._volume; b._webAudio ? (this._node = "undefined" === typeof c.ctx.createGain ? c.ctx.createGainNode() : c.ctx.createGain(), this._node.gain.setValueAtTime(d, c.ctx.currentTime), this._node.paused = !0, this._node.connect(c.masterGain)) : (this._node = new Audio, this._errorFn = this._errorListener.bind(this), this._node.addEventListener("error", this._errorFn, !1), this._loadFn = this._loadListener.bind(this), this._node.addEventListener(c._canPlayEvent, this._loadFn, !1), this._node.src = b._src, this._node.preload = "auto", this._node.volume = d * c.volume(), this._node.load()); return this }, reset: function() { var b = this._parent; this._muted = b._muted; this._loop = b._loop; this._volume = b._volume; this._muted = b._muted; this._rate = b._rate; this._rateSeek = this._seek = 0; this._ended = this._paused = !0; this._sprite = "__default"; this._id = Math.round(Date.now() * Math.random()); return this }, _errorListener: function() { this._parent._emit("loaderror", this._id, this._node.error ? this._node.error.code : 0); this._node.removeEventListener("error", this._errorListener, !1) }, _loadListener: function() { var b = this._parent; b._duration = Math.ceil(10 * this._node.duration) / 10; 0 === Object.keys(b._sprite).length && (b._sprite = { __default: [0, 1E3 * b._duration] }); "loaded" !== b._state && (b._state = "loaded", b._emit("load"), b._loadQueue()); this._node.removeEventListener(c._canPlayEvent, this._loadFn, !1) } }; var f = {}, j = function(b, d) { c.ctx.decodeAudioData(b, function(b) { b && 0 < d._sounds.length && (f[d._src] = b, q(d, b)) }, function() { d._emit("loaderror", null, "Decoding audio data failed.") }) }, q = function(b, c) { c && !b._duration && (b._duration = c.duration); 0 === Object.keys(b._sprite).length && (b._sprite = { __default: [0, 1E3 * b._duration] }); "loaded" !== b._state && (b._state = "loaded", b._emit("load"), b._loadQueue()) }, n = function() { try { "undefined" !== typeof AudioContext ? c.ctx = new AudioContext : "undefined" !== typeof webkitAudioContext ? c.ctx = new webkitAudioContext : c.usingWebAudio = !1 } catch (b) { c.usingWebAudio = !1 } var d = /iP(hone|od|ad)/.test(c._navigator && c._navigator.platform), e = c._navigator && c._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/), e = e ? parseInt(e[1], 10) : null; if (d && e && 9 > e && (d = /safari/.test(c._navigator && c._navigator.userAgent.toLowerCase()), c._navigator && c._navigator.standalone && !d || c._navigator && !c._navigator.standalone && !d)) c.usingWebAudio = !1; c.usingWebAudio && (c.masterGain = "undefined" === typeof c.ctx.createGain ? c.ctx.createGainNode() : c.ctx.createGain(), c.masterGain.gain.value = 1, c.masterGain.connect(c.ctx.destination)); c._setup() }; "function" === typeof define && define.amd && define([], function() { return { Howler: c, Howl: d } }); "undefined" !== typeof exports && (exports.Howler = c, exports.Howl = d); "undefined" !== typeof window ? (window.HowlerGlobal = b, window.Howler = c, window.Howl = d, window.Sound = e) : "undefined" !== typeof global && (global.HowlerGlobal = b, global.Howler = c, global.Howl = d, global.Sound = e) })(); (function() { HowlerGlobal.prototype._pos = [0, 0, 0]; HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0]; HowlerGlobal.prototype.stereo = function(b) { if (!this.ctx || !this.ctx.listener) return this; for (var c = this._howls.length - 1; 0 <= c; c--) this._howls[c].stereo(b); return this }; HowlerGlobal.prototype.pos = function(b, c, d) { if (!this.ctx || !this.ctx.listener) return this; c = "number" !== typeof c ? this._pos[1] : c; d = "number" !== typeof d ? this._pos[2] : d; if ("number" === typeof b) this._pos = [b, c, d], this.ctx.listener.setPosition(this._pos[0], this._pos[1], this._pos[2]); else return this._pos; return this }; HowlerGlobal.prototype.orientation = function(b, c, d, e, g, y) { if (!this.ctx || !this.ctx.listener) return this; var A = this._orientation; c = "number" !== typeof c ? A[1] : c; d = "number" !== typeof d ? A[2] : d; e = "number" !== typeof e ? A[3] : e; g = "number" !== typeof g ? A[4] : g; y = "number" !== typeof y ? A[5] : y; if ("number" === typeof b) this._orientation = [b, c, d, e, g, y], this.ctx.listener.setOrientation(b, c, d, e, g, y); else return A; return this }; var b = Howl.prototype.init; Howl.prototype.init = function(c) { this._orientation = c.orientation || [1, 0, 0]; this._stereo = c.stereo || null; this._pos = c.pos || null; this._pannerAttr = { coneInnerAngle: "undefined" !== typeof c.coneInnerAngle ? c.coneInnerAngle : 360, coneOuterAngle: "undefined" !== typeof c.coneOuterAngle ? c.coneOuterAngle : 360, coneOuterGain: "undefined" !== typeof c.coneOuterGain ? c.coneOuterGain : 0, distanceModel: "undefined" !== typeof c.distanceModel ? c.distanceModel : "inverse", maxDistance: "undefined" !== typeof c.maxDistance ? c.maxDistance : 1E4, panningModel: "undefined" !== typeof c.panningModel ? c.panningModel : "HRTF", refDistance: "undefined" !== typeof c.refDistance ? c.refDistance : 1, rolloffFactor: "undefined" !== typeof c.rolloffFactor ? c.rolloffFactor : 1 }; this._onstereo = c.onstereo ? [{ fn: c.onstereo }] : []; this._onpos = c.onpos ? [{ fn: c.onpos }] : []; this._onorientation = c.onorientation ? [{ fn: c.onorientation }] : []; return b.call(this, c) }; Howl.prototype.stereo = function(b, c) { var d = this; if (!d._webAudio) return d; if ("loaded" !== d._state) return d._queue.push({ event: "stereo", action: function() { d.stereo(b, c) } }), d; var n = "undefined" === typeof Howler.ctx.createStereoPanner ? "spatial" : "stereo"; if ("undefined" === typeof c) if ("number" === typeof b) d._stereo = b, d._pos = [b, 0, 0]; else return d._stereo; for (var g = d._getSoundIds(c), y = 0; y < g.length; y++) { var A = d._soundById(g[y]); if (A) if ("number" === typeof b) A._stereo = b, A._pos = [b, 0, 0], A._node && (A._pannerAttr.panningModel = "equalpower", (!A._panner || !A._panner.pan) && e(A, n), "spatial" === n ? A._panner.setPosition(b, 0, 0) : A._panner.pan.value = b), d._emit("stereo", A._id); else return A._stereo } return d }; Howl.prototype.pos = function(b, c, d, n) { var g = this; if (!g._webAudio) return g; if ("loaded" !== g._state) return g._queue.push({ event: "pos", action: function() { g.pos(b, c, d, n) } }), g; c = "number" !== typeof c ? 0 : c; d = "number" !== typeof d ? -0.5 : d; if ("undefined" === typeof n) if ("number" === typeof b) g._pos = [b, c, d]; else return g._pos; for (var y = g._getSoundIds(n), A = 0; A < y.length; A++) { var z = g._soundById(y[A]); if (z) if ("number" === typeof b) z._pos = [b, c, d], z._node && ((!z._panner || z._panner.pan) && e(z, "spatial"), z._panner.setPosition(b, c, d)), g._emit("pos", z._id); else return z._pos } return g }; Howl.prototype.orientation = function(b, c, d, n) { var g = this; if (!g._webAudio) return g; if ("loaded" !== g._state) return g._queue.push({ event: "orientation", action: function() { g.orientation(b, c, d, n) } }), g; c = "number" !== typeof c ? g._orientation[1] : c; d = "number" !== typeof d ? g._orientation[2] : d; if ("undefined" === typeof n) if ("number" === typeof b) g._orientation = [b, c, d]; else return g._orientation; for (var y = g._getSoundIds(n), A = 0; A < y.length; A++) { var z = g._soundById(y[A]); if (z) if ("number" === typeof b) z._orientation = [b, c, d], z._node && (z._panner || (z._pos || (z._pos = g._pos || [0, 0, -0.5]), e(z, "spatial")), z._panner.setOrientation(b, c, d)), g._emit("orientation", z._id); else return z._orientation } return g }; Howl.prototype.pannerAttr = function() { var b = arguments, c, d; if (!this._webAudio) return this; if (0 === b.length) return this._pannerAttr; if (1 === b.length) if ("object" === typeof b[0]) c = b[0], "undefined" === typeof d && (this._pannerAttr = { coneInnerAngle: "undefined" !== typeof c.coneInnerAngle ? c.coneInnerAngle : this._coneInnerAngle, coneOuterAngle: "undefined" !== typeof c.coneOuterAngle ? c.coneOuterAngle : this._coneOuterAngle, coneOuterGain: "undefined" !== typeof c.coneOuterGain ? c.coneOuterGain : this._coneOuterGain, distanceModel: "undefined" !== typeof c.distanceModel ? c.distanceModel : this._distanceModel, maxDistance: "undefined" !== typeof c.maxDistance ? c.maxDistance : this._maxDistance, panningModel: "undefined" !== typeof c.panningModel ? c.panningModel : this._panningModel, refDistance: "undefined" !== typeof c.refDistance ? c.refDistance : this._refDistance, rolloffFactor: "undefined" !== typeof c.rolloffFactor ? c.rolloffFactor : this._rolloffFactor }); else return (b = this._soundById(parseInt(b[0], 10))) ? b._pannerAttr : this._pannerAttr; else 2 === b.length && (c = b[0], d = parseInt(b[1], 10)); d = this._getSoundIds(d); for (var n = 0; n < d.length; n++) if (b = this._soundById(d[n])) { var g = b._pannerAttr, g = { coneInnerAngle: "undefined" !== typeof c.coneInnerAngle ? c.coneInnerAngle : g.coneInnerAngle, coneOuterAngle: "undefined" !== typeof c.coneOuterAngle ? c.coneOuterAngle : g.coneOuterAngle, coneOuterGain: "undefined" !== typeof c.coneOuterGain ? c.coneOuterGain : g.coneOuterGain, distanceModel: "undefined" !== typeof c.distanceModel ? c.distanceModel : g.distanceModel, maxDistance: "undefined" !== typeof c.maxDistance ? c.maxDistance : g.maxDistance, panningModel: "undefined" !== typeof c.panningModel ? c.panningModel : g.panningModel, refDistance: "undefined" !== typeof c.refDistance ? c.refDistance : g.refDistance, rolloffFactor: "undefined" !== typeof c.rolloffFactor ? c.rolloffFactor : g.rolloffFactor }, y = b._panner; y ? (y.coneInnerAngle = g.coneInnerAngle, y.coneOuterAngle = g.coneOuterAngle, y.coneOuterGain = g.coneOuterGain, y.distanceModel = g.distanceModel, y.maxDistance = g.maxDistance, y.panningModel = g.panningModel, y.refDistance = g.refDistance, y.rolloffFactor = g.rolloffFactor) : (b._pos || (b._pos = this._pos || [0, 0, -0.5]), e(b, "spatial")) } return this }; var c = Sound.prototype.init; Sound.prototype.init = function() { var b = this._parent; this._orientation = b._orientation; this._stereo = b._stereo; this._pos = b._pos; this._pannerAttr = b._pannerAttr; c.call(this); this._stereo ? b.stereo(this._stereo) : this._pos && b.pos(this._pos[0], this._pos[1], this._pos[2], this._id) }; var d = Sound.prototype.reset; Sound.prototype.reset = function() { var b = this._parent; this._orientation = b._orientation; this._pos = b._pos; this._pannerAttr = b._pannerAttr; return d.call(this) }; var e = function(b, c) { "spatial" === (c || "spatial") ? (b._panner = Howler.ctx.createPanner(), b._panner.coneInnerAngle = b._pannerAttr.coneInnerAngle, b._panner.coneOuterAngle = b._pannerAttr.coneOuterAngle, b._panner.coneOuterGain = b._pannerAttr.coneOuterGain, b._panner.distanceModel = b._pannerAttr.distanceModel, b._panner.maxDistance = b._pannerAttr.maxDistance, b._panner.panningModel = b._pannerAttr.panningModel, b._panner.refDistance = b._pannerAttr.refDistance, b._panner.rolloffFactor = b._pannerAttr.rolloffFactor, b._panner.setPosition(b._pos[0], b._pos[1], b._pos[2]), b._panner.setOrientation(b._orientation[0], b._orientation[1], b._orientation[2])) : (b._panner = Howler.ctx.createStereoPanner(), b._panner.pan.value = b._stereo); b._panner.connect(b._node); b._paused || b._parent.pause(b._id, !0).play(b._id) } })(); (function(b) { Number.prototype.map = function(b, c, d, e) { return d + (e - d) * ((this - b) / (c - b)) }; Number.prototype.limit = function(b, c) { return Math.min(c, Math.max(b, this)) }; Number.prototype.round = function(b) { b = Math.pow(10, b || 0); return Math.round(this * b) / b }; Number.prototype.floor = function() { return Math.floor(this) }; Number.prototype.ceil = function() { return Math.ceil(this) }; Number.prototype.toInt = function() { return this | 0 }; Number.prototype.toRad = function() { return this / 180 * Math.PI }; Number.prototype.toDeg = function() { return 180 * this / Math.PI }; Array.prototype.erase = function(b) { for (var c = this.length; c--;) this[c] === b && this.splice(c, 1); return this }; Array.prototype.random = function() { return this[Math.floor(Math.random() * this.length)] }; Function.prototype.bind = Function.prototype.bind || function(b) { if ("function" !== typeof this) throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); var c = Array.prototype.slice.call(arguments, 1), d = this, e = function() {}, f = function() { return d.apply(this instanceof e && b ? this : b, c.concat(Array.prototype.slice.call(arguments))) }; e.prototype = this.prototype; f.prototype = new e; return f }; b.ig = { game: null, debug: null, version: "1.23", global: b, modules: {}, resources: [], ready: !1, baked: !1, nocache: "", ua: {}, prefix: b.ImpactPrefix || "", lib: "lib/", _current: null, _loadQueue: [], _waitForOnload: 0, $: function(b) { return "#" == b.charAt(0) ? document.getElementById(b.substr(1)) : document.getElementsByTagName(b) }, $new: function(b) { return document.createElement(b) }, copy: function(b) { if (!b || "object" != typeof b || b instanceof HTMLElement || b instanceof ig.Class) return b; if (b instanceof Array) for (var c = [], d = 0, e = b.length; d < e; d++) c[d] = ig.copy(b[d]); else for (d in c = {}, b) c[d] = ig.copy(b[d]); return c }, merge: function(b, c) { for (var d in c) { var e = c[d]; if ("object" != typeof e || e instanceof HTMLElement || e instanceof ig.Class || null === e) b[d] = e; else { if (!b[d] || "object" != typeof b[d]) b[d] = e instanceof Array ? [] : {}; ig.merge(b[d], e) } } return b }, ksort: function(b) { if (!b || "object" != typeof b) return []; var c = [], d = [], e; for (e in b) c.push(e); c.sort(); for (e = 0; e < c.length; e++) d.push(b[c[e]]); return d }, setVendorAttribute: function(b, c, d) { var e = c.charAt(0).toUpperCase() + c.substr(1); b[c] = "undefined" !== typeof b.imageSmoothingEnabled ? b["ms" + e] = b["moz" + e] = b["o" + e] = d : b["ms" + e] = b["moz" + e] = b["webkit" + e] = b["o" + e] = d }, getVendorAttribute: function(b, c) { var d = c.charAt(0).toUpperCase() + c.substr(1); return "undefined" !== typeof b.imageSmoothingEnabled ? b[c] || b["ms" + d] || b["moz" + d] || b["o" + d] : b[c] || b["ms" + d] || b["moz" + d] || b["webkit" + d] || b["o" + d] }, normalizeVendorAttribute: function(b, c) { var d = ig.getVendorAttribute(b, c); !b[c] && d && (b[c] = d) }, getImagePixels: function(b, c, d, e, f) { var j = ig.$new("canvas"); j.width = b.width; j.height = b.height; var q = j.getContext("2d"); ig.System.SCALE.CRISP(j, q); var G = ig.getVendorAttribute(q, "backingStorePixelRatio") || 1; ig.normalizeVendorAttribute(q, "getImageDataHD"); var I = b.width / G, u = b.height / G; j.width = Math.ceil(I); j.height = Math.ceil(u); q.drawImage(b, 0, 0, I, u); return 1 === G ? q.getImageData(c, d, e, f) : q.getImageDataHD(c, d, e, f) }, module: function(b) { if (ig._current) throw "Module '" + ig._current.name + "' defines nothing"; if (ig.modules[b] && ig.modules[b].body) throw "Module '" + b + "' is already defined"; ig._current = { name: b, requires: [], loaded: !1, body: null }; ig.modules[b] = ig._current; ig._loadQueue.push(ig._current); return ig }, requires: function() { ig._current.requires = Array.prototype.slice.call(arguments); return ig }, defines: function(b) { ig._current.body = b; ig._current = null; ig._initDOMReady() }, addResource: function(b) { ig.resources.push(b) }, setNocache: function(b) { ig.nocache = b ? "?" + Date.now() : "" }, log: function() {}, assert: function() {}, show: function() {}, mark: function() {}, _loadScript: function(b, c) { ig.modules[b] = { name: b, requires: [], loaded: !1, body: null }; ig._waitForOnload++; var d = ig.prefix + ig.lib + b.replace(/\./g, "/") + ".js" + ig.nocache, e = ig.$new("script"); e.type = "text/javascript"; e.src = d; e.onload = function() { ig._waitForOnload--; ig._execModules() }; e.onerror = function() { throw "Failed to load module " + b + " at " + d + " required from " + c; }; ig.$("head")[0].appendChild(e) }, _execModules: function() { for (var b = !1, c = 0; c < ig._loadQueue.length; c++) { for (var d = ig._loadQueue[c], e = !0, f = 0; f < d.requires.length; f++) { var j = d.requires[f]; ig.modules[j] ? ig.modules[j].loaded || (e = !1) : (e = !1, ig._loadScript(j, d.name)) } e && d.body && (ig._loadQueue.splice(c, 1), d.loaded = !0, d.body(), b = !0, c--) } if (b) ig._execModules(); else if (!ig.baked && 0 == ig._waitForOnload && 0 != ig._loadQueue.length) { b = []; for (c = 0; c < ig._loadQueue.length; c++) { e = []; j = ig._loadQueue[c].requires; for (f = 0; f < j.length; f++) d = ig.modules[j[f]], (!d || !d.loaded) && e.push(j[f]); b.push(ig._loadQueue[c].name + " (requires: " + e.join(", ") + ")") } throw "Unresolved (or circular?) dependencies. Most likely there's a name/path mismatch for one of the listed modules or a previous syntax error prevents a module from loading:\n" + b.join("\n"); } }, _DOMReady: function() { if (!ig.modules["dom.ready"].loaded) { if (!document.body) return setTimeout(ig._DOMReady, 13); ig.modules["dom.ready"].loaded = !0; ig._waitForOnload--; ig._execModules() } return 0 }, _boot: function() { document.location.href.match(/\?nocache/) && ig.setNocache(!0); ig.ua.pixelRatio = b.devicePixelRatio || 1; ig.ua.viewport = { width: b.innerWidth, height: b.innerHeight }; ig.ua.screen = { width: b.screen.availWidth * ig.ua.pixelRatio, height: b.screen.availHeight * ig.ua.pixelRatio }; ig.ua.iPhone = /iPhone/i.test(navigator.userAgent); ig.ua.iPhone4 = ig.ua.iPhone && 2 == ig.ua.pixelRatio; ig.ua.iPad = /iPad/i.test(navigator.userAgent); ig.ua.android = /android/i.test(navigator.userAgent); ig.ua.winPhone = /Windows Phone/i.test(navigator.userAgent); ig.ua.is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent); ig.ua.is_safari_or_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); ig.ua.iOS = ig.ua.iPhone || ig.ua.iPad; ig.ua.iOS6_tag = /OS 6_/i.test(navigator.userAgent); ig.ua.iOS6 = (ig.ua.iPhone || ig.ua.iPad) && ig.ua.iOS6_tag; ig.ua.iOSgt5 = ig.ua.iOS && 5 < parseInt(navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/)[1]); ig.ua.HTCONE = /HTC_One/i.test(navigator.userAgent); ig.ua.winPhone = /Windows Phone/i.test(navigator.userAgent); ig.ua.Kindle = /Silk/i.test(navigator.userAgent); ig.ua.touchDevice = "ontouchstart" in b || b.navigator.msMaxTouchPoints; ig.ua.mobile = ig.ua.iOS || ig.ua.android || ig.ua.iOS6 || ig.ua.winPhone || ig.ua.Kindle || /mobile/i.test(navigator.userAgent) }, _initDOMReady: function() { ig.modules["dom.ready"] ? ig._execModules() : (ig._boot(), ig.modules["dom.ready"] = { requires: [], loaded: !1, body: null }, ig._waitForOnload++, "complete" === document.readyState ? ig._DOMReady() : (document.addEventListener("DOMContentLoaded", ig._DOMReady, !1), b.addEventListener("load", ig._DOMReady, !1))) } }; ig.normalizeVendorAttribute(b, "requestAnimationFrame"); if (b.requestAnimationFrame) { var c = 1, d = {}; b.ig.setAnimation = function(e, g) { var f = c++; d[f] = !0; var j = function() { d[f] && (b.requestAnimationFrame(j, g), e()) }; b.requestAnimationFrame(j, g); return f }; b.ig.clearAnimation = function(b) { delete d[b] } } else b.ig.setAnimation = function(c) { return b.setInterval(c, 1E3 / 60) }, b.ig.clearAnimation = function(c) { b.clearInterval(c) }; var e = !1, f = /xyz/.test(function() { xyz }) ? /\bparent\b/ : /.*/, j = 0; b.ig.Class = function() {}; var q = function(b) { var c = this.prototype, d = {}, e; for (e in b) "function" == typeof b[e] && "function" == typeof c[e] && f.test(b[e]) ? (d[e] = c[e], c[e] = function(b, c) { return function() { var e = this.parent; this.parent = d[b]; var g = c.apply(this, arguments); this.parent = e; return g } }(e, b[e])) : c[e] = b[e] }; b.ig.Class.extend = function(c) { function d() { if (!e) { if (this.staticInstantiate) { var b = this.staticInstantiate.apply(this, arguments); if (b) return b } for (var c in this) "object" == typeof this[c] && (this[c] = ig.copy(this[c])); this.init && this.init.apply(this, arguments) } return this } var y = this.prototype; e = !0; var A = new this; e = !1; for (var z in c) A[z] = "function" == typeof c[z] && "function" == typeof y[z] && f.test(c[z]) ? function(b, c) { return function() { var d = this.parent; this.parent = y[b]; var e = c.apply(this, arguments); this.parent = d; return e } }(z, c[z]) : c[z]; d.prototype = A; d.prototype.constructor = d; d.extend = b.ig.Class.extend; d.inject = q; d.classId = A.classId = ++j; return d }; b.ImpactMixin && ig.merge(ig, b.ImpactMixin) })(window); ig.baked = !0; ig.module("impact.image").defines(function() { ig.Image = ig.Class.extend({ data: null, width: 0, height: 0, loaded: !1, failed: !1, loadCallback: null, path: "", staticInstantiate: function(b) { return ig.Image.cache[b] || null }, init: function(b) { this.path = b; this.load() }, load: function(b) { this.loaded ? b && b(this.path, !0) : (!this.loaded && ig.ready ? (this.loadCallback = b || null, this.data = new Image, this.data.onload = this.onload.bind(this), this.data.onerror = this.onerror.bind(this), this.data.src = ig.prefix + this.path + ig.nocache) : ig.addResource(this), ig.Image.cache[this.path] = this) }, reload: function() { this.loaded = !1; this.data = new Image; this.data.onload = this.onload.bind(this); this.data.src = this.path + "?" + Date.now() }, onload: function() { this.width = this.data.width; this.height = this.data.height; this.loaded = !0; 1 != ig.system.scale && this.resize(ig.system.scale); this.loadCallback && this.loadCallback(this.path, !0) }, onerror: function() { this.failed = !0; this.loadCallback && this.loadCallback(this.path, !1) }, resize: function(b) { var c = ig.getImagePixels(this.data, 0, 0, this.width, this.height), d = this.width * b, e = this.height * b, f = ig.$new("canvas"); f.width = d; f.height = e; for (var j = f.getContext("2d"), q = j.getImageData(0, 0, d, e), n = 0; n < e; n++) for (var g = 0; g < d; g++) { var y = 4 * (Math.floor(n / b) * this.width + Math.floor(g / b)), A = 4 * (n * d + g); q.data[A] = c.data[y]; q.data[A + 1] = c.data[y + 1]; q.data[A + 2] = c.data[y + 2]; q.data[A + 3] = c.data[y + 3] } j.putImageData(q, 0, 0); this.data = f }, draw: function(b, c, d, e, f, j) { if (this.loaded) { var q = ig.system.scale; f = (f ? f : this.width) * q; j = (j ? j : this.height) * q; ig.system.context.drawImage(this.data, d ? d * q : 0, e ? e * q : 0, f, j, ig.system.getDrawPos(b), ig.system.getDrawPos(c), f, j); ig.Image.drawCount++ } }, drawTile: function(b, c, d, e, f, j, q) { f = f ? f : e; if (this.loaded && !(e > this.width || f > this.height)) { var n = ig.system.scale, g = Math.floor(e * n), y = Math.floor(f * n), A = j ? -1 : 1, z = q ? -1 : 1; if (j || q) ig.system.context.save(), ig.system.context.scale(A, z); ig.system.context.drawImage(this.data, Math.floor(d * e) % this.width * n, Math.floor(d * e / this.width) * f * n, g, y, ig.system.getDrawPos(b) * A - (j ? g : 0), ig.system.getDrawPos(c) * z - (q ? y : 0), g, y); (j || q) && ig.system.context.restore(); ig.Image.drawCount++ } } }); ig.Image.drawCount = 0; ig.Image.cache = {}; ig.Image.reloadCache = function() { for (var b in ig.Image.cache) ig.Image.cache[b].reload() } }); ig.baked = !0; ig.module("impact.font").requires("impact.image").defines(function() { ig.Font = ig.Image.extend({ widthMap: [], indices: [], firstChar: 32, alpha: 1, letterSpacing: 1, lineSpacing: 0, onload: function(b) { this._loadMetrics(this.data); this.parent(b) }, widthForString: function(b) { if (-1 !== b.indexOf("\n")) { b = b.split("\n"); for (var c = 0, d = 0; d < b.length; d++) c = Math.max(c, this._widthForLine(b[d])); return c } return this._widthForLine(b) }, _widthForLine: function(b) { for (var c = 0, d = 0; d < b.length; d++) c += this.widthMap[b.charCodeAt(d) - this.firstChar] + this.letterSpacing; return c }, heightForString: function(b) { return b.split("\n").length * (this.height + this.lineSpacing) }, draw: function(b, c, d, e) { "string" != typeof b && (b = b.toString()); if (-1 !== b.indexOf("\n")) { b = b.split("\n"); for (var f = this.height + this.lineSpacing, j = 0; j < b.length; j++) this.draw(b[j], c, d + j * f, e) } else { if (e == ig.Font.ALIGN.RIGHT || e == ig.Font.ALIGN.CENTER) j = this._widthForLine(b), c -= e == ig.Font.ALIGN.CENTER ? j / 2 : j; 1 !== this.alpha && (ig.system.context.globalAlpha = this.alpha); for (j = 0; j < b.length; j++) e = b.charCodeAt(j), c += this._drawChar(e - this.firstChar, c, d); 1 !== this.alpha && (ig.system.context.globalAlpha = 1); ig.Image.drawCount += b.length } }, _drawChar: function(b, c, d) { if (!this.loaded || 0 > b || b >= this.indices.length) return 0; var e = ig.system.scale, f = this.widthMap[b] * e, j = (this.height - 2) * e; ig.system.context.drawImage(this.data, this.indices[b] * e, 0, f, j, ig.system.getDrawPos(c), ig.system.getDrawPos(d), f, j); return this.widthMap[b] + this.letterSpacing }, _loadMetrics: function(b) { this.height = b.height - 1; this.widthMap = []; this.indices = []; for (var c = ig.getImagePixels(b, 0, b.height - 1, b.width, 1), d = 0, e = 0, f = 0; f < b.width; f++) { var j = 4 * f + 3; 127 < c.data[j] ? e++ : 128 > c.data[j] && e && (this.widthMap.push(e), this.indices.push(f - e), d++, e = 0) } this.widthMap.push(e); this.indices.push(f - e) } }); ig.Font.ALIGN = { LEFT: 0, RIGHT: 1, CENTER: 2 } }); ig.baked = !0; ig.module("impact.sound").defines(function() { ig.SoundManager = ig.Class.extend({ clips: {}, volume: 1, format: null, init: function() { if (!ig.Sound.enabled || !window.Audio) ig.Sound.enabled = !1; else { for (var b = new Audio, c = 0; c < ig.Sound.use.length; c++) { var d = ig.Sound.use[c]; if (b.canPlayType(d.mime)) { this.format = d; break } } this.format || (ig.Sound.enabled = !1) } }, load: function(b, c, d) { var e = ig.prefix + b.replace(/[^\.]+$/, this.format.ext) + ig.nocache; if (this.clips[b]) { if (c && this.clips[b].length < ig.Sound.channels) for (c = this.clips[b].length; c < ig.Sound.channels; c++) { var f = new Audio(e); f.load(); this.clips[b].push(f) } return this.clips[b][0] } var j = new Audio(e); d && (j.addEventListener("canplaythrough", function n(c) { j.removeEventListener("canplaythrough", n, !1); d(b, !0, c) }, !1), j.addEventListener("error", function(c) { d(b, !1, c) }, !1)); j.preload = "auto"; j.load(); this.clips[b] = [j]; if (c) for (c = 1; c < ig.Sound.channels; c++) f = new Audio(e), f.load(), this.clips[b].push(f); return j }, get: function(b) { b = this.clips[b]; for (var c = 0, d; d = b[c++];) if (d.paused || d.ended) return d.ended && (d.currentTime = 0), d; b[0].pause(); b[0].currentTime = 0; return b[0] } }); ig.Music = ig.Class.extend({ tracks: [], namedTracks: {}, currentTrack: null, currentIndex: 0, random: !1, _volume: 1, _loop: !1, _fadeInterval: 0, _fadeTimer: null, _endedCallbackBound: null, init: function() { this._endedCallbackBound = this._endedCallback.bind(this); Object.defineProperty ? (Object.defineProperty(this, "volume", { get: this.getVolume.bind(this), set: this.setVolume.bind(this) }), Object.defineProperty(this, "loop", { get: this.getLooping.bind(this), set: this.setLooping.bind(this) })) : this.__defineGetter__ && (this.__defineGetter__("volume", this.getVolume.bind(this)), this.__defineSetter__("volume", this.setVolume.bind(this)), this.__defineGetter__("loop", this.getLooping.bind(this)), this.__defineSetter__("loop", this.setLooping.bind(this))) }, add: function(b, c) { if (ig.Sound.enabled) { var d = ig.soundManager.load(b instanceof ig.Sound ? b.path : b, !1); d.loop = this._loop; d.volume = this._volume; d.addEventListener("ended", this._endedCallbackBound, !1); this.tracks.push(d); c && (this.namedTracks[c] = d); this.currentTrack || (this.currentTrack = d) } }, next: function() { this.tracks.length && (this.stop(), this.currentIndex = this.random ? Math.floor(Math.random() * this.tracks.length) : (this.currentIndex + 1) % this.tracks.length, this.currentTrack = this.tracks[this.currentIndex], this.play()) }, pause: function() { this.currentTrack && this.currentTrack.pause() }, stop: function() { this.currentTrack && (this.currentTrack.pause(), this.currentTrack.currentTime = 0) }, play: function(b) { if (b && this.namedTracks[b]) b = this.namedTracks[b], b != this.currentTrack && (this.stop(), this.currentTrack = b); else if (!this.currentTrack) return; this.currentTrack.play() }, getLooping: function() { return this._loop }, setLooping: function(b) { this._loop = b; for (var c in this.tracks) this.tracks[c].loop = b }, getVolume: function() { return this._volume }, setVolume: function(b) { this._volume = b.limit(0, 1); for (var c in this.tracks) this.tracks[c].volume = this._volume }, fadeOut: function(b) { this.currentTrack && (clearInterval(this._fadeInterval), this.fadeTimer = new ig.Timer(b), this._fadeInterval = setInterval(this._fadeStep.bind(this), 50)) }, _fadeStep: function() { var b = this.fadeTimer.delta().map(-this.fadeTimer.target, 0, 1, 0).limit(0, 1) * this._volume; 0.01 >= b ? (this.stop(), this.currentTrack.volume = this._volume, clearInterval(this._fadeInterval)) : this.currentTrack.volume = b }, _endedCallback: function() { this._loop ? this.play() : this.next() } }); ig.Sound = ig.Class.extend({ path: "", volume: 1, currentClip: null, multiChannel: !0, init: function(b, c) { this.path = b; this.multiChannel = !1 !== c; this.load() }, load: function(b) { ig.Sound.enabled ? ig.ready ? ig.soundManager.load(this.path, this.multiChannel, b) : ig.addResource(this) : b && b(this.path, !0) }, play: function() { ig.Sound.enabled && (this.currentClip = ig.soundManager.get(this.path), this.currentClip.volume = ig.soundManager.volume * this.volume, this.currentClip.play()) }, stop: function() { this.currentClip && (this.currentClip.pause(), this.currentClip.currentTime = 0) } }); ig.Sound.FORMAT = { MP3: { ext: "mp3", mime: "audio/mpeg" }, M4A: { ext: "m4a", mime: "audio/mp4; codecs=mp4a" }, OGG: { ext: "ogg", mime: "audio/ogg; codecs=vorbis" }, WEBM: { ext: "webm", mime: "audio/webm; codecs=vorbis" }, CAF: { ext: "caf", mime: "audio/x-caf" } }; ig.Sound.use = [ig.Sound.FORMAT.OGG, ig.Sound.FORMAT.MP3]; ig.Sound.channels = 4; ig.Sound.enabled = !0 }); ig.baked = !0; ig.module("impact.loader").requires("impact.image", "impact.font", "impact.sound").defines(function() { ig.Loader = ig.Class.extend({ resources: [], gameClass: null, status: 0, done: !1, _unloaded: [], _drawStatus: 0, _intervalId: 0, _loadCallbackBound: null, init: function(b, c) { this.gameClass = b; this.resources = c; this._loadCallbackBound = this._loadCallback.bind(this); for (var d = 0; d < this.resources.length; d++) this._unloaded.push(this.resources[d].path) }, load: function() { ig.system.clear("#000"); if (this.resources.length) { for (var b = 0; b < this.resources.length; b++) this.loadResource(this.resources[b]); this._intervalId = setInterval(this.draw.bind(this), 16) } else this.end() }, loadResource: function(b) { b.load(this._loadCallbackBound) }, end: function() { this.done || (this.done = !0, clearInterval(this._intervalId)) }, draw: function() {}, _loadCallback: function(b, c) { if (c) this._unloaded.erase(b); else throw "Failed to load resource: " + b; this.status = 1 - this._unloaded.length / this.resources.length; 0 == this._unloaded.length && setTimeout(this.end.bind(this), 250) } }) }); ig.baked = !0; ig.module("impact.timer").defines(function() { ig.Timer = ig.Class.extend({ target: 0, base: 0, last: 0, pausedAt: 0, init: function(b) { this.last = this.base = ig.Timer.time; this.target = b || 0 }, set: function(b) { this.target = b || 0; this.base = ig.Timer.time; this.pausedAt = 0 }, reset: function() { this.base = ig.Timer.time; this.pausedAt = 0 }, tick: function() { var b = ig.Timer.time - this.last; this.last = ig.Timer.time; return this.pausedAt ? 0 : b }, delta: function() { return (this.pausedAt || ig.Timer.time) - this.base - this.target }, pause: function() { this.pausedAt || (this.pausedAt = ig.Timer.time) }, unpause: function() { this.pausedAt && (this.base += ig.Timer.time - this.pausedAt, this.pausedAt = 0) } }); ig.Timer._last = 0; ig.Timer.time = Number.MIN_VALUE; ig.Timer.timeScale = 1; ig.Timer.maxStep = 0.05; ig.Timer.step = function() { var b = Date.now(); ig.Timer.time += Math.min((b - ig.Timer._last) / 1E3, ig.Timer.maxStep) * ig.Timer.timeScale; ig.Timer._last = b } }); ig.baked = !0; ig.module("impact.system").requires("impact.timer", "impact.image").defines(function() { ig.System = ig.Class.extend({ fps: 30, width: 320, height: 240, realWidth: 320, realHeight: 240, scale: 1, tick: 0, animationId: 0, newGameClass: null, running: !1, delegate: null, clock: null, canvas: null, context: null, init: function(b, c, d, e, f) { this.fps = c; this.clock = new ig.Timer; this.canvas = ig.$(b); this.resize(d, e, f); this.context = this.canvas.getContext("2d"); this.getDrawPos = ig.System.drawMode; 1 != this.scale && (ig.System.scaleMode = ig.System.SCALE.CRISP); ig.System.scaleMode(this.canvas, this.context) }, resize: function(b, c, d) { this.width = b; this.height = c; this.scale = d || this.scale; this.realWidth = this.width * this.scale; this.realHeight = this.height * this.scale; this.canvas.width = this.realWidth; this.canvas.height = this.realHeight }, setGame: function(b) { this.running ? this.newGameClass = b : this.setGameNow(b) }, setGameNow: function(b) { ig.game = new b; ig.system.setDelegate(ig.game) }, setDelegate: function(b) { if ("function" == typeof b.run) this.delegate = b, this.startRunLoop(); else throw "System.setDelegate: No run() function in object"; }, stopRunLoop: function() { ig.clearAnimation(this.animationId); this.running = !1 }, startRunLoop: function() { this.stopRunLoop(); this.animationId = ig.setAnimation(this.run.bind(this), this.canvas); this.running = !0 }, clear: function(b) { this.context.fillStyle = b; this.context.fillRect(0, 0, this.realWidth, this.realHeight) }, run: function() { ig.Timer.step(); this.tick = this.clock.tick(); this.delegate.run(); ig.input.clearPressed(); this.newGameClass && (this.setGameNow(this.newGameClass), this.newGameClass = null) }, getDrawPos: null }); ig.System.DRAW = { AUTHENTIC: function(b) { return Math.round(b) * this.scale }, SMOOTH: function(b) { return Math.round(b * this.scale) }, SUBPIXEL: function(b) { return b * this.scale } }; ig.System.drawMode = ig.System.DRAW.SMOOTH; ig.System.SCALE = { CRISP: function(b, c) { ig.setVendorAttribute(c, "imageSmoothingEnabled", !1); b.style.imageRendering = "-moz-crisp-edges"; b.style.imageRendering = "-o-crisp-edges"; b.style.imageRendering = "-webkit-optimize-contrast"; b.style.imageRendering = "crisp-edges"; b.style.msInterpolationMode = "nearest-neighbor" }, SMOOTH: function(b, c) { ig.setVendorAttribute(c, "imageSmoothingEnabled", !0); b.style.imageRendering = ""; b.style.msInterpolationMode = "" } }; ig.System.scaleMode = ig.System.SCALE.SMOOTH }); ig.baked = !0; ig.module("impact.input").defines(function() { ig.KEY = { MOUSE1: -1, MOUSE2: -3, MWHEEL_UP: -4, MWHEEL_DOWN: -5, BACKSPACE: 8, TAB: 9, ENTER: 13, PAUSE: 19, CAPS: 20, ESC: 27, SPACE: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, LEFT_ARROW: 37, UP_ARROW: 38, RIGHT_ARROW: 39, DOWN_ARROW: 40, INSERT: 45, DELETE: 46, _0: 48, _1: 49, _2: 50, _3: 51, _4: 52, _5: 53, _6: 54, _7: 55, _8: 56, _9: 57, A: 65, B: 66, C: 67, D: 68, E: 69, F: 70, G: 71, H: 72, I: 73, J: 74, K: 75, L: 76, M: 77, N: 78, O: 79, P: 80, Q: 81, R: 82, S: 83, T: 84, U: 85, V: 86, W: 87, X: 88, Y: 89, Z: 90, NUMPAD_0: 96, NUMPAD_1: 97, NUMPAD_2: 98, NUMPAD_3: 99, NUMPAD_4: 100, NUMPAD_5: 101, NUMPAD_6: 102, NUMPAD_7: 103, NUMPAD_8: 104, NUMPAD_9: 105, MULTIPLY: 106, ADD: 107, SUBSTRACT: 109, DECIMAL: 110, DIVIDE: 111, F1: 112, F2: 113, F3: 114, F4: 115, F5: 116, F6: 117, F7: 118, F8: 119, F9: 120, F10: 121, F11: 122, F12: 123, SHIFT: 16, CTRL: 17, ALT: 18, PLUS: 187, COMMA: 188, MINUS: 189, PERIOD: 190 }; ig.Input = ig.Class.extend({ bindings: {}, actions: {}, presses: {}, locks: {}, delayedKeyup: {}, isUsingMouse: !1, isUsingKeyboard: !1, isUsingAccelerometer: !1, mouse: { x: 0, y: 0 }, accel: { x: 0, y: 0, z: 0 }, initMouse: function() { if (!this.isUsingMouse) { this.isUsingMouse = !0; var b = this.mousewheel.bind(this); ig.system.canvas.addEventListener("mousewheel", b, !1); ig.system.canvas.addEventListener("DOMMouseScroll", b, !1); ig.system.canvas.addEventListener("contextmenu", this.contextmenu.bind(this), !1); ig.system.canvas.addEventListener("mousedown", this.keydown.bind(this), !1); ig.system.canvas.addEventListener("mouseup", this.keyup.bind(this), !1); ig.system.canvas.addEventListener("mousemove", this.mousemove.bind(this), !1); ig.ua.touchDevice && (ig.system.canvas.addEventListener("touchstart", this.keydown.bind(this), !1), ig.system.canvas.addEventListener("touchend", this.keyup.bind(this), !1), ig.system.canvas.addEventListener("touchmove", this.mousemove.bind(this), !1), ig.system.canvas.addEventListener("MSPointerDown", this.keydown.bind(this), !1), ig.system.canvas.addEventListener("MSPointerUp", this.keyup.bind(this), !1), ig.system.canvas.addEventListener("MSPointerMove", this.mousemove.bind(this), !1), ig.system.canvas.style.msTouchAction = "none") } }, initKeyboard: function() { this.isUsingKeyboard || (this.isUsingKeyboard = !0, window.addEventListener("keydown", this.keydown.bind(this), !1), window.addEventListener("keyup", this.keyup.bind(this), !1)) }, initAccelerometer: function() { this.isUsingAccelerometer || window.addEventListener("devicemotion", this.devicemotion.bind(this), !1) }, mousewheel: function(b) { var c = this.bindings[0 < (b.wheelDelta ? b.wheelDelta : -1 * b.detail) ? ig.KEY.MWHEEL_UP : ig.KEY.MWHEEL_DOWN]; c && (this.actions[c] = !0, this.presses[c] = !0, this.delayedKeyup[c] = !0, b.stopPropagation(), b.preventDefault()) }, mousemove: function(b) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth; ig.ua.mobile && (c = ig.system.realWidth); var c = ig.system.scale * (c / ig.system.realWidth), d = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect()); b = b.touches ? b.touches[0] : b; this.mouse.x = (b.clientX - d.left) / c; this.mouse.y = (b.clientY - d.top) / c }, contextmenu: function(b) { this.bindings[ig.KEY.MOUSE2] && (b.stopPropagation(), b.preventDefault()) }, keydown: function(b) { var c = b.target.tagName; if (!("INPUT" == c || "TEXTAREA" == c)) if (c = "keydown" == b.type ? b.keyCode : 2 == b.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1, ("touchstart" == b.type || "mousedown" == b.type) && this.mousemove(b), c = this.bindings[c]) this.actions[c] = !0, this.locks[c] || (this.presses[c] = !0, this.locks[c] = !0), b.stopPropagation(), b.preventDefault() }, keyup: function(b) { var c = b.target.tagName; if (!("INPUT" == c || "TEXTAREA" == c)) if (c = this.bindings["keyup" == b.type ? b.keyCode : 2 == b.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1]) this.delayedKeyup[c] = !0, b.stopPropagation(), b.preventDefault() }, devicemotion: function(b) { this.accel = b.accelerationIncludingGravity }, bind: function(b, c) { 0 > b ? this.initMouse() : 0 < b && this.initKeyboard(); this.bindings[b] = c }, bindTouch: function(b, c) { var d = ig.$(b), e = this; d.addEventListener("touchstart", function(b) { e.touchStart(b, c) }, !1); d.addEventListener("touchend", function(b) { e.touchEnd(b, c) }, !1); d.addEventListener("MSPointerDown", function(b) { e.touchStart(b, c) }, !1); d.addEventListener("MSPointerUp", function(b) { e.touchEnd(b, c) }, !1) }, unbind: function(b) { this.delayedKeyup[this.bindings[b]] = !0; this.bindings[b] = null }, unbindAll: function() { this.bindings = {}; this.actions = {}; this.presses = {}; this.locks = {}; this.delayedKeyup = {} }, state: function(b) { return this.actions[b] }, pressed: function(b) { return this.presses[b] }, released: function(b) { return !!this.delayedKeyup[b] }, clearPressed: function() { for (var b in this.delayedKeyup) this.actions[b] = !1, this.locks[b] = !1; this.delayedKeyup = {}; this.presses = {} }, touchStart: function(b, c) { this.actions[c] = !0; this.presses[c] = !0; b.stopPropagation(); b.preventDefault(); return !1 }, touchEnd: function(b, c) { this.delayedKeyup[c] = !0; b.stopPropagation(); b.preventDefault(); return !1 } }) }); ig.baked = !0; ig.module("impact.impact").requires("dom.ready", "impact.loader", "impact.system", "impact.input", "impact.sound").defines(function() { ig.main = function(b, c, d, e, f, j, q) { ig.system = new ig.System(b, d, e, f, j || 1); ig.input = new ig.Input; ig.soundManager = new ig.SoundManager; ig.music = new ig.Music; ig.ready = !0; (new(q || ig.Loader)(c, ig.resources)).load() } }); ig.baked = !0; ig.module("impact.animation").requires("impact.timer", "impact.image").defines(function() { ig.AnimationSheet = ig.Class.extend({ width: 8, height: 8, image: null, init: function(b, c, d) { this.width = c; this.height = d; this.image = new ig.Image(b) } }); ig.Animation = ig.Class.extend({ sheet: null, timer: null, sequence: [], flip: { x: !1, y: !1 }, pivot: { x: 0, y: 0 }, frame: 0, tile: 0, loopCount: 0, alpha: 1, angle: 0, init: function(b, c, d, e) { this.sheet = b; this.pivot = { x: b.width / 2, y: b.height / 2 }; this.timer = new ig.Timer; this.frameTime = c; this.sequence = d; this.stop = !!e; this.tile = this.sequence[0] }, rewind: function() { this.timer.set(); this.frame = this.loopCount = 0; this.tile = this.sequence[0]; return this }, gotoFrame: function(b) { this.timer.set(this.frameTime * -b - 1E-4); this.update() }, gotoRandomFrame: function() { this.gotoFrame(Math.floor(Math.random() * this.sequence.length)) }, update: function() { var b = Math.floor(this.timer.delta() / this.frameTime); this.loopCount = Math.floor(b / this.sequence.length); this.frame = this.stop && 0 < this.loopCount ? this.sequence.length - 1 : b % this.sequence.length; this.tile = this.sequence[this.frame] }, draw: function(b, c) { var d = Math.max(this.sheet.width, this.sheet.height); b > ig.system.width || c > ig.system.height || (0 > b + d || 0 > c + d) || (1 != this.alpha && (ig.system.context.globalAlpha = this.alpha), 0 == this.angle ? this.sheet.image.drawTile(b, c, this.tile, this.sheet.width, this.sheet.height, this.flip.x, this.flip.y) : (ig.system.context.save(), ig.system.context.translate(ig.system.getDrawPos(b + this.pivot.x), ig.system.getDrawPos(c + this.pivot.y)), ig.system.context.rotate(this.angle), this.sheet.image.drawTile(-this.pivot.x, -this.pivot.y, this.tile, this.sheet.width, this.sheet.height, this.flip.x, this.flip.y), ig.system.context.restore()), 1 != this.alpha && (ig.system.context.globalAlpha = 1)) } }) }); ig.baked = !0; ig.module("impact.entity").requires("impact.animation", "impact.impact").defines(function() { ig.Entity = ig.Class.extend({ id: 0, settings: {}, size: { x: 16, y: 16 }, offset: { x: 0, y: 0 }, pos: { x: 0, y: 0 }, last: { x: 0, y: 0 }, vel: { x: 0, y: 0 }, accel: { x: 0, y: 0 }, friction: { x: 0, y: 0 }, maxVel: { x: 100, y: 100 }, zIndex: 0, gravityFactor: 1, standing: !1, bounciness: 0, minBounceVelocity: 40, anims: {}, animSheet: null, currentAnim: null, health: 10, type: 0, checkAgainst: 0, collides: 0, _killed: !1, slopeStanding: { min: (44).toRad(), max: (136).toRad() }, init: function(b, c, d) { this.id = ++ig.Entity._lastId; this.pos.x = this.last.x = b; this.pos.y = this.last.y = c; ig.merge(this, d) }, reset: function(b, c, d) { var e = this.constructor.prototype; this.pos.x = b; this.pos.y = c; this.last.x = b; this.last.y = c; this.vel.x = e.vel.x; this.vel.y = e.vel.y; this.accel.x = e.accel.x; this.accel.y = e.accel.y; this.health = e.health; this._killed = e._killed; this.standing = e.standing; this.type = e.type; this.checkAgainst = e.checkAgainst; this.collides = e.collides; ig.merge(this, d) }, addAnim: function(b, c, d, e) { if (!this.animSheet) throw "No animSheet to add the animation " + b + " to."; c = new ig.Animation(this.animSheet, c, d, e); this.anims[b] = c; this.currentAnim || (this.currentAnim = c); return c }, update: function() { this.last.x = this.pos.x; this.last.y = this.pos.y; this.vel.y += ig.game.gravity * ig.system.tick * this.gravityFactor; this.vel.x = this.getNewVelocity(this.vel.x, this.accel.x, this.friction.x, this.maxVel.x); this.vel.y = this.getNewVelocity(this.vel.y, this.accel.y, this.friction.y, this.maxVel.y); var b = ig.game.collisionMap.trace(this.pos.x, this.pos.y, this.vel.x * ig.system.tick, this.vel.y * ig.system.tick, this.size.x, this.size.y); this.handleMovementTrace(b); this.currentAnim && this.currentAnim.update() }, getNewVelocity: function(b, c, d, e) { return c ? (b + c * ig.system.tick).limit(-e, e) : d ? (c = d * ig.system.tick, 0 < b - c ? b - c : 0 > b + c ? b + c : 0) : b.limit(-e, e) }, handleMovementTrace: function(b) { this.standing = !1; b.collision.y && (0 < this.bounciness && Math.abs(this.vel.y) > this.minBounceVelocity ? this.vel.y *= -this.bounciness : (0 < this.vel.y && (this.standing = !0), this.vel.y = 0)); b.collision.x && (this.vel.x = 0 < this.bounciness && Math.abs(this.vel.x) > this.minBounceVelocity ? this.vel.x * -this.bounciness : 0); if (b.collision.slope) { var c = b.collision.slope; if (0 < this.bounciness) { var d = this.vel.x * c.nx + this.vel.y * c.ny; this.vel.x = (this.vel.x - 2 * c.nx * d) * this.bounciness; this.vel.y = (this.vel.y - 2 * c.ny * d) * this.bounciness } else d = (this.vel.x * c.x + this.vel.y * c.y) / (c.x * c.x + c.y * c.y), this.vel.x = c.x * d, this.vel.y = c.y * d, c = Math.atan2(c.x, c.y), c > this.slopeStanding.min && c < this.slopeStanding.max && (this.standing = !0) } this.pos = b.pos }, draw: function() { this.currentAnim && this.currentAnim.draw(this.pos.x - this.offset.x - ig.game._rscreen.x, this.pos.y - this.offset.y - ig.game._rscreen.y) }, kill: function() { ig.game.removeEntity(this) }, receiveDamage: function(b) { this.health -= b; 0 >= this.health && this.kill() }, touches: function(b) { return !(this.pos.x >= b.pos.x + b.size.x || this.pos.x + this.size.x <= b.pos.x || this.pos.y >= b.pos.y + b.size.y || this.pos.y + this.size.y <= b.pos.y) }, distanceTo: function(b) { var c = this.pos.x + this.size.x / 2 - (b.pos.x + b.size.x / 2); b = this.pos.y + this.size.y / 2 - (b.pos.y + b.size.y / 2); return Math.sqrt(c * c + b * b) }, angleTo: function(b) { return Math.atan2(b.pos.y + b.size.y / 2 - (this.pos.y + this.size.y / 2), b.pos.x + b.size.x / 2 - (this.pos.x + this.size.x / 2)) }, check: function() {}, collideWith: function() {}, ready: function() {}, erase: function() {} }); ig.Entity._lastId = 0; ig.Entity.COLLIDES = { NEVER: 0, LITE: 1, PASSIVE: 2, ACTIVE: 4, FIXED: 8 }; ig.Entity.TYPE = { NONE: 0, A: 1, B: 2, BOTH: 3 }; ig.Entity.checkPair = function(b, c) { b.checkAgainst & c.type && b.check(c); c.checkAgainst & b.type && c.check(b); b.collides && c.collides && b.collides + c.collides > ig.Entity.COLLIDES.ACTIVE && ig.Entity.solveCollision(b, c) }; ig.Entity.solveCollision = function(b, c) { var d = null; if (b.collides == ig.Entity.COLLIDES.LITE || c.collides == ig.Entity.COLLIDES.FIXED) d = b; else if (c.collides == ig.Entity.COLLIDES.LITE || b.collides == ig.Entity.COLLIDES.FIXED) d = c; b.last.x + b.size.x > c.last.x && b.last.x < c.last.x + c.size.x ? (b.last.y < c.last.y ? ig.Entity.seperateOnYAxis(b, c, d) : ig.Entity.seperateOnYAxis(c, b, d), b.collideWith(c, "y"), c.collideWith(b, "y")) : b.last.y + b.size.y > c.last.y && b.last.y < c.last.y + c.size.y && (b.last.x < c.last.x ? ig.Entity.seperateOnXAxis(b, c, d) : ig.Entity.seperateOnXAxis(c, b, d), b.collideWith(c, "x"), c.collideWith(b, "x")) }; ig.Entity.seperateOnXAxis = function(b, c, d) { var e = b.pos.x + b.size.x - c.pos.x; d ? (d.vel.x = -d.vel.x * d.bounciness + (b === d ? c : b).vel.x, c = ig.game.collisionMap.trace(d.pos.x, d.pos.y, d == b ? -e : e, 0, d.size.x, d.size.y), d.pos.x = c.pos.x) : (d = (b.vel.x - c.vel.x) / 2, b.vel.x = -d, c.vel.x = d, d = ig.game.collisionMap.trace(b.pos.x, b.pos.y, -e / 2, 0, b.size.x, b.size.y), b.pos.x = Math.floor(d.pos.x), b = ig.game.collisionMap.trace(c.pos.x, c.pos.y, e / 2, 0, c.size.x, c.size.y), c.pos.x = Math.ceil(b.pos.x)) }; ig.Entity.seperateOnYAxis = function(b, c, d) { var e = b.pos.y + b.size.y - c.pos.y; if (d) { c = b === d ? c : b; d.vel.y = -d.vel.y * d.bounciness + c.vel.y; var f = 0; d == b && Math.abs(d.vel.y - c.vel.y) < d.minBounceVelocity && (d.standing = !0, f = c.vel.x * ig.system.tick); b = ig.game.collisionMap.trace(d.pos.x, d.pos.y, f, d == b ? -e : e, d.size.x, d.size.y); d.pos.y = b.pos.y; d.pos.x = b.pos.x } else ig.game.gravity && (c.standing || 0 < b.vel.y) ? (d = ig.game.collisionMap.trace(b.pos.x, b.pos.y, 0, -(b.pos.y + b.size.y - c.pos.y), b.size.x, b.size.y), b.pos.y = d.pos.y, 0 < b.bounciness && b.vel.y > b.minBounceVelocity ? b.vel.y *= -b.bounciness : (b.standing = !0, b.vel.y = 0)) : (d = (b.vel.y - c.vel.y) / 2, b.vel.y = -d, c.vel.y = d, f = c.vel.x * ig.system.tick, d = ig.game.collisionMap.trace(b.pos.x, b.pos.y, f, -e / 2, b.size.x, b.size.y), b.pos.y = d.pos.y, b = ig.game.collisionMap.trace(c.pos.x, c.pos.y, 0, e / 2, c.size.x, c.size.y), c.pos.y = b.pos.y) } }); ig.baked = !0; ig.module("impact.map").defines(function() { ig.Map = ig.Class.extend({ tilesize: 8, width: 1, height: 1, data: [ [] ], name: null, init: function(b, c) { this.tilesize = b; this.data = c; this.height = c.length; this.width = c[0].length; this.pxWidth = this.width * this.tilesize; this.pxHeight = this.height * this.tilesize }, getTile: function(b, c) { var d = Math.floor(b / this.tilesize), e = Math.floor(c / this.tilesize); return 0 <= d && d < this.width && 0 <= e && e < this.height ? this.data[e][d] : 0 }, setTile: function(b, c, d) { b = Math.floor(b / this.tilesize); c = Math.floor(c / this.tilesize); 0 <= b && b < this.width && 0 <= c && c < this.height && (this.data[c][b] = d) } }) }); ig.baked = !0; ig.module("impact.collision-map").requires("impact.map").defines(function() { ig.CollisionMap = ig.Map.extend({ lastSlope: 1, tiledef: null, init: function(b, c, f) { this.parent(b, c); this.tiledef = f || ig.CollisionMap.defaultTileDef; for (var j in this.tiledef) j | 0 > this.lastSlope && (this.lastSlope = j | 0) }, trace: function(b, c, f, j, q, n) { var g = { collision: { x: !1, y: !1, slope: !1 }, pos: { x: b, y: c }, tile: { x: 0, y: 0 } }, y = Math.ceil(Math.max(Math.abs(f), Math.abs(j)) / this.tilesize); if (1 < y) for (var A = f / y, z = j / y, B = 0; B < y && (A || z) && !(this._traceStep(g, b, c, A, z, q, n, f, j, B), b = g.pos.x, c = g.pos.y, g.collision.x && (f = A = 0), g.collision.y && (j = z = 0), g.collision.slope); B++); else this._traceStep(g, b, c, f, j, q, n, f, j, 0); return g }, _traceStep: function(b, c, f, j, q, n, g, y, A, z) { b.pos.x += j; b.pos.y += q; var B = 0; if (j) { var C = 0 < j ? n : 0, G = 0 > j ? this.tilesize : 0, B = Math.max(Math.floor(f / this.tilesize), 0), I = Math.min(Math.ceil((f + g) / this.tilesize), this.height); j = Math.floor((b.pos.x + C) / this.tilesize); var u = Math.floor((c + C) / this.tilesize); if (0 < z || j == u || 0 > u || u >= this.width) u = -1; if (0 <= j && j < this.width) for (var L = B; L < I && !(-1 != u && (B = this.data[L][u], 1 < B && B <= this.lastSlope && this._checkTileDef(b, B, c, f, y, A, n, g, u, L))); L++) if (B = this.data[L][j], 1 == B || B > this.lastSlope || 1 < B && this._checkTileDef(b, B, c, f, y, A, n, g, j, L)) { if (1 < B && B <= this.lastSlope && b.collision.slope) break; b.collision.x = !0; b.tile.x = B; c = b.pos.x = j * this.tilesize - C + G; y = 0; break } } if (q) { C = 0 < q ? g : 0; q = 0 > q ? this.tilesize : 0; B = Math.max(Math.floor(b.pos.x / this.tilesize), 0); G = Math.min(Math.ceil((b.pos.x + n) / this.tilesize), this.width); L = Math.floor((b.pos.y + C) / this.tilesize); I = Math.floor((f + C) / this.tilesize); if (0 < z || L == I || 0 > I || I >= this.height) I = -1; if (0 <= L && L < this.height) for (j = B; j < G && !(-1 != I && (B = this.data[I][j], 1 < B && B <= this.lastSlope && this._checkTileDef(b, B, c, f, y, A, n, g, j, I))); j++) if (B = this.data[L][j], 1 == B || B > this.lastSlope || 1 < B && this._checkTileDef(b, B, c, f, y, A, n, g, j, L)) { if (1 < B && B <= this.lastSlope && b.collision.slope) break; b.collision.y = !0; b.tile.y = B; b.pos.y = L * this.tilesize - C + q; break } } }, _checkTileDef: function(b, c, f, j, q, n, g, y, A, z) { var B = this.tiledef[c]; if (!B) return !1; c = (B[2] - B[0]) * this.tilesize; var C = (B[3] - B[1]) * this.tilesize, G = B[4]; g = f + q + (0 > C ? g : 0) - (A + B[0]) * this.tilesize; y = j + n + (0 < c ? y : 0) - (z + B[1]) * this.tilesize; if (0 < c * y - C * g) { if (0 > q * -C + n * c) return G; A = Math.sqrt(c * c + C * C); z = C / A; A = -c / A; var I = g * z + y * A, B = z * I, I = A * I; if (B * B + I * I >= q * q + n * n) return G || 0.5 > c * (y - n) - C * (g - q); b.pos.x = f + q - B; b.pos.y = j + n - I; b.collision.slope = { x: c, y: C, nx: z, ny: A }; return !0 } return !1 } }); var b = 1 / 3, c = 2 / 3; ig.CollisionMap.defaultTileDef = { 5: [0, 1, 1, c, !0], 6: [0, c, 1, b, !0], 7: [0, b, 1, 0, !0], 3: [0, 1, 1, 0.5, !0], 4: [0, 0.5, 1, 0, !0], 2: [0, 1, 1, 0, !0], 10: [0.5, 1, 1, 0, !0], 21: [0, 1, 0.5, 0, !0], 32: [c, 1, 1, 0, !0], 43: [b, 1, c, 0, !0], 54: [0, 1, b, 0, !0], 27: [0, 0, 1, b, !0], 28: [0, b, 1, c, !0], 29: [0, c, 1, 1, !0], 25: [0, 0, 1, 0.5, !0], 26: [0, 0.5, 1, 1, !0], 24: [0, 0, 1, 1, !0], 11: [0, 0, 0.5, 1, !0], 22: [0.5, 0, 1, 1, !0], 33: [0, 0, b, 1, !0], 44: [b, 0, c, 1, !0], 55: [c, 0, 1, 1, !0], 16: [1, b, 0, 0, !0], 17: [1, c, 0, b, !0], 18: [1, 1, 0, c, !0], 14: [1, 0.5, 0, 0, !0], 15: [1, 1, 0, 0.5, !0], 13: [1, 1, 0, 0, !0], 8: [0.5, 1, 0, 0, !0], 19: [1, 1, 0.5, 0, !0], 30: [b, 1, 0, 0, !0], 41: [c, 1, b, 0, !0], 52: [1, 1, c, 0, !0], 38: [1, c, 0, 1, !0], 39: [1, b, 0, c, !0], 40: [1, 0, 0, b, !0], 36: [1, 0.5, 0, 1, !0], 37: [1, 0, 0, 0.5, !0], 35: [1, 0, 0, 1, !0], 9: [1, 0, 0.5, 1, !0], 20: [0.5, 0, 0, 1, !0], 31: [1, 0, c, 1, !0], 42: [c, 0, b, 1, !0], 53: [b, 0, 0, 1, !0], 12: [0, 0, 1, 0, !1], 23: [1, 1, 0, 1, !1], 34: [1, 0, 1, 1, !1], 45: [0, 1, 0, 0, !1] }; ig.CollisionMap.staticNoCollision = { trace: function(b, c, f, j) { return { collision: { x: !1, y: !1, slope: !1 }, pos: { x: b + f, y: c + j }, tile: { x: 0, y: 0 } } } } }); ig.baked = !0; ig.module("impact.background-map").requires("impact.map", "impact.image").defines(function() { ig.BackgroundMap = ig.Map.extend({ tiles: null, scroll: { x: 0, y: 0 }, distance: 1, repeat: !1, tilesetName: "", foreground: !1, enabled: !0, preRender: !1, preRenderedChunks: null, chunkSize: 512, debugChunks: !1, anims: {}, init: function(b, c, d) { this.parent(b, c); this.setTileset(d) }, setTileset: function(b) { this.tilesetName = b instanceof ig.Image ? b.path : b; this.tiles = new ig.Image(this.tilesetName); this.preRenderedChunks = null }, setScreenPos: function(b, c) { this.scroll.x = b / this.distance; this.scroll.y = c / this.distance }, preRenderMapToChunks: function() { var b = this.width * this.tilesize * ig.system.scale, c = this.height * this.tilesize * ig.system.scale; this.chunkSize = Math.min(Math.max(b, c), this.chunkSize); var d = Math.ceil(b / this.chunkSize), e = Math.ceil(c / this.chunkSize); this.preRenderedChunks = []; for (var f = 0; f < e; f++) { this.preRenderedChunks[f] = []; for (var j = 0; j < d; j++) this.preRenderedChunks[f][j] = this.preRenderChunk(j, f, j == d - 1 ? b - j * this.chunkSize : this.chunkSize, f == e - 1 ? c - f * this.chunkSize : this.chunkSize) } }, preRenderChunk: function(b, c, d, e) { var f = d / this.tilesize / ig.system.scale + 1, j = e / this.tilesize / ig.system.scale + 1, q = b * this.chunkSize / ig.system.scale % this.tilesize, n = c * this.chunkSize / ig.system.scale % this.tilesize; b = Math.floor(b * this.chunkSize / this.tilesize / ig.system.scale); c = Math.floor(c * this.chunkSize / this.tilesize / ig.system.scale); var g = ig.$new("canvas"); g.width = d; g.height = e; g.retinaResolutionEnabled = !1; e = g.getContext("2d"); ig.System.scaleMode(g, e); d = ig.system.context; ig.system.context = e; for (e = 0; e < f; e++) for (var y = 0; y < j; y++) if (e + b < this.width && y + c < this.height) { var A = this.data[y + c][e + b]; A && this.tiles.drawTile(e * this.tilesize - q, y * this.tilesize - n, A - 1, this.tilesize) } ig.system.context = d; return g }, draw: function() { this.tiles.loaded && this.enabled && (this.preRender ? this.drawPreRendered() : this.drawTiled()) }, drawPreRendered: function() { this.preRenderedChunks || this.preRenderMapToChunks(); var b = ig.system.getDrawPos(this.scroll.x), c = ig.system.getDrawPos(this.scroll.y); if (this.repeat) var d = this.width * this.tilesize * ig.system.scale, b = (b % d + d) % d, d = this.height * this.tilesize * ig.system.scale, c = (c % d + d) % d; var d = Math.max(Math.floor(b / this.chunkSize), 0), e = Math.max(Math.floor(c / this.chunkSize), 0), f = Math.ceil((b + ig.system.realWidth) / this.chunkSize), j = Math.ceil((c + ig.system.realHeight) / this.chunkSize), q = this.preRenderedChunks[0].length, n = this.preRenderedChunks.length; this.repeat || (f = Math.min(f, q), j = Math.min(j, n)); for (var g = 0; e < j; e++) { for (var y = 0, A = d; A < f; A++) { var z = this.preRenderedChunks[e % n][A % q], B = -b + A * this.chunkSize - y, C = -c + e * this.chunkSize - g; ig.system.context.drawImage(z, B, C); ig.Image.drawCount++; this.debugChunks && (ig.system.context.strokeStyle = "#f0f", ig.system.context.strokeRect(B, C, this.chunkSize, this.chunkSize)); this.repeat && z.width < this.chunkSize && B + z.width < ig.system.realWidth && (y += this.chunkSize - z.width, f++) } this.repeat && z.height < this.chunkSize && C + z.height < ig.system.realHeight && (g += this.chunkSize - z.height, j++) } }, drawTiled: function() { for (var b = 0, c = null, d = (this.scroll.x / this.tilesize).toInt(), e = (this.scroll.y / this.tilesize).toInt(), f = this.scroll.x % this.tilesize, j = this.scroll.y % this.tilesize, q = -f - this.tilesize, f = ig.system.width + this.tilesize - f, n = ig.system.height + this.tilesize - j, g = -1, j = -j - this.tilesize; j < n; g++, j += this.tilesize) { var y = g + e; if (y >= this.height || 0 > y) { if (!this.repeat) continue; y = (y % this.height + this.height) % this.height } for (var A = -1, z = q; z < f; A++, z += this.tilesize) { b = A + d; if (b >= this.width || 0 > b) { if (!this.repeat) continue; b = (b % this.width + this.width) % this.width } if (b = this.data[y][b])(c = this.anims[b - 1]) ? c.draw(z, j) : this.tiles.drawTile(z, j, b - 1, this.tilesize) } } } }) }); ig.baked = !0; ig.module("impact.game").requires("impact.impact", "impact.entity", "impact.collision-map", "impact.background-map").defines(function() { ig.Game = ig.Class.extend({ clearColor: "#000000", gravity: 0, screen: { x: 0, y: 0 }, _rscreen: { x: 0, y: 0 }, entities: [], namedEntities: {}, collisionMap: ig.CollisionMap.staticNoCollision, backgroundMaps: [], backgroundAnims: {}, autoSort: !1, sortBy: null, cellSize: 64, _deferredKill: [], _levelToLoad: null, _doSortEntities: !1, staticInstantiate: function() { this.sortBy = this.sortBy || ig.Game.SORT.Z_INDEX; ig.game = this; return null }, loadLevel: function(b) { this.screen = { x: 0, y: 0 }; this.entities = []; this.namedEntities = {}; for (var c = 0; c < b.entities.length; c++) { var d = b.entities[c]; this.spawnEntity(d.type, d.x, d.y, d.settings) } this.sortEntities(); this.collisionMap = ig.CollisionMap.staticNoCollision; this.backgroundMaps = []; for (c = 0; c < b.layer.length; c++) if (d = b.layer[c], "collision" == d.name) this.collisionMap = new ig.CollisionMap(d.tilesize, d.data); else { var e = new ig.BackgroundMap(d.tilesize, d.data, d.tilesetName); e.anims = this.backgroundAnims[d.tilesetName] || {}; e.repeat = d.repeat; e.distance = d.distance; e.foreground = !!d.foreground; e.preRender = !!d.preRender; e.name = d.name; this.backgroundMaps.push(e) } for (c = 0; c < this.entities.length; c++) this.entities[c].ready() }, loadLevelDeferred: function(b) { this._levelToLoad = b }, getMapByName: function(b) { if ("collision" == b) return this.collisionMap; for (var c = 0; c < this.backgroundMaps.length; c++) if (this.backgroundMaps[c].name == b) return this.backgroundMaps[c]; return null }, getEntityByName: function(b) { return this.namedEntities[b] }, getEntitiesByType: function(b) { b = "string" === typeof b ? ig.global[b] : b; for (var c = [], d = 0; d < this.entities.length; d++) { var e = this.entities[d]; e instanceof b && !e._killed && c.push(e) } return c }, spawnEntity: function(b, c, d, e) { var f = "string" === typeof b ? ig.global[b] : b; if (!f) throw "Can't spawn entity of type " + b; b = new f(c, d, e || {}); this.entities.push(b); b.name && (this.namedEntities[b.name] = b); return b }, sortEntities: function() { this.entities.sort(this.sortBy) }, sortEntitiesDeferred: function() { this._doSortEntities = !0 }, removeEntity: function(b) { b.name && delete this.namedEntities[b.name]; b._killed = !0; b.type = ig.Entity.TYPE.NONE; b.checkAgainst = ig.Entity.TYPE.NONE; b.collides = ig.Entity.COLLIDES.NEVER; this._deferredKill.push(b) }, run: function() { this.update(); this.draw() }, update: function() { this._levelToLoad && (this.loadLevel(this._levelToLoad), this._levelToLoad = null); this.updateEntities(); this.checkEntities(); for (var b = 0; b < this._deferredKill.length; b++) this._deferredKill[b].erase(), this.entities.erase(this._deferredKill[b]); this._deferredKill = []; if (this._doSortEntities || this.autoSort) this.sortEntities(), this._doSortEntities = !1; for (var c in this.backgroundAnims) { var b = this.backgroundAnims[c], d; for (d in b) b[d].update() } }, updateEntities: function() { for (var b = 0; b < this.entities.length; b++) { var c = this.entities[b]; c._killed || c.update() } }, draw: function() { this.clearColor && ig.system.clear(this.clearColor); this._rscreen.x = ig.system.getDrawPos(this.screen.x) / ig.system.scale; this._rscreen.y = ig.system.getDrawPos(this.screen.y) / ig.system.scale; var b; for (b = 0; b < this.backgroundMaps.length; b++) { var c = this.backgroundMaps[b]; if (c.foreground) break; c.setScreenPos(this.screen.x, this.screen.y); c.draw() } this.drawEntities(); for (b; b < this.backgroundMaps.length; b++) c = this.backgroundMaps[b], c.setScreenPos(this.screen.x, this.screen.y), c.draw() }, drawEntities: function() { for (var b = 0; b < this.entities.length; b++) this.entities[b].draw() }, checkEntities: function() { for (var b = {}, c = 0; c < this.entities.length; c++) { var d = this.entities[c]; if (!(d.type == ig.Entity.TYPE.NONE && d.checkAgainst == ig.Entity.TYPE.NONE && d.collides == ig.Entity.COLLIDES.NEVER)) for (var e = {}, f = Math.floor(d.pos.y / this.cellSize), j = Math.floor((d.pos.x + d.size.x) / this.cellSize) + 1, q = Math.floor((d.pos.y + d.size.y) / this.cellSize) + 1, n = Math.floor(d.pos.x / this.cellSize); n < j; n++) for (var g = f; g < q; g++) if (b[n]) if (b[n][g]) { for (var y = b[n][g], A = 0; A < y.length; A++) d.touches(y[A]) && !e[y[A].id] && (e[y[A].id] = !0, ig.Entity.checkPair(d, y[A])); y.push(d) } else b[n][g] = [d]; else b[n] = {}, b[n][g] = [d] } } }); ig.Game.SORT = { Z_INDEX: function(b, c) { return b.zIndex - c.zIndex }, POS_X: function(b, c) { return b.pos.x + b.size.x - (c.pos.x + c.size.x) }, POS_Y: function(b, c) { return b.pos.y + b.size.y - (c.pos.y + c.size.y) } } }); ig.baked = !0; ig.module("impact.debug.menu").requires("dom.ready", "impact.system").defines(function() { ig.System.inject({ run: function() { ig.debug.beforeRun(); this.parent(); ig.debug.afterRun() }, setGameNow: function(b) { this.parent(b); ig.debug.ready() } }); ig.Debug = ig.Class.extend({ options: {}, panels: {}, numbers: {}, container: null, panelMenu: null, activePanel: null, debugTime: 0, debugTickAvg: 0.016, debugRealTime: Date.now(), init: function() { var b = ig.$new("link"); b.rel = "stylesheet"; b.type = "text/css"; b.href = ig.prefix + "game.css"; ig.$("body")[0].appendChild(b); this.container = ig.$new("div"); this.container.className = "ig_debug"; ig.$("body")[0].appendChild(this.container); this.panelMenu = ig.$new("div"); this.panelMenu.innerHTML = '
Impact.Debug:
'; this.panelMenu.className = "ig_debug_panel_menu"; this.container.appendChild(this.panelMenu); this.numberContainer = ig.$new("div"); this.numberContainer.className = "ig_debug_stats"; this.panelMenu.appendChild(this.numberContainer); window.console && window.console.log && window.console.assert && (ig.log = console.log.bind ? console.log.bind(console) : console.log, ig.assert = console.assert.bind ? console.assert.bind(console) : console.assert); ig.show = this.showNumber.bind(this) }, addNumber: function(b) { var c = ig.$new("span"); this.numberContainer.appendChild(c); this.numberContainer.appendChild(document.createTextNode(b)); this.numbers[b] = c }, showNumber: function(b, c, d) { this.numbers[b] || this.addNumber(b, d); this.numbers[b].textContent = c }, addPanel: function(b) { var c = new b.type(b.name, b.label); if (b.options) for (var d = 0; d < b.options.length; d++) { var e = b.options[d]; c.addOption(new ig.DebugOption(e.name, e.object, e.property)) } this.panels[c.name] = c; c.container.style.display = "none"; this.container.appendChild(c.container); b = ig.$new("div"); b.className = "ig_debug_menu_item"; b.textContent = c.label; b.addEventListener("click", function() { this.togglePanel(c) }.bind(this), !1); c.menuItem = b; e = !1; for (d = 1; d < this.panelMenu.childNodes.length; d++) { var f = this.panelMenu.childNodes[d]; if (f.textContent > c.label) { this.panelMenu.insertBefore(b, f); e = !0; break } } e || this.panelMenu.appendChild(b) }, showPanel: function(b) { this.togglePanel(this.panels[b]) }, togglePanel: function(b) { b != this.activePanel && this.activePanel && (this.activePanel.toggle(!1), this.activePanel.menuItem.className = "ig_debug_menu_item", this.activePanel = null); var c = "block" != b.container.style.display; b.toggle(c); b.menuItem.className = "ig_debug_menu_item" + (c ? " active" : ""); c && (this.activePanel = b) }, ready: function() { for (var b in this.panels) this.panels[b].ready() }, beforeRun: function() { var b = Date.now(); this.debugTickAvg = 0.8 * this.debugTickAvg + 0.2 * (b - this.debugRealTime); this.debugRealTime = b; this.activePanel && this.activePanel.beforeRun() }, afterRun: function() { var b = Date.now() - this.debugRealTime; this.debugTime = 0.8 * this.debugTime + 0.2 * b; this.activePanel && this.activePanel.afterRun(); this.showNumber("ms", this.debugTime.toFixed(2)); this.showNumber("fps", Math.round(1E3 / this.debugTickAvg)); this.showNumber("draws", ig.Image.drawCount); ig.game && ig.game.entities && this.showNumber("entities", ig.game.entities.length); ig.Image.drawCount = 0 } }); ig.DebugPanel = ig.Class.extend({ active: !1, container: null, options: [], panels: [], label: "", name: "", init: function(b, c) { this.name = b; this.label = c; this.container = ig.$new("div"); this.container.className = "ig_debug_panel " + this.name }, toggle: function(b) { this.active = b; this.container.style.display = b ? "block" : "none" }, addPanel: function(b) { this.panels.push(b); this.container.appendChild(b.container) }, addOption: function(b) { this.options.push(b); this.container.appendChild(b.container) }, ready: function() {}, beforeRun: function() {}, afterRun: function() {} }); ig.DebugOption = ig.Class.extend({ name: "", labelName: "", className: "ig_debug_option", label: null, mark: null, container: null, active: !1, colors: { enabled: "#fff", disabled: "#444" }, init: function(b, c, d) { this.name = b; this.object = c; this.property = d; this.active = this.object[this.property]; this.container = ig.$new("div"); this.container.className = "ig_debug_option"; this.label = ig.$new("span"); this.label.className = "ig_debug_label"; this.label.textContent = this.name; this.mark = ig.$new("span"); this.mark.className = "ig_debug_label_mark"; this.container.appendChild(this.mark); this.container.appendChild(this.label); this.container.addEventListener("click", this.click.bind(this), !1); this.setLabel() }, setLabel: function() { this.mark.style.backgroundColor = this.active ? this.colors.enabled : this.colors.disabled }, click: function(b) { this.active = !this.active; this.object[this.property] = this.active; this.setLabel(); b.stopPropagation(); b.preventDefault(); return !1 } }); ig.debug = new ig.Debug }); ig.baked = !0; ig.module("impact.debug.entities-panel").requires("impact.debug.menu", "impact.entity").defines(function() { ig.Entity.inject({ colors: { names: "#fff", velocities: "#0f0", boxes: "#f00" }, draw: function() { this.parent(); ig.Entity._debugShowBoxes && (ig.system.context.strokeStyle = this.colors.boxes, ig.system.context.lineWidth = 1, ig.system.context.strokeRect(ig.system.getDrawPos(this.pos.x.round() - ig.game.screen.x) - 0.5, ig.system.getDrawPos(this.pos.y.round() - ig.game.screen.y) - 0.5, this.size.x * ig.system.scale, this.size.y * ig.system.scale)); if (ig.Entity._debugShowVelocities) { var b = this.pos.x + this.size.x / 2, c = this.pos.y + this.size.y / 2; this._debugDrawLine(this.colors.velocities, b, c, b + this.vel.x, c + this.vel.y) } if (ig.Entity._debugShowNames && (this.name && (ig.system.context.fillStyle = this.colors.names, ig.system.context.fillText(this.name, ig.system.getDrawPos(this.pos.x - ig.game.screen.x), ig.system.getDrawPos(this.pos.y - ig.game.screen.y))), "object" == typeof this.target)) for (var d in this.target)(b = ig.game.getEntityByName(this.target[d])) && this._debugDrawLine(this.colors.names, this.pos.x + this.size.x / 2, this.pos.y + this.size.y / 2, b.pos.x + b.size.x / 2, b.pos.y + b.size.y / 2) }, _debugDrawLine: function(b, c, d, e, f) { ig.system.context.strokeStyle = b; ig.system.context.lineWidth = 1; ig.system.context.beginPath(); ig.system.context.moveTo(ig.system.getDrawPos(c - ig.game.screen.x), ig.system.getDrawPos(d - ig.game.screen.y)); ig.system.context.lineTo(ig.system.getDrawPos(e - ig.game.screen.x), ig.system.getDrawPos(f - ig.game.screen.y)); ig.system.context.stroke(); ig.system.context.closePath() } }); ig.Entity._debugEnableChecks = !0; ig.Entity._debugShowBoxes = !1; ig.Entity._debugShowVelocities = !1; ig.Entity._debugShowNames = !1; ig.Entity.oldCheckPair = ig.Entity.checkPair; ig.Entity.checkPair = function(b, c) { ig.Entity._debugEnableChecks && ig.Entity.oldCheckPair(b, c) }; ig.debug.addPanel({ type: ig.DebugPanel, name: "entities", label: "Entities", options: [{ name: "Checks & Collisions", object: ig.Entity, property: "_debugEnableChecks" }, { name: "Show Collision Boxes", object: ig.Entity, property: "_debugShowBoxes" }, { name: "Show Velocities", object: ig.Entity, property: "_debugShowVelocities" }, { name: "Show Names & Targets", object: ig.Entity, property: "_debugShowNames" }] }) }); ig.baked = !0; ig.module("impact.debug.maps-panel").requires("impact.debug.menu", "impact.game", "impact.background-map").defines(function() { ig.Game.inject({ loadLevel: function(b) { this.parent(b); ig.debug.panels.maps.load(this) } }); ig.DebugMapsPanel = ig.DebugPanel.extend({ maps: [], mapScreens: [], init: function(b, c) { this.parent(b, c); this.load() }, load: function(b) { this.options = []; this.panels = []; if (!b || !b.backgroundMaps.length) this.container.innerHTML = "No Maps Loaded"; else { this.maps = b.backgroundMaps; this.mapScreens = []; this.container.innerHTML = ""; for (b = 0; b < this.maps.length; b++) { var c = this.maps[b], d = new ig.DebugPanel(b, "Layer " + b), e = new ig.$new("strong"); e.textContent = b + ": " + c.tiles.path; d.container.appendChild(e); d.addOption(new ig.DebugOption("Enabled", c, "enabled")); d.addOption(new ig.DebugOption("Pre Rendered", c, "preRender")); d.addOption(new ig.DebugOption("Show Chunks", c, "debugChunks")); this.generateMiniMap(d, c, b); this.addPanel(d) } } }, generateMiniMap: function(b, c, d) { var e = ig.system.scale, f = ig.$new("canvas"), j = f.getContext("2d"), q = c.tiles.width * e, n = c.tiles.height * e, g = q / c.tilesize, y = n / c.tilesize; f.width = g; f.height = y; j.drawImage(c.tiles.data, 0, 0, q, n, 0, 0, g, y); j = ig.$new("canvas"); j.width = c.width * e; j.height = c.height * e; y = j.getContext("2d"); ig.game.clearColor && (y.fillStyle = ig.game.clearColor, y.fillRect(0, 0, q, n)); for (n = q = 0; n < c.width; n++) for (var A = 0; A < c.height; A++)(q = c.data[A][n]) && y.drawImage(f, Math.floor((q - 1) * e % g), Math.floor((q - 1) * e / g) * e, e, e, n * e, A * e, e, e); f = ig.$new("div"); f.className = "ig_debug_map_container"; f.style.width = c.width * e + "px"; f.style.height = c.height * e + "px"; g = ig.$new("div"); g.className = "ig_debug_map_screen"; g.style.width = ig.system.width / c.tilesize * e - 2 + "px"; g.style.height = ig.system.height / c.tilesize * e - 2 + "px"; this.mapScreens[d] = g; f.appendChild(j); f.appendChild(g); b.container.appendChild(f) }, afterRun: function() { for (var b = ig.system.scale, c = 0; c < this.maps.length; c++) { var d = this.maps[c], e = this.mapScreens[c]; if (d && e) { var f = d.scroll.x / d.tilesize, j = d.scroll.y / d.tilesize; d.repeat && (f %= d.width, j %= d.height); e.style.left = f * b + "px"; e.style.top = j * b + "px" } } } }); ig.debug.addPanel({ type: ig.DebugMapsPanel, name: "maps", label: "Background Maps" }) }); ig.baked = !0; ig.module("impact.debug.graph-panel").requires("impact.debug.menu", "impact.system", "impact.game", "impact.image").defines(function() { ig.Game.inject({ draw: function() { ig.graph.beginClock("draw"); this.parent(); ig.graph.endClock("draw") }, update: function() { ig.graph.beginClock("update"); this.parent(); ig.graph.endClock("update") }, checkEntities: function() { ig.graph.beginClock("checks"); this.parent(); ig.graph.endClock("checks") } }); ig.DebugGraphPanel = ig.DebugPanel.extend({ clocks: {}, marks: [], textY: 0, height: 128, ms: 64, timeBeforeRun: 0, init: function(b, c) { this.parent(b, c); this.mark16ms = (this.height - 16 * (this.height / this.ms)).round(); this.mark33ms = (this.height - 33 * (this.height / this.ms)).round(); this.msHeight = this.height / this.ms; this.graph = ig.$new("canvas"); this.graph.width = window.innerWidth; this.graph.height = this.height; this.container.appendChild(this.graph); this.ctx = this.graph.getContext("2d"); this.ctx.fillStyle = "#444"; this.ctx.fillRect(0, this.mark16ms, this.graph.width, 1); this.ctx.fillRect(0, this.mark33ms, this.graph.width, 1); this.addGraphMark("16ms", this.mark16ms); this.addGraphMark("33ms", this.mark33ms); this.addClock("draw", "Draw", "#13baff"); this.addClock("update", "Entity Update", "#bb0fff"); this.addClock("checks", "Entity Checks & Collisions", "#a2e908"); this.addClock("lag", "System Lag", "#f26900"); ig.mark = this.mark.bind(this); ig.graph = this }, addGraphMark: function(b, c) { var d = ig.$new("span"); d.className = "ig_debug_graph_mark"; d.textContent = b; d.style.top = c.round() + "px"; this.container.appendChild(d) }, addClock: function(b, c, d) { var e = ig.$new("span"); e.className = "ig_debug_legend_color"; e.style.backgroundColor = d; var f = ig.$new("span"); f.className = "ig_debug_legend_number"; f.appendChild(document.createTextNode("0")); var j = ig.$new("span"); j.className = "ig_debug_legend"; j.appendChild(e); j.appendChild(document.createTextNode(c + " (")); j.appendChild(f); j.appendChild(document.createTextNode("ms)")); this.container.appendChild(j); this.clocks[b] = { description: c, color: d, current: 0, start: Date.now(), avg: 0, html: f } }, beginClock: function(b, c) { this.clocks[b].start = Date.now() + (c || 0) }, endClock: function(b) { b = this.clocks[b]; b.current = Math.round(Date.now() - b.start); b.avg = 0.8 * b.avg + 0.2 * b.current }, mark: function(b, c) { this.active && this.marks.push({ msg: b, color: c || "#fff" }) }, beforeRun: function() { this.endClock("lag"); this.timeBeforeRun = Date.now() }, afterRun: function() { var b = Date.now() - this.timeBeforeRun; this.beginClock("lag", Math.max(1E3 / ig.system.fps - b, 0)); var b = this.graph.width - 1, c = this.height; this.ctx.drawImage(this.graph, -1, 0); this.ctx.fillStyle = "#000"; this.ctx.fillRect(b, 0, 1, this.height); this.ctx.fillStyle = "#444"; this.ctx.fillRect(b, this.mark16ms, 1, 1); this.ctx.fillStyle = "#444"; this.ctx.fillRect(b, this.mark33ms, 1, 1); for (var d in this.clocks) { var e = this.clocks[d]; e.html.textContent = e.avg.toFixed(2); if (e.color && 0 < e.current) { this.ctx.fillStyle = e.color; var f = e.current * this.msHeight, c = c - f; this.ctx.fillRect(b, c, 1, f); e.current = 0 } } this.ctx.textAlign = "right"; this.ctx.textBaseline = "top"; this.ctx.globalAlpha = 0.5; for (d = 0; d < this.marks.length; d++) c = this.marks[d], this.ctx.fillStyle = c.color, this.ctx.fillRect(b, 0, 1, this.height), c.msg && (this.ctx.fillText(c.msg, b - 1, this.textY), this.textY = (this.textY + 8) % 32); this.ctx.globalAlpha = 1; this.marks = [] } }); ig.debug.addPanel({ type: ig.DebugGraphPanel, name: "graph", label: "Performance" }) }); ig.baked = !0; ig.module("impact.debug.debug").requires("impact.debug.entities-panel", "impact.debug.maps-panel", "impact.debug.graph-panel").defines(function() {}); ig.baked = !0; ig.module("plugins.patches.webkit-image-smoothing-patch").defines(function() { ig.System && (ig.System.SCALE = { CRISP: function(b, c) { c.imageSmoothingEnabled = c.msImageSmoothingEnabled = c.mozImageSmoothingEnabled = c.oImageSmoothingEnabled = !1; b.style.imageRendering = "-moz-crisp-edges"; b.style.imageRendering = "-o-crisp-edges"; b.style.imageRendering = "-webkit-optimize-contrast"; b.style.imageRendering = "crisp-edges"; b.style.msInterpolationMode = "nearest-neighbor" }, SMOOTH: function(b, c) { c.imageSmoothingEnabled = c.msImageSmoothingEnabled = c.mozImageSmoothingEnabled = c.oImageSmoothingEnabled = !0; b.style.imageRendering = ""; b.style.msInterpolationMode = "" } }, ig.System.scaleMode = ig.System.SCALE.SMOOTH) }); ig.baked = !0; ig.module("plugins.patches.windowfocus-onMouseDown-patch").defines(function() { var b = !1; try { b = window.self !== window.top, !1 === b && (b = 0 < window.frames.length) } catch (c) { b = !0 } ig.Input.inject({ keydown: function(c) { var e = c.target.tagName; if (!("INPUT" == e || "TEXTAREA" == e)) if (e = "keydown" == c.type ? c.keyCode : 2 == c.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1, b && 0 > e && window.focus(), ("touchstart" == c.type || "mousedown" == c.type) && this.mousemove(c), e = this.bindings[e]) this.actions[e] = !0, this.locks[e] || (this.presses[e] = !0, this.locks[e] = !0), c.stopPropagation(), c.preventDefault() } }) }); ig.baked = !0; ig.module("plugins.handlers.dom-handler").defines(function() { ig.DomHandler = ig.Class.extend({ JQUERYAVAILABLE: !1, init: function() { this.JQUERYAVAILABLE = this._jqueryAvailable() }, _jqueryAvailable: function() { return "undefined" !== typeof jQuery }, addEvent: function(b, c, d, e) { if (this.JQUERYAVAILABLE) b.on(c, d); else b.addEventListener(c, d, e) }, create: function(b) { return this.JQUERYAVAILABLE ? $("<" + b + ">") : ig.$new(b) }, getElementByClass: function(b) { return this.JQUERYAVAILABLE ? $("." + b) : document.getElementsByClassName(b) }, getElementById: function(b) { return this.JQUERYAVAILABLE ? 0 < $(b).length ? $(b) : null : ig.$(b) }, appendChild: function(b, c) { this.JQUERYAVAILABLE ? b.append(c) : b.appendChild(c) }, appendToBody: function(b) { this.JQUERYAVAILABLE ? $("body").append(b) : document.body.appendChild(b) }, resize: function(b, c, d) { if (this.JQUERYAVAILABLE) b.width(c.toFixed(2)), b.height(d.toFixed(2)); else { var e = b.style.visibility; c = "width:" + c.toFixed(2) + "px; height:" + d.toFixed(2) + "px;"; this.attr(b, "style", c); b.style.visibility = e } }, resizeOffsetLeft: function(b, c, d, e) { if (this.JQUERYAVAILABLE) b.width(c.toFixed(2)), b.height(d.toFixed(2)), b.css("left", e); else { var f = b.style.visibility; c = "width:" + c.toFixed(2) + "px; height:" + d.toFixed(2) + "px; left: " + e.toFixed(2) + "px;"; this.attr(b, "style", c); b.style.visibility = f } }, css: function(b, c) { if (this.JQUERYAVAILABLE) b.css(c); else { var d = "", e; for (e in c) d += e + ":" + c[e] + ";"; this.attr(b, "style", d) } }, getOffsets: function(b) { return this.JQUERYAVAILABLE ? (b = b.offset(), { left: b.left, top: b.top }) : { left: b.offsetLeft, top: b.offsetTop } }, attr: function(b, c, d) { if ("undefined" === typeof d) return this.JQUERYAVAILABLE ? b.attr(c) : b.getAttribute(c); this.JQUERYAVAILABLE ? b.attr(c, d) : b.setAttribute(c, d) }, show: function(b) { this.JQUERYAVAILABLE ? (b.show(), b.css("visibility", "visible")) : b && (b.style ? b.style.visibility = "visible" : b[0] && (b[0].style.visibility = "visible")) }, hide: function(b) { this.JQUERYAVAILABLE ? (b.hide(), b.css("visibility", "hidden")) : b && (b.style ? b.style.visibility = "hidden" : b[0] && (b[0].style.visibility = "hidden")) }, getQueryVariable: function(b) { for (var c = window.location.search.substring(1).split("&"), d = 0; d < c.length; d++) { var e = c[d].split("="); if (decodeURIComponent(e[0]) == b) return decodeURIComponent(e[1]) } }, forcedDeviceDetection: function() { var b = this.getQueryVariable("device"); if (b) switch (b) { case "mobile": console.log("serving mobile version ..."); ig.ua.mobile = !0; break; case "desktop": console.log("serving desktop version ..."); ig.ua.mobile = !1; break; default: console.log("serving universal version ...") } else console.log("serving universal version ...") }, forcedDeviceRotation: function() { var b = this.getQueryVariable("force-rotate"); if (b) switch (b) { case "portrait": console.log("force rotate to portrait"); window.orientation = 0; break; case "landscape": console.log("force rotate to horizontal"); window.orientation = 90; break; default: alert("wrong command/type in param force-rotate. Defaulting value to portrait"), window.orientation = 0 } } }) }); ig.baked = !0; ig.module("plugins.data.vector").defines(function() { Vector2 = ig.Class.extend({ x: null, y: null, valType: "number", init: function(b, c) { typeof b === this.valType && typeof c === this.valType && (this.x = b, this.y = c) }, row: function(b) { typeof b === this.valType && (this.y = b); return this.y }, col: function(b) { typeof b === this.valType && (this.x = b); return this.x }, magnitude: function() { return Math.sqrt(this.x * this.x + this.y * this.y) }, unitVector: function() { var b = this.magnitude(); if (0 < b) return new Vector2(this.x / b, this.y / b); throw "Divide by 0 error in unitVector function of vector:" + this; }, add: function(b) { return new Vector2(this.x + b.x, this.y + b.y) }, subtract: function(b) { return new Vector2(this.x - b.x, this.y - b.y) }, dotProduct: function(b) { return this.x * b.x + this.y * b.y }, multiplyByScalar: function(b) { return new Vector2(b * this.x, b * this.y) } }) }); ig.baked = !0; ig.module("plugins.handlers.size-handler").requires("plugins.data.vector").defines(function() { ig.SizeHandler = ig.Class.extend({ portraitMode: !1, desktop: { actualSize: new Vector2(window.innerWidth, window.innerHeight), actualResolution: new Vector2(960, 540) }, mobile: { actualSize: new Vector2(window.innerWidth, window.innerHeight), actualResolution: new Vector2(960, 540) }, windowSize: new Vector2(window.innerWidth, window.innerHeight), scaleRatioMultiplier: new Vector2(1, 1), sizeRatio: new Vector2(1, 1), scale: 1, domHandler: null, dynamicClickableEntityDivs: {}, coreDivsToResize: ["#canvas", "#play", "#orientate"], adsToResize: { }, init: function(b) { this.domHandler = b; if ("undefined" === typeof b) throw "undefined Dom Handler for Size Handler"; this.sizeCalcs(); this.eventListenerSetup(); this.samsungFix() }, sizeCalcs: function() { this.windowSize = new Vector2(window.innerWidth, window.innerHeight); if (ig.ua.mobile) { this.mobile.actualSize = new Vector2(window.innerWidth, window.innerHeight); var b = new Vector2(this.mobile.actualResolution.x, this.mobile.actualResolution.y); this.scaleRatioMultiplier = new Vector2(this.mobile.actualSize.x / b.x, this.mobile.actualSize.y / b.y); var c = Math.min(this.scaleRatioMultiplier.x, this.scaleRatioMultiplier.y); this.mobile.actualSize.x = b.x * this.scaleRatioMultiplier.x; this.mobile.actualSize.y = b.y * this.scaleRatioMultiplier.y } else this.desktop.actualSize = new Vector2(window.innerWidth, window.innerHeight), b = new Vector2(this.desktop.actualResolution.x, this.desktop.actualResolution.y), this.scaleRatioMultiplier = new Vector2(this.desktop.actualSize.x / b.x, this.desktop.actualSize.y / b.y), c = Math.min(this.scaleRatioMultiplier.x, this.scaleRatioMultiplier.y), this.desktop.actualSize.x = b.x * c, this.desktop.actualSize.y = b.y * c; this.sizeRatio.x = window.innerWidth / this.mobile.actualResolution.x; this.sizeRatio.y = window.innerHeight / this.mobile.actualResolution.y }, resizeLayers: function() { for (var b = 0; b < this.coreDivsToResize.length; b++) { var c = ig.domHandler.getElementById(this.coreDivsToResize[b]); ig.ua.mobile ? ig.domHandler.resize(c, Math.floor(ig.sizeHandler.mobile.actualSize.x), Math.floor(ig.sizeHandler.mobile.actualSize.y)) : ig.domHandler.resizeOffsetLeft(c, Math.floor(ig.sizeHandler.desktop.actualSize.x), Math.floor(ig.sizeHandler.desktop.actualSize.y), Math.floor(ig.sizeHandler.windowSize.x / 2 - ig.sizeHandler.desktop.actualSize.x / 2)) } for (var d in this.adsToResize) { var b = ig.domHandler.getElementById("#" + d), c = ig.domHandler.getElementById("#" + d + "-Box"), e = (window.innerWidth - this.adsToResize[d]["box-width"]) / 2 + "px", f = (window.innerHeight - this.adsToResize[d]["box-height"]) / 2 + "px"; b && ig.domHandler.css(b, { width: window.innerWidth, height: window.innerHeight }); c && ig.domHandler.css(c, { left: e, top: f }) } for (d in this.dynamicClickableEntityDivs) { c = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y); b = ig.domHandler.getElementById("#" + d); if (ig.ua.mobile) var j = this.dynamicClickableEntityDivs[d].entity_pos_x, q = this.dynamicClickableEntityDivs[d].entity_pos_y, f = this.dynamicClickableEntityDivs[d].width, e = this.dynamicClickableEntityDivs[d].height, n = Math.floor(j * this.scaleRatioMultiplier.x) + "px", q = Math.floor(q * this.scaleRatioMultiplier.y) + "px", f = Math.floor(f * this.scaleRatioMultiplier.x) + "px", c = Math.floor(e * this.scaleRatioMultiplier.y) + "px"; else var e = ig.domHandler.getElementById("#canvas"), e = ig.domHandler.getOffsets(e), n = e.left, g = e.top, j = this.dynamicClickableEntityDivs[d].entity_pos_x, q = this.dynamicClickableEntityDivs[d].entity_pos_y, f = this.dynamicClickableEntityDivs[d].width, e = this.dynamicClickableEntityDivs[d].height, n = Math.floor(n + j * c) + "px", q = Math.floor(g + q * c) + "px", f = Math.floor(f * c) + "px", c = Math.floor(e * c) + "px"; ig.domHandler.css(b, { "float": "left", position: "absolute", left: n, top: q, width: f, height: c, "z-index": 3 }) } }, resize: function() { this.sizeCalcs(); this.resizeLayers() }, reorient: function() { if (ig.ua.mobile) { var b = this.portraitMode ? window.innerHeight < window.innerWidth : window.innerHeight > window.innerWidth, c = this.domHandler.getElementById("#orientate"), d = this.domHandler.getElementById("#game"); b ? (this.domHandler.show(c), this.domHandler.hide(d)) : (this.domHandler.show(d), this.domHandler.hide(c)) } ig.ua.mobile ? (this.resize(), this.resizeAds()) : this.resize() }, resizeAds: function() { for (var b in this.adsToResize) { var c = ig.domHandler.getElementById("#" + b), d = ig.domHandler.getElementById("#" + b + "-Box"), e = (window.innerWidth - this.adsToResize[b]["box-width"]) / 2 + "px", f = (window.innerHeight - this.adsToResize[b]["box-height"]) / 2 + "px"; c && ig.domHandler.css(c, { width: window.innerWidth, height: window.innerHeight }); d && ig.domHandler.css(d, { left: e, top: f }) } }, samsungFix: function() { ig.ua.android && !(4.2 > parseFloat(navigator.userAgent.slice(navigator.userAgent.indexOf("Android") + 8, navigator.userAgent.indexOf("Android") + 11))) && (!(0 > navigator.userAgent.indexOf("GT")) && !(0 < navigator.userAgent.indexOf("Chrome")) && !(0 < navigator.userAgent.indexOf("Firefox"))) && (document.addEventListener("touchstart", function(b) { b.preventDefault(); return !1 }, !1), document.addEventListener("touchmove", function(b) { b.preventDefault(); return !1 }, !1), document.addEventListener("touchend", function(b) { b.preventDefault(); return !1 }, !1)) }, orientationInterval: null, orientationTimeout: null, orientationHandler: function() { this.reorient(); window.scrollTo(0, 1) }, orientationDelayHandler: function() { null == this.orientationInterval && (this.orientationInterval = window.setInterval(this.orientationHandler.bind(this), 100)); null == this.orientationTimeout && (this.orientationTimeout = window.setTimeout(function() { this.clearAllIntervals() }.bind(this), 2E3)) }, clearAllIntervals: function() { window.clearInterval(this.orientationInterval); this.orientationInterval = null; window.clearTimeout(this.orientationTimeout); this.orientationTimeout = null }, eventListenerSetup: function() { ig.ua.iOS ? (window.addEventListener("orientationchange", this.orientationDelayHandler.bind(this)), window.addEventListener("resize", this.orientationDelayHandler.bind(this))) : (window.addEventListener("orientationchange", this.orientationHandler.bind(this)), window.addEventListener("resize", this.orientationHandler.bind(this))); document.ontouchmove = function(b) { window.scrollTo(0, 1); b.preventDefault() } } }) }); ig.baked = !0; ig.module("plugins.handlers.api-handler").defines(function() { ig.ApiHandler = ig.Class.extend({ apiAvailable: { MJSPreroll: function() { ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE && _SETTINGS // && _SETTINGS.Ad.Mobile.Preroll.Enabled && MobileAdInGamePreroll.Initialize() }, MJSHeader: function() { ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE // && _SETTINGS.Ad.Mobile.Header.Enabled && MobileAdInGameHeader.Initialize() }, MJSFooter: function() { ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE // && _SETTINGS.Ad.Mobile.Footer.Enabled && MobileAdInGameFooter.Initialize() }, MJSEnd: function() { ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE // && _SETTINGS.Ad.Mobile.End.Enabled && MobileAdInGameEnd.Initialize() } }, run: function(b, c) { if (this.apiAvailable[b]) this.apiAvailable[b](c) } }) }); ig.baked = !0; ig.module("plugins.audio.sound-player").defines(function() { SoundPlayer = ig.Class.extend({ tagName: "SoundPlayer", stayMuteFlag: !1, debug: !1, init: function() { this.debug && console.log(this.tagName) }, play: function(b) { this.debug && console.log("play sound ", b) }, stop: function() { this.debug && console.log("stop sound ") }, volume: function() { this.debug && console.log("set volume") }, mute: function(b) { this.debug && console.log("mute"); "undefined" === typeof b ? this.stayMuteFlag = !0 : b && (this.stayMuteFlag = !0) }, unmute: function(b) { this.debug && console.log("unmute"); "undefined" === typeof b ? this.stayMuteFlag = !1 : b && (this.stayMuteFlag = !1) } }) }); ig.baked = !0; ig.module("plugins.audio.impact-music-player").requires("plugins.audio.sound-player").defines(function() { ImpactMusicPlayer = SoundPlayer.extend({ tagName: "ImpactMusicPlayer", bgmPlaying: !1, soundList: {}, init: function(b, c) { this.parent(b, c); for (var d in b) this.soundList[d] = d, ig.music.add(b[d].path + ".*", d); c && c.loop && (ig.music.loop = c.loop) }, play: function(b) { this.stayMuteFlag || (this.bgmPlaying = !0, "undefined" === typeof b ? ig.music.play(b) : ig.music.play()) }, stop: function() { this.bgmPlaying = !1; ig.music.pause() }, volume: function(b) { console.log("impactmusic:", b); ig.music.volume = 0 > b ? 0 : isNaN(b) ? 1 : 1 < b ? 1 : b }, getVolume: function() { return ig.music.volume }, mute: function(b) { this.parent(b); this.bgmPlaying && this.stop() }, unmute: function(b) { this.parent(b); this.play() } }) }); ig.baked = !0; ig.module("plugins.audio.impact-sound-player").requires("plugins.audio.sound-player").defines(function() { ImpactSoundPlayer = SoundPlayer.extend({ tagName: "ImpactSoundPlayer", soundList: {}, init: function(b, c) { this.parent(b, c); for (var d in b) { var e = new ig.Sound(b[d].path + ".*"); this.soundList[d] = e } }, play: function(b) { this.stayMuteFlag || ("object" === typeof b ? (console.log(b + " exists"), b.play()) : "string" === typeof b && this.soundList[b].play()) }, stop: function(b) { this.parent(b); b.stop() }, volume: function(b) { ig.soundManager.volume = 0 > b ? 0 : isNaN(b) ? 1 : 1 < b ? 1 : b }, getVolume: function() { return ig.soundManager.volume }, mute: function(b) { this.parent(b); ig.Sound.enabled = !1 }, unmute: function(b) { this.parent(b); ig.Sound.enabled = !0 } }) }); ig.baked = !0; ig.module("plugins.audio.howler-player").requires("plugins.audio.sound-player").defines(function() { HowlerPlayer = SoundPlayer.extend({ tagName: "HowlerPlayer", soundList: {}, init: function(b, c) { this.parent(b, c); for (var d in b) { var e = b[d].path, e = new Howl({ src: [e + "." + ig.Sound.FORMAT.OGG.ext, e + "." + ig.Sound.FORMAT.MP3.ext] }); this.soundList[d] = e } }, play: function(b) { this.stayMuteFlag || ("object" === typeof b ? b.play() : "string" === typeof b && this.soundList[b].play()) }, stop: function(b) { this.parent(b); b.stop() }, volume: function(b) { for (var c in this.soundList) { if (0 > b) { this.soundList[c].volume(0); break } isNaN(b) ? this.soundList[c].volume(1) : 1 < b ? this.soundList[c].volume(1) : this.soundList[c].volume(b) } }, getVolume: function() { for (var b in this.soundList) return this.soundList[b].volume() }, mute: function(b) { this.parent(b); Howler.mute(!0) }, unmute: function(b) { this.parent(b); Howler.mute(!1) } }) }); ig.baked = !0; ig.module("plugins.audio.howler-music-player").requires("plugins.audio.sound-player").defines(function() { HowlerMusicPlayer = SoundPlayer.extend({ tagName: "HowlerMusicPlayer", bgmPlaying: !1, soundList: {}, init: function(b, c) { this.parent(b, c); for (var d in b) { var e = b[d].path, e = new Howl({ src: [e + "." + ig.Sound.FORMAT.OGG.ext, e + "." + ig.Sound.FORMAT.MP3.ext], loop: !0, autoplay: !1, onend: function() {}.bind(this) }); this.soundList[d] = e } }, play: function(b) { if (!this.stayMuteFlag && !this.bgmPlaying) if ("object" === typeof b) this.bgmPlaying = !0, b.play(); else if ("string" === typeof b) this.bgmPlaying = !0, this.soundList[b].play(); else for (var c in this.soundList) { this.soundList[c].play(); this.bgmPlaying = !0; break } }, stop: function(b) { this.parent(b); if (this.bgmPlaying) { for (var c in this.soundList) this.soundList[c].stop(); this.bgmPlaying = !1 } }, volume: function(b) { for (var c in this.soundList) { if (0 > b) { this.soundList[c].volume(0); break } isNaN(b) ? this.soundList[c].volume(1) : 1 < b ? this.soundList[c].volume(1) : this.soundList[c].volume(b) } }, getVolume: function() { for (var b in this.soundList) return this.soundList[b].volume() }, mute: function(b) { this.parent(b); Howler.mute(!0) }, unmute: function(b) { this.parent(b); Howler.mute(!1) } }) }); ig.baked = !0; ig.module("plugins.audio.jukebox-player").requires("plugins.audio.sound-player").defines(function() { JukeboxPlayer = SoundPlayer.extend({ tagName: "JukeboxPlayer", bgmPlaying: !1, soundList: {}, jukeboxPlayer: null, pausePosition: 0, premuteVolume: 0, minVolume: 0.0010, init: function(b, c) { this.parent(b, c); for (var d in b) { this.soundList[d] = d; var e = b[d].path; this.jukeboxPlayer = new jukebox.Player({ resources: [e + "." + ig.Sound.FORMAT.OGG.ext, e + "." + ig.Sound.FORMAT.MP3.ext], autoplay: !1, spritemap: { music: { start: b[d].startMp3, end: b[d].endMp3, loop: !0 } } }) } }, play: function() { this.stayMuteFlag || (this.bgmPlaying = !0, this.pausePosition ? (console.log("resume"), this.jukeboxPlayer.resume(this.pausePosition)) : (console.log("play"), this.jukeboxPlayer.play(this.jukeboxPlayer.settings.spritemap.music.start, !0)), this.premuteVolume = this.getVolume()) }, stop: function() { this.bgmPlaying = !1; this.pausePosition = this.jukeboxPlayer.pause() }, volume: function(b) { console.log("jukebox:", b); 0 >= b ? this.jukeboxPlayer.setVolume(this.minVolume) : isNaN(b) ? this.jukeboxPlayer.setVolume(1) : 1 < b ? this.jukeboxPlayer.setVolume(1) : this.jukeboxPlayer.setVolume(b) }, getVolume: function() { return this.jukeboxPlayer.getVolume() }, mute: function(b) { this.parent(b); this.bgmPlaying && (console.log("jukebox", this.premuteVolume), this.stayMuteFlag || (this.premuteVolume = this.getVolume()), this.jukeboxPlayer.pause(), this.jukeboxPlayer.setVolume(this.minVolume)) }, unmute: function(b) { this.parent(b); this.stayMuteFlag || (console.log("jukebox", this.premuteVolume), this.jukeboxPlayer.setVolume(this.premuteVolume), this.jukeboxPlayer.resume()) } }) }); ig.baked = !0; ig.module("plugins.audio.webaudio-music-player").requires("plugins.audio.sound-player").defines(function() { WebaudioMusicPlayer = SoundPlayer.extend({ tagName: "WebaudioMusicPlayer", bgmPlaying: !1, isSupported: !1, muteFlag: !1, pausedTime: 0, webaudio: null, useHTML5Audio: !1, audio: null, inactiveAudio: null, codecs: null, _volume: 1, soundList: {}, init: function(b) { this.webaudio = { compatibility: {}, gainNode: null, buffer: null, source_loop: {}, source_once: {} }; try { this.AudioContext = window.AudioContext || window.webkitAudioContext, this.webaudio.context = new this.AudioContext, this.isSupported = !0 } catch (c) { console.log("Web Audio API not supported in this browser."), this.webaudio = null, this.useHTML5Audio = !0 } if (this.useHTML5Audio) if ("undefined" !== typeof Audio) try { new Audio } catch (d) { this.useHTML5Audio = !1 } else this.useHTML5Audio = !1; this.useHTML5Audio && (this.audio = new Audio, this.isSupported = !0, this.initHTML5Audio(b)); if (!this.isSupported) return null; this.webaudio && this.initWebAudio(b) }, initWebAudio: function(b) { ig.ua.iOS && this.initIOSWebAudioUnlock(); this.webaudio.gainNode = this.webaudio.context.createGain(); this.webaudio.gainNode.connect(this.webaudio.context.destination); this.webaudio.gainNode.gain.value = this._volume; var c = "start", d = "stop", e = this.webaudio.context.createBufferSource(); "function" !== typeof e.start && (c = "noteOn"); this.webaudio.compatibility.start = c; "function" !== typeof e.stop && (d = "noteOff"); this.webaudio.compatibility.stop = d; for (var f in b) { this.soundList[f] = f; c = b[f].path; b = c + "." + ig.Sound.FORMAT.MP3.ext; var j = c + "." + ig.Sound.FORMAT.OGG.ext; ig.ua.mobile ? ig.ua.iOS && (j = b) : (c = navigator.userAgent.toLowerCase(), -1 != c.indexOf("safari") && -1 >= c.indexOf("chrome") && (j = b)); var q = new XMLHttpRequest; q.open("GET", j, !0); q.responseType = "arraybuffer"; q.onload = function() { this.webaudio.context.decodeAudioData(q.response, function(b) { this.webaudio.buffer = b; this.webaudio.source_loop = {}; this.bgmPlaying ? this.play() : this.stop() }.bind(this), function() { console.log('Error decoding audio "' + j + '".') }) }.bind(this); q.send(); break } }, initIOSWebAudioUnlock: function() { if (this.webaudio) { webaudio = this.webaudio; var b = function() { var c = webaudio.context, d = c.createBuffer(1, 1, 22050), e = c.createBufferSource(); e.buffer = d; e.connect(c.destination); "undefined" === typeof e.start ? e.noteOn(0) : e.start(0); setTimeout(function() { (e.playbackState === e.PLAYING_STATE || e.playbackState === e.FINISHED_STATE) && window.removeEventListener("touchend", b, !1) }, 0) }; window.addEventListener("touchend", b, !1) } }, initHTML5Audio: function(b) { if (this.useHTML5Audio && this.audio) { var c = this.audio; this.codecs = {}; this.codecs = { mp3: !!c.canPlayType("audio/mpeg;").replace(/^no$/, ""), opus: !!c.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""), ogg: !!c.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), wav: !!c.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), aac: !!c.canPlayType("audio/aac;").replace(/^no$/, ""), m4a: !!(c.canPlayType("audio/x-m4a;") || c.canPlayType("audio/m4a;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""), mp4: !!(c.canPlayType("audio/x-mp4;") || c.canPlayType("audio/mp4;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""), weba: !!c.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, "") }; this.is = { ff: Boolean(null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase())), ie: Boolean(document.all && !window.opera), opera: Boolean(window.opera), chrome: Boolean(window.chrome), safari: Boolean(!window.chrome && /safari/.test(navigator.userAgent.toLowerCase()) && window.getComputedStyle && !window.globalStorage && !window.opera) }; this.playDelay = -60; this.stopDelay = 30; this.is.chrome && (this.playDelay = -25); this.is.chrome && (this.stopDelay = 25); this.is.ff && (this.playDelay = -25); this.is.ff && (this.stopDelay = 85); this.is.opera && (this.playDelay = 5); this.is.opera && (this.stopDelay = 0); for (var d in b) { this.soundList[d] = d; var e = b[d].path, c = e + "." + ig.Sound.FORMAT.OGG.ext, e = e + "." + ig.Sound.FORMAT.MP3.ext, f = null; this.codecs[ig.Sound.FORMAT.OGG.ext.toLowerCase()] ? f = c : this.codecs[ig.Sound.FORMAT.MP3.ext.toLowerCase()] && (f = e); if (f) { ig.ua.mobile ? ig.ua.iOS && (f = e) : (b = navigator.userAgent.toLowerCase(), -1 != b.indexOf("safari") && -1 >= b.indexOf("chrome") && (f = e)); this.audio.addEventListener("error", function() { this.audio.error && 4 === this.audio.error.code && (this.isSupported = !1) }, !1); this.audio.src = f; this.audio._pos = 0; this.audio.preload = "auto"; this.audio.volume = this._volume; this.inactiveAudio = new Audio; this.inactiveAudio.src = f; this.inactiveAudio._pos = 0; this.inactiveAudio.preload = "auto"; this.inactiveAudio.volume = this._volume; this.inactiveAudio.load(); var j = function() { this._duration = this.audio.duration; this._loaded || (this._loaded = !0); this.bgmPlaying ? this.play() : this.stop(); this.audio.removeEventListener("canplaythrough", j, !1) }.bind(this); this.audio.addEventListener("canplaythrough", j, !1); this.audio.load(); break } } } }, play: function(b) { if (this.isSupported) if (this.bgmPlaying = !0, this.webaudio) if (this.webaudio.buffer) { if (!this.muteFlag && (this.bgmPlaying = !0, !this.webaudio.source_loop._playing)) { this.webaudio.source_loop = this.webaudio.context.createBufferSource(); this.webaudio.source_loop.buffer = this.webaudio.buffer; this.webaudio.source_loop.loop = !0; this.webaudio.source_loop.connect(this.webaudio.gainNode); isNaN(b) && (b = 0, this.pausedTime && (b = this.pausedTime)); this.webaudio.source_loop._startTime = this.webaudio.context.currentTime; if ("noteOn" === this.webaudio.compatibility.start) this.webaudio.source_once = this.webaudio.context.createBufferSource(), this.webaudio.source_once.buffer = this.webaudio.buffer, this.webaudio.source_once.connect(this.webaudio.gainNode), this.webaudio.source_once.noteGrainOn(0, b, this.webaudio.buffer.duration - b), this.webaudio.source_loop[this.webaudio.compatibility.start](this.webaudio.context.currentTime + (this.webaudio.buffer.duration - b)); else this.webaudio.source_loop[this.webaudio.compatibility.start](0, b); this.webaudio.source_loop._playing = !0 } } else this.bgmPlaying = !0; else if (this.audio) { var c = this.audio; if (!this.muteFlag) { this.bgmPlaying = !0; isNaN(b) && (b = 0, this.pausedTime && (b = this.pausedTime)); var d = this._duration - b; this._onEndTimer && (clearTimeout(this._onEndTimer), this._onEndTimer = null); this._onEndTimer = setTimeout(function() { this.audio.currentTime = 0; this.audio.pause(); this.pausedTime = 0; if (this.inactiveAudio) { var b = this.audio; this.audio = this.inactiveAudio; this.inactiveAudio = b } this.play() }.bind(this), 1E3 * d + this.playDelay); 4 === c.readyState || !c.readyState && navigator.isCocoonJS ? (c.readyState = 4, c.currentTime = b, c.muted = this.muteFlag || c.muted, c.volume = this._volume, setTimeout(function() { c.play() }, 0)) : (clearTimeout(this._onEndTimer), this._onEndTimer = null, function() { var b = function() { try { this.play() } catch (d) { console.log(d.message) } c.removeEventListener("canplaythrough", b, !1) }.bind(this); c.addEventListener("canplaythrough", b, !1) }()) } } }, stop: function() { this.bgmPlaying = !1; if (this.isSupported) if (this.webaudio) { if (this.webaudio.source_loop._playing && (this.webaudio.source_loop[this.webaudio.compatibility.stop](0), this.webaudio.source_loop._playing = !1, this.pausedTime += this.webaudio.context.currentTime - this.webaudio.source_loop._startTime, this.pausedTime %= this.webaudio.source_loop.buffer.duration, this.webaudio.source_loop._startTime = 0, "noteOn" === this.webaudio.compatibility.start)) this.webaudio.source_once[this.webaudio.compatibility.stop](0) } else if (this.audio) { var b = this.audio; this.pausedTime = b.currentTime; b.currentTime = 0; b.pause(); clearTimeout(this._onEndTimer); this._onEndTimer = null } }, volume: function(b) { this.isSupported && (this._volume = b, 0 > this._volume ? this._volume = 0 : 1 < this._volume && (this._volume = 1), this.webaudio ? this.webaudio.gainNode && (this.webaudio.gainNode.gain.value = this._volume) : this.audio && (this.audio.volume = this._volume, this.inactiveAudio && (this.inactiveAudio.volume = this._volume))) }, getVolume: function() { return !this.isSupported ? 0 : this._volume }, mute: function(b) { this.parent(b); !1 == this.muteFlag && (this.muteFlag = !0, this.bgmPlaying && (this.stop(), this.bgmPlaying = !0)) }, unmute: function(b) { this.parent(b); !this.stayMuteFlag && !0 == this.muteFlag && (this.muteFlag = !1, this.bgmPlaying && this.play()) } }) }); ig.baked = !0; ig.module("plugins.audio.sound-info").defines(function() { SoundInfo = ig.Class.extend({ FORMATS: { OGG: ".ogg", MP3: ".mp3" }, sfx: { kittyopeningSound: { path: "media/audio/opening/kittyopening" }, staticSound: { path: "media/audio/play/static" }, openingSound: { path: "media/audio/opening/opening" }, hit_hight: { path: "media/audio/play/hit3" }, hit_low: { path: "media/audio/play/hit_low" }, hole: { path: "media/audio/play/ball_in_hole" }, watersplash: { path: "media/audio/play/watersplash" }, ding1: { path: "media/audio/play/ding1" }, button1: { path: "media/audio/play/button1" }, button2: { path: "media/audio/play/button2" } }, bgm: { background: { path: "media/audio/bgm2", startOgg: 0, endOgg: 21.463, startMp3: 0, endMp3: 21.463 } } }) }); ig.baked = !0; ig.module("plugins.audio.sound-handler").requires("plugins.audio.impact-music-player", "plugins.audio.impact-sound-player", "plugins.audio.howler-player", "plugins.audio.howler-music-player", "plugins.audio.jukebox-player", "plugins.audio.webaudio-music-player", "plugins.audio.sound-info").defines(function() { ig.SoundHandler = ig.Class.extend({ bgmPlayer: null, sfxPlayer: null, focusBlurMute: !1, soundInfo: new SoundInfo, init: function() { console.log("Initiating sound handler"); this.initWindowHandler(); ig.ua.mobile ? (this.initPowerButtonFix(), this.bgmPlayer = new WebaudioMusicPlayer(this.soundInfo.bgm, { loop: !0 }), this.bgmPlayer.isSupported || (this.bgmPlayer = new JukeboxPlayer(this.soundInfo.bgm, { loop: !0 }))) : (this.bgmPlayer = new WebaudioMusicPlayer(this.soundInfo.bgm, { loop: !0 }), this.bgmPlayer.isSupported || (this.bgmPlayer = new ImpactMusicPlayer(this.soundInfo.bgm, { loop: !0 }))); this.sfxPlayer = new HowlerPlayer(this.soundInfo.sfx) }, checkBGM: function() { return this.bgmPlayer.stayMuteFlag }, checkSFX: function() { return this.sfxPlayer.stayMuteFlag }, muteSFX: function(b) { this.sfxPlayer && this.sfxPlayer.mute(b) }, muteBGM: function(b) { this.bgmPlayer && this.bgmPlayer.mute(b) }, unmuteSFX: function(b) { this.sfxPlayer && this.sfxPlayer.unmute(b) }, unmuteBGM: function(b) { this.bgmPlayer && this.bgmPlayer.unmute(b) }, muteAll: function(b) { this.muteSFX(b); this.muteBGM(b) }, unmuteAll: function(b) { this.unmuteSFX(b); this.unmuteBGM(b) }, forceMuteAll: function() { this.focusBlurMute || this.muteAll(!1); this.focusBlurMute = !0 }, forceUnMuteAll: function() { this.focusBlurMute && (this.unmuteAll(!1), this.focusBlurMute = !1) }, initWindowHandler: function() { "true" === ig.domHandler.getQueryVariable("webview") ? ($(window).focus(function() { ig.soundHandler && ig.soundHandler.forceUnMuteAll() }), $(window).blur(function() { ig.game && ig.game.controller && "GameCtrl" == ig.game.controller.name && (!ig.game.states.isPaused && !ig.game.controller.startCounter) && ig.game.controller.fnTriggerPause(); ig.soundHandler && ig.soundHandler.forceMuteAll() })) : ($(window).focusin(function() { ig.soundHandler && ig.soundHandler.forceUnMuteAll() }), $(window).focusout(function() { ig.game && ig.game.controller && "GameCtrl" == ig.game.controller.name && (!ig.game.states.isPaused && !ig.game.controller.startCounter) && ig.game.controller.fnTriggerPause(); ig.soundHandler && ig.soundHandler.forceMuteAll() })) }, initPowerButtonFix: function() { var b = this.getHiddenProp(); b && (b = b.replace(/[H|h]idden/, "") + "visibilitychange", document.addEventListener(b, this.visChange)); window.addEventListener("pagehide", function() { ig.game && ig.game.controller && "GameCtrl" == ig.game.controller.name && (!ig.game.states.isPaused && !ig.game.controller.startCounter) && ig.game.controller.fnTriggerPause(); ig.soundHandler && ig.soundHandler.forceMuteAll() }, !1); window.addEventListener("pageshow", function() { ig.soundHandler && ig.soundHandler.forceUnMuteAll() }, !1) }, getHiddenProp: function() { var b = ["webkit", "moz", "ms", "o"]; if ("hidden" in document) return "hidden"; for (var c = 0; c < b.length; c++) if (b[c] + "Hidden" in document) return b[c] + "Hidden"; return null }, isHidden: function() { var b = this.getHiddenProp(); return !b ? !1 : document[b] }, visChange: function() { ig.soundHandler.isHidden() ? (ig.ua.mobile && ig.game && ig.game.controller && "GameCtrl" == ig.game.controller.name && (!ig.game.states.isPaused && !ig.game.controller.startCounter) && ig.game.controller.fnTriggerPause(), ig.soundHandler && ig.soundHandler.forceMuteAll()) : ig.soundHandler && ig.soundHandler.forceUnMuteAll() }, saveVolume: function() { this.sfxPlayer && ig.game.io.storageSet("soundVolume", this.sfxPlayer.getVolume()); this.bgmPlayer && ig.game.io.storageSet("musicVolume", this.bgmPlayer.getVolume()) }, forceLoopBGM: function() { var b; if (!this.focusBlurMute && this.bgmPlayer.bgmPlaying && this.bgmPlayer) { var c = this.bgmPlayer.jukeboxPlayer; if (c) { null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase()); b = Boolean(window.chrome); !window.chrome && /safari/.test(navigator.userAgent.toLowerCase()); var d = 0.1; ig.ua.mobile && (d = 0.115, ig.ua.android && (d = 0.45, b && (d = 0.3))); c.settings.spritemap.music && (b = c.settings.spritemap.music.end - d, c.getCurrentTime() >= b && (b = c.settings.spritemap.music.start, ig.ua.android ? this.forcelooped || (c.play(b, !0), this.forcelooped = !0, setTimeout(function() { ig.soundHandler.forcelooped = !1 }, d)) : c.setCurrentTime(b))) } else "ImpactMusicPlayer" == this.bgmPlayer.tagName && (null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase()), b = Boolean(window.chrome), !window.chrome && /safari/.test(navigator.userAgent.toLowerCase()), d = 0.1, ig.ua.mobile && (d = 0.115, ig.ua.android && (d = 0.45, b && (d = 0.3))), c = 0, "mp3" == ig.soundManager.format.ext && (c = 0.05), ig.music.currentTrack && (b = ig.music.currentTrack.duration - d, ig.music.currentTrack.currentTime >= b && (ig.ua.android ? this.forcelooped || (ig.music.currentTrack.pause(), ig.music.currentTrack.currentTime = c, ig.music.currentTrack.play(), this.forcelooped = !0, setTimeout(function() { ig.soundHandler.forcelooped = !1 }, d)) : ig.music.currentTrack.currentTime = c))) } } }) }); ig.baked = !0; ig.module("plugins.io.storage").defines(function() { ig.Storage = ig.Class.extend({ staticInstantiate: function() { return !ig.Storage.instance ? null : ig.Storage.instance }, init: function() { ig.Storage.instance = this }, isCapable: function() { return "undefined" !== typeof window.localStorage }, isSet: function(b) { return null !== this.get(b) }, initUnset: function(b, c) { null === this.get(b) && this.set(b, c) }, get: function(b) { if (!this.isCapable()) return null; try { return JSON.parse(localStorage.getItem(b)) } catch (c) { return window.localStorage.getItem(b) } }, getInt: function(b) { return ~~this.get(b) }, getFloat: function(b) { return parseFloat(this.get(b)) }, getBool: function(b) { return !!this.get(b) }, key: function(b) { return this.isCapable() ? window.localStorage.key(b) : null }, set: function(b, c) { if (!this.isCapable()) return null; try { window.localStorage.setItem(b, JSON.stringify(c)) } catch (d) { console.log(d) } }, setHighest: function(b, c) { c > this.getFloat(b) && this.set(b, c) }, remove: function(b) { if (!this.isCapable()) return null; window.localStorage.removeItem(b) }, clear: function() { if (!this.isCapable()) return null; window.localStorage.clear() } }) }); ig.baked = !0; ig.module("plugins.io.mouse").defines(function() { Mouse = ig.Class.extend({ bindings: { click: [ig.KEY.MOUSE1] }, init: function() { ig.input.initMouse(); for (var b in this.bindings) { this[b] = b; for (var c = 0; c < this.bindings[b].length; c++) ig.input.bind(this.bindings[b][c], b) } }, getPos: function() { if (ig.ua.mobile) var b = ig.input.mouse.x / ig.sizeHandler.sizeRatio.x, c = ig.input.mouse.y / ig.sizeHandler.sizeRatio.y; else b = ig.input.mouse.x, c = ig.input.mouse.y; return new Vector2(b, c) } }) }); ig.baked = !0; ig.module("plugins.io.keyboard").defines(function() { Keyboard = ig.Class.extend({ bindings: { jump: [ig.KEY.W, ig.KEY.UP_ARROW], moveright: [ig.KEY.D, ig.KEY.RIGHT_ARROW], moveleft: [ig.KEY.A, ig.KEY.LEFT_ARROW], shoot: [ig.KEY.S, ig.KEY.DOWN_ARROW, ig.KEY.SPACE] }, init: function() { for (var b in this.bindings) { this[b] = b; for (var c = 0; c < this.bindings[b].length; c++) ig.input.bind(this.bindings[b][c], b) } } }) }); ig.baked = !0; ig.module("plugins.io.gamepad-input").defines(function() { ig.PADKEY = { BUTTON_0: 0, PADBUTTON_1: 1, BUTTON_2: 2, BUTTON_3: 3, BUTTON_LEFT_BUMPER: 4, BUTTON_RIGHT_BUMPER: 5, BUTTON_LEFT_TRIGGER: 6, BUTTON_RIGHT_TRIGGER: 7, BUTTON_LEFT_JOYSTICK: 10, BUTTON_RIGHT_JOYSTICK: 11, BUTTON_DPAD_UP: 12, BUTTON_DPAD_DOWN: 13, BUTTON_DPAD_LEFT: 14, BUTTON_DPAD_RIGHT: 15, BUTTON_MENU: 16, AXIS_LEFT_JOYSTICK_X: 0, AXIS_LEFT_JOYSTICK_Y: 1, AXIS_RIGHT_JOYSTICK_X: 2, AXIS_RIGHT_JOYSTICK_Y: 3 }; ig.GamepadInput = ig.Class.extend({ isInit: !1, isSupported: !1, list: [], bindings: {}, states: {}, presses: {}, releases: {}, downLocks: {}, upLocks: {}, leftStick: { x: 0, y: 0 }, rightStick: { x: 0, y: 0 }, start: function() { if (!this.isInit) { this.isInit = !0; var b = navigator.getGamepads || navigator.webkitGetGamepads; b && (!navigator.getGamepads && navigator.webkitGetGamepads && (navigator.getGamepads = navigator.webkitGetGamepads), this.list = navigator.getGamepads()); this.isSupported = b } }, isAvailable: function() { return this.isInit && this.isSupported }, buttonPressed: function(b) { return "object" == typeof b ? b.pressed : 1 == b }, buttonDown: function(b) { if (b = this.bindings[b]) this.states[b] = !0, this.downLocks[b] || (this.presses[b] = !0, this.downLocks[b] = !0) }, buttonUp: function(b) { if ((b = this.bindings[b]) && this.downLocks[b] && !this.upLocks[b]) this.states[b] = !1, this.releases[b] = !0, this.upLocks[b] = !0 }, clearPressed: function() { for (var b in this.releases) this.states[b] = !1, this.downLocks[b] = !1; this.releases = {}; this.presses = {}; this.upLocks = {} }, bind: function(b, c) { this.bindings[b] = c }, unbind: function(b) { this.releases[this.bindings[b]] = !0; this.bindings[b] = null }, unbindAll: function() { this.bindings = {}; this.states = {}; this.presses = {}; this.releases = {}; this.downLocks = {}; this.upLocks = {} }, state: function(b) { return this.states[b] }, pressed: function(b) { return this.presses[b] }, released: function(b) { return this.releases[b] }, clamp: function(b, c, d) { return b < c ? c : b > d ? d : b }, pollGamepads: function() { if (this.isSupported) { this.leftStick.x = 0; this.leftStick.y = 0; this.rightStick.x = 0; this.rightStick.y = 0; this.list = navigator.getGamepads(); for (var b in this.bindings) { for (var c = !1, d = 0; d < this.list.length; d++) { var e = this.list[d]; if (e && e.buttons && this.buttonPressed(e.buttons[b])) { c = !0; break } } c ? this.buttonDown(b) : this.buttonUp(b) } for (d = 0; d < this.list.length; d++) if ((e = this.list[d]) && e.axes) { b = e.axes[ig.GAMEPADINPUT.AXIS_LEFT_JOYSTICK_X]; var c = e.axes[ig.GAMEPADINPUT.AXIS_LEFT_JOYSTICK_Y], f = e.axes[ig.GAMEPADINPUT.AXIS_RIGHT_JOYSTICK_X], e = e.axes[ig.GAMEPADINPUT.AXIS_RIGHT_JOYSTICK_Y]; this.leftStick.x += isNaN(b) ? 0 : b; this.leftStick.y += isNaN(c) ? 0 : c; this.rightStick.x += isNaN(f) ? 0 : f; this.rightStick.y += isNaN(e) ? 0 : e } 0 < this.list.length && (this.leftStick.x = this.clamp(this.leftStick.x, -1, 1), this.leftStick.y = this.clamp(this.leftStick.y, -1, 1), this.rightStick.x = this.clamp(this.rightStick.x, -1, 1), this.rightStick.y = this.clamp(this.rightStick.y, -1, 1)) } } }) }); ig.baked = !0; ig.module("plugins.io.gamepad").requires("plugins.io.gamepad-input").defines(function() { Gamepad = ig.Class.extend({ bindings: { padJump: [ig.PADKEY.BUTTON_0] }, init: function() { ig.gamepadInput.start(); for (var b in this.bindings) for (var c = 0; c < this.bindings[b].length; c++) ig.gamepadInput.bind(this.bindings[b][c], b) }, press: function() {}, held: function() {}, release: function() {} }) }); ig.baked = !0; ig.module("plugins.io.multitouch").defines(function() { Multitouch = ig.Class.extend({ init: function() { ig.multitouchInput.start() }, getTouchesPos: function() { if (ig.ua.mobile) { if (0 < ig.multitouchInput.touches.length) { for (var b = [], c = 0; c < ig.multitouchInput.touches.length; c++) { var d = ig.multitouchInput.touches[c]; b.push({ x: d.x, y: d.y }) } return b } return null } } }) }); ig.baked = !0; ig.module("plugins.io.multitouch-input").defines(function() { ig.MultitouchInput = ig.Class.extend({ isStart: !1, touches: [], multitouchCapable: !1, lastEventUp: null, start: function() { this.isStart || (this.isStart = !0, navigator.maxTouchPoints && 1 < navigator.maxTouchPoints && (this.multitouchCapable = !0), ig.ua.touchDevice && (window.navigator.msPointerEnabled && (ig.system.canvas.addEventListener("MSPointerDown", this.touchdown.bind(this), !1), ig.system.canvas.addEventListener("MSPointerUp", this.touchup.bind(this), !1), ig.system.canvas.addEventListener("MSPointerMove", this.touchmove.bind(this), !1), ig.system.canvas.style.msContentZooming = "none", ig.system.canvas.style.msTouchAction = "none"), ig.system.canvas.addEventListener("touchstart", this.touchdown.bind(this), !1), ig.system.canvas.addEventListener("touchend", this.touchup.bind(this), !1), ig.system.canvas.addEventListener("touchmove", this.touchmove.bind(this), !1))) }, touchmove: function(b) { if (ig.ua.touchDevice) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth, d = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight, c = ig.system.scale * (c / ig.system.realWidth), d = ig.system.scale * (d / ig.system.realHeight); if (b.touches) { for (; 0 < this.touches.length;) this.touches.pop(); !this.multitouchCapable && 1 < b.touches.length && (this.multitouchCapable = !0); var e = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect()); for (var f = 0; f < b.touches.length; f++) { var j = b.touches[f]; j && this.touches.push({ x: (j.clientX - e.left) / c, y: (j.clientY - e.top) / d }) } } else this.windowMove(b) } }, touchdown: function(b) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth, d = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight, c = ig.system.scale * (c / ig.system.realWidth), d = ig.system.scale * (d / ig.system.realHeight); if (window.navigator.msPointerEnabled) this.windowKeyDown(b); else if (ig.ua.touchDevice && b.touches) { for (; 0 < this.touches.length;) this.touches.pop(); !this.multitouchCapable && 1 < b.touches.length && (this.multitouchCapable = !0); var e = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect()); for (var f = 0; f < b.touches.length; f++) { var j = b.touches[f]; j && this.touches.push({ x: (j.clientX - e.left) / c, y: (j.clientY - e.top) / d }) } } }, touchup: function(b) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth; parseInt(ig.system.canvas.offsetHeight); c = ig.system.scale * (c / ig.system.realWidth); if (window.navigator.msPointerEnabled) this.windowKeyUp(b); else { this.lastEventUp = b; var d = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect()); if (ig.ua.touchDevice) { b = (b.changedTouches[0].clientX - d.left) / c; for (c = 0; c < this.touches.length; c++) this.touches[c].x >= b - 40 && this.touches[c].x <= b + 40 && this.touches.splice(c, 1) } } }, windowKeyDown: function(b) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth, d = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight, c = ig.system.scale * (c / ig.system.realWidth), d = ig.system.scale * (d / ig.system.realHeight); if (window.navigator.msPointerEnabled) { var e = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect()); b = b.changedTouches ? b.changedTouches : [b]; for (var f = 0; f < b.length; ++f) { for (var j = b[f], q = "undefined" != typeof j.identifier ? j.identifier : "undefined" != typeof j.pointerId ? j.pointerId : 1, n = (j.clientX - e.left) / c, j = (j.clientY - e.top) / d, g = 0; g < this.touches.length; ++g) this.touches[g].identifier == q && this.touches.splice(g, 1); this.touches.push({ x: n, y: j, identifier: q }) } for (c = 0; c < this.touches.length; c++); } }, windowKeyUp: function(b) { b = "undefined" != typeof b.identifier ? b.identifier : "undefined" != typeof b.pointerId ? b.pointerId : 1; for (var c = 0; c < this.touches.length; ++c) this.touches[c].identifier == b && this.touches.splice(c, 1); for (; 0 < this.touches.length;) this.touches.pop() }, windowMove: function(b) { var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth, d = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight, c = ig.system.scale * (c / ig.system.realWidth), d = ig.system.scale * (d / ig.system.realHeight), e = { left: 0, top: 0 }; ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect()); if (window.navigator.msPointerEnabled) for (var f = "undefined" != typeof b.identifier ? b.identifier : "undefined" != typeof b.pointerId ? b.pointerId : 1, j = 0; j < this.touches.length; ++j) if (this.touches[j].identifier == f) { var q = (b.clientY - e.top) / d; this.touches[j].x = (b.clientX - e.left) / c; this.touches[j].y = q } } }) }); ig.baked = !0; ig.module("plugins.io.io-manager").requires("plugins.io.storage", "plugins.io.mouse", "plugins.io.keyboard", "plugins.io.gamepad", "plugins.io.multitouch", "plugins.io.multitouch-input", "plugins.io.gamepad-input").defines(function() { IoManager = ig.Class.extend({ storage: null, localStorageSupport: !1, gamekey: "TeamKaboom", mouse: null, keyboard: null, multitouch: null, gamepad: null, init: function() { ig.multitouchInput = new ig.MultitouchInput; ig.gamepadInput = new ig.GamepadInput; this.unbindAll(); this.initStorage(); this.initMouse(); this.initKeyboard() }, unbindAll: function() { ig.input.unbindAll(); ig.gamepadInput.unbindAll() }, initStorage: function() { this._supportsLocalStorage() && (this.storage = new ig.Storage) }, initMouse: function() { this.mouse = new Mouse }, initKeyboard: function() { this.keyboard = new Keyboard }, initMultitouch: function() { this.multitouch = new Multitouch }, initGamepad: function() { this.gamepad = new Gamepad }, press: function(b) { return ig.input.pressed(b) || this.gamepad.press(b) ? !0 : !1 }, held: function(b) { return ig.input.state(b) || this.gamepad.state(b) ? !0 : !1 }, release: function(b) { return ig.input.released(b) || this.gamepad.released(b) ? !0 : !1 }, getClickPos: function() { return this.mouse.getPos() }, getTouchesPos: function() { return this.multitouch.getTouchesPos() }, checkOverlap: function(b, c, d, e, f) { return b.x > c + e || b.x < c || b.y > d + f || b.y < d ? !1 : !0 }, _supportsLocalStorage: function() { try { return localStorage.setItem("test", "test"), localStorage.removeItem("test"), this.localStorageSupport = "localStorage" in window && null !== window.localStorage } catch (b) { return this.localStorageSupport } }, storageIsSet: function(b) { return !this.localStorageSupport ? null : this.storage.isSet(b) }, storageGet: function(b) { return !this.localStorageSupport ? null : this.storage.get(b) }, storageSet: function(b, c) { if (!this.localStorageSupport) return null; this.storage.set(b, c) }, assert: function(b, c, d) { if (c !== d) throw "actualValue:" + c + " not equal to testValue:" + d + " at " + b; } }) }); ig.baked = !0; ig.module("plugins.splash-loader").requires("impact.loader", "impact.animation").defines(function() { ig.SplashLoader = ig.Loader.extend({ // burgor 3kh0 splashDesktop: new ig.Image("media/graphics/menu/background.png"), loadBlack: new ig.Image("media/graphics/menu/loadingblack.png"), loadGreen: new ig.Image("media/graphics/menu/loadinggreen.png"), logo: new ig.Image("media/graphics/menu/logo.png"), assets: [new ig.Image("media/graphics/backgrounds/desktop/background.jpg"), new ig.Image("media/graphics/backgrounds/mobile/background.jpg"), new ig.Image("media/graphics/gameplay/background_1.png"), new ig.Image("media/graphics/gameplay/background_2.png"), new ig.Image("media/graphics/gameplay/background_3.png"), new ig.Image("media/graphics/gameplay/ball/ballwhite.png"), new ig.Image("media/graphics/gameplay/ballcount.png"), new ig.Image("media/graphics/gameplay/blackbar.png"), new ig.Image("media/graphics/gameplay/bonusstar.png"), new ig.Image("media/graphics/gameplay/bonusstarbg.png"), new ig.Image("media/graphics/gameplay/btbuy.png"), new ig.Image("media/graphics/gameplay/btcontinue.png"), new ig.Image("media/graphics/gameplay/btexitdemo.png"), new ig.Image("media/graphics/gameplay/bthome.png"), new ig.Image("media/graphics/gameplay/bthomebig.png"), new ig.Image("media/graphics/gameplay/btplay.png"), new ig.Image("media/graphics/gameplay/btplay2.png"), new ig.Image("media/graphics/gameplay/btresume.png"), new ig.Image("media/graphics/gameplay/bttryagain.png"), new ig.Image("media/graphics/gameplay/bttutorial.png"), new ig.Image("media/graphics/gameplay/cloud1.png"), new ig.Image("media/graphics/gameplay/cloud2.png"), new ig.Image("media/graphics/gameplay/cloud3.png"), new ig.Image("media/graphics/gameplay/compas.png"), new ig.Image("media/graphics/gameplay/cornerbg.png"), new ig.Image("media/graphics/gameplay/darkbg.png"), new ig.Image("media/graphics/gameplay/direction.png"), new ig.Image("media/graphics/gameplay/dragarrow.png"), new ig.Image("media/graphics/gameplay/dragarrow2.png"), new ig.Image("media/graphics/gameplay/flag.png"), new ig.Image("media/graphics/gameplay/go.png"), new ig.Image("media/graphics/gameplay/greenbar.png"), new ig.Image("media/graphics/gameplay/hole.png"), new ig.Image("media/graphics/gameplay/money.png"), new ig.Image("media/graphics/gameplay/pandora.png"), new ig.Image("media/graphics/gameplay/pause.png"), new ig.Image("media/graphics/gameplay/player/hit1.png"), new ig.Image("media/graphics/gameplay/player/hit1low.png"), new ig.Image("media/graphics/gameplay/player/hit1lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit1rev.png"), new ig.Image("media/graphics/gameplay/player/hit2.png"), new ig.Image("media/graphics/gameplay/player/hit2low.png"), new ig.Image("media/graphics/gameplay/player/hit2lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit2rev.png"), new ig.Image("media/graphics/gameplay/player/hit3.png"), new ig.Image("media/graphics/gameplay/player/hit3low.png"), new ig.Image("media/graphics/gameplay/player/hit3lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit3rev.png"), new ig.Image("media/graphics/gameplay/player/hit4.png"), new ig.Image("media/graphics/gameplay/player/hit4low.png"), new ig.Image("media/graphics/gameplay/player/hit4lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit4rev.png"), new ig.Image("media/graphics/gameplay/player/hit5.png"), new ig.Image("media/graphics/gameplay/player/hit5low.png"), new ig.Image("media/graphics/gameplay/player/hit5lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit5rev.png"), new ig.Image("media/graphics/gameplay/player/hit6.png"), new ig.Image("media/graphics/gameplay/player/hit6low.png"), new ig.Image("media/graphics/gameplay/player/hit6lowrev.png"), new ig.Image("media/graphics/gameplay/player/hit6rev.png"), new ig.Image("media/graphics/gameplay/popuppausebg.png"), new ig.Image("media/graphics/gameplay/resultboard.png"), new ig.Image("media/graphics/gameplay/rock.png"), new ig.Image("media/graphics/gameplay/rock2.png"), new ig.Image("media/graphics/gameplay/shopbg.png"), new ig.Image("media/graphics/gameplay/shopbg2.png"), new ig.Image("media/graphics/gameplay/star/blue.png"), new ig.Image("media/graphics/gameplay/star/green.png"), new ig.Image("media/graphics/gameplay/star/purple.png"), new ig.Image("media/graphics/gameplay/star/white.png"), new ig.Image("media/graphics/gameplay/star/yellow.png"), new ig.Image("media/graphics/gameplay/turn_left.png"), new ig.Image("media/graphics/gameplay/turn_right.png"), new ig.Image("media/graphics/gameplay/water_bottom.png"), new ig.Image("media/graphics/gameplay/water_top.png"), new ig.Image("media/graphics/close-button.png"), new ig.Image("media/graphics/close-button.png"), new ig.Image("media/graphics/menu/arrow_left.png"), new ig.Image("media/graphics/menu/arrow_right.png"), new ig.Image("media/graphics/menu/background.png"), new ig.Image("media/graphics/menu/ball_1.png"), new ig.Image("media/graphics/menu/ball_2.png"), new ig.Image("media/graphics/menu/ball_3.png"), new ig.Image("media/graphics/menu/ball_4.png"), new ig.Image("media/graphics/menu/ball_5.png"), new ig.Image("media/graphics/menu/ball_6.png"), new ig.Image("media/graphics/menu/bgtext.png"), new ig.Image("media/graphics/menu/bt_close_popup.png"), new ig.Image("media/graphics/menu/btmoregames.png"), new ig.Image("media/graphics/menu/btmusic.png"), new ig.Image("media/graphics/menu/btplay.png"), new ig.Image("media/graphics/menu/btshop.png"), new ig.Image("media/graphics/menu/btsound.png"), new ig.Image("media/graphics/menu/bttutorial.png"), new ig.Image("media/graphics/menu/handtouch.png"), new ig.Image("media/graphics/menu/hat_black.png"), new ig.Image("media/graphics/menu/hat_bunny.png"), new ig.Image("media/graphics/menu/hat_chrown.png"), new ig.Image("media/graphics/menu/hat_empty.png"), new ig.Image("media/graphics/menu/hat_pirate.png"), new ig.Image("media/graphics/menu/hat_witch.png"), new ig.Image("media/graphics/menu/loadingblack.png"), new ig.Image("media/graphics/menu/loadinggreen.png"), new ig.Image("media/graphics/menu/logo.png"), new ig.Image("media/graphics/misc/invisible.png"), new ig.Image("media/graphics/orientate/landscape.jpg"), new ig.Image("media/graphics/orientate/portrait.jpg"), new ig.Image("media/graphics/orientate/scroll_down.png"), new ig.Image("media/graphics/overlays/close-button.png"), new ig.Image("media/graphics/overlays/close-button2.png"), new ig.Image("media/graphics/splash/desktop/cover.jpg"), new ig.Image("media/graphics/splash/mobile/cover-start.jpg"), new ig.Image("media/graphics/splash/mobile/cover.jpg"), new ig.Image("media/graphics/sprites/btn_more_games.png"), new ig.Image("media/graphics/sprites/door.png")], init: function(b, c) { this.parent(b, c); ig.apiHandler.run("MJSPreroll") }, end: function() { this.parent(); if (ig.ua.mobile) { var b = ig.domHandler.getElementById("#play"); ig.domHandler.show(b) } ig.system.setGame(MyGame) }, setupCustomAnimation: function() { this.customAnim = new ig.Animation(this.customAnim, 0.05, [0, 1, 2, 3, 4, 5]); this.customAnim.currentFrame = 0; ig.loadingScreen = this; ig.loadingScreen.animationTimer = window.setInterval("ig.loadingScreen.animate()", 100) }, animate: function() { this.customAnim.currentFrame < this.customAnim.sequence.length ? this.customAnim.currentFrame++ : this.customAnim.currentFrame = 0; this.customAnim.gotoFrame(this.customAnim.currentFrame) }, draw: function() { this._drawStatus += (this.status - this._drawStatus) / 5; ig.system.context.fillStyle = "#000"; ig.system.context.fillRect(0, 0, ig.system.width, ig.system.height); this.splashDesktop.draw(0, 0); this.logo.draw(170, 20); this.loadBlack.draw(320, 420); this.loadGreen.draw(320, 421, 1, 1, 320 * this._drawStatus, 19); var b = (100 * this._drawStatus).toFixed(0).toString() + "%"; ig.system.context.fillStyle = "#ffffff"; ig.system.context.font = "30px FredokaOne"; ig.system.context.textAlign = "center"; ig.system.context.fillText(b, 480, 480) } }) }); ig.baked = !0; ig.module("plugins.tween").requires("impact.entity").defines(function() { Array.prototype.indexOf || (Array.prototype.indexOf = function(b) { for (var c = 0; c < this.length; ++c) if (this[c] === b) return c; return -1 }); ig.Entity.prototype.tweens = []; ig.Entity.prototype._preTweenUpdate = ig.Entity.prototype.update; ig.Entity.prototype.update = function() { this._preTweenUpdate(); if (0 < this.tweens.length) { for (var b = [], c = 0; c < this.tweens.length; c++) this.tweens[c].update(), this.tweens[c].complete || b.push(this.tweens[c]); this.tweens = b } }; ig.Entity.prototype.tween = function(b, c, d) { b = new ig.Tween(this, b, c, d); this.tweens.push(b); return b }; ig.Entity.prototype.pauseTweens = function() { for (var b = 0; b < this.tweens.length; b++) this.tweens[b].pause() }; ig.Entity.prototype.resumeTweens = function() { for (var b = 0; b < this.tweens.length; b++) this.tweens[b].resume() }; ig.Entity.prototype.stopTweens = function(b) { for (var c = 0; c < this.tweens.length; c++) this.tweens[c].stop(b) }; ig.Tween = function(b, c, d, e) { var f = {}, j = {}, q = {}, n = 0, g = !1, y = !1, A = !1; this.duration = d; this.paused = this.complete = !1; this.easing = ig.Tween.Easing.Linear.EaseNone; this.onComplete = !1; this.loop = this.delay = 0; this.loopCount = -1; ig.merge(this, e); this.loopNum = this.loopCount; this.chain = function(b) { A = b }; this.initEnd = function(b, c, d) { if ("object" !== typeof c[b]) d[b] = c[b]; else for (subprop in c[b]) d[b] || (d[b] = {}), this.initEnd(subprop, c[b], d[b]) }; this.initStart = function(b, c, d, e) { if ("object" !== typeof d[b]) "undefined" !== typeof c[b] && (e[b] = d[b]); else for (subprop in d[b]) e[b] || (e[b] = {}), "undefined" !== typeof c[b] && this.initStart(subprop, c[b], d[b], e[b]) }; this.start = function() { this.paused = this.complete = !1; this.loopNum = this.loopCount; n = 0; - 1 == b.tweens.indexOf(this) && b.tweens.push(this); y = !0; g = new ig.Timer; for (var d in c) this.initEnd(d, c, j); for (d in j) this.initStart(d, j, b, f), this.initDelta(d, q, b, j) }; this.initDelta = function(b, c, d, e) { if ("object" !== typeof e[b]) c[b] = e[b] - d[b]; else for (subprop in e[b]) c[b] || (c[b] = {}), this.initDelta(subprop, c[b], d[b], e[b]) }; this.propUpdate = function(b, c, d, e, g) { if ("object" !== typeof d[b]) c[b] = "undefined" != typeof d[b] ? d[b] + e[b] * g : c[b]; else for (subprop in d[b]) this.propUpdate(subprop, c[b], d[b], e[b], g) }; this.propSet = function(b, c, d) { if ("object" !== typeof c[b]) d[b] = c[b]; else for (subprop in c[b]) d[b] || (d[b] = {}), this.propSet(subprop, c[b], d[b]) }; this.update = function() { if (!y) return !1; if (this.delay) { if (g.delta() < this.delay) return; this.delay = 0; g.reset() } if (this.paused || this.complete) return !1; var c = (g.delta() + n) / this.duration, c = 1 < c ? 1 : c, d = this.easing(c); for (property in q) this.propUpdate(property, b, f, q, d); if (1 <= c) { if (0 == this.loopNum || !this.loop) { this.complete = !0; if (this.onComplete) this.onComplete(); A && A.start(); return !1 } if (this.loop == ig.Tween.Loop.Revert) { for (property in f) this.propSet(property, f, b); n = 0; g.reset(); - 1 != this.loopNum && this.loopNum-- } else if (this.loop == ig.Tween.Loop.Reverse) { c = {}; d = {}; ig.merge(c, j); ig.merge(d, f); ig.merge(f, c); ig.merge(j, d); for (property in j) this.initDelta(property, q, b, j); n = 0; g.reset(); - 1 != this.loopNum && this.loopNum-- } } }; this.pause = function() { this.paused = !0; n += g.delta() }; this.resume = function() { this.paused = !1; g.reset() }; this.stop = function(b) { b && (this.loop = this.complete = this.paused = !1, n += d, this.update()); this.complete = !0 // 3kh0 on top } }; ig.Tween.Loop = { Revert: 1, Reverse: 2 }; ig.Tween.Easing = { Linear: {}, Quadratic: {}, Cubic: {}, Quartic: {}, Quintic: {}, Sinusoidal: {}, Exponential: {}, Circular: {}, Elastic: {}, Back: {}, Bounce: {} }; ig.Tween.Easing.Linear.EaseNone = function(b) { return b }; ig.Tween.Easing.Quadratic.EaseIn = function(b) { return b * b }; ig.Tween.Easing.Quadratic.EaseOut = function(b) { return -b * (b - 2) }; ig.Tween.Easing.Quadratic.EaseInOut = function(b) { return 1 > (b *= 2) ? 0.5 * b * b : -0.5 * (--b * (b - 2) - 1) }; ig.Tween.Easing.Cubic.EaseIn = function(b) { return b * b * b }; ig.Tween.Easing.Cubic.EaseOut = function(b) { return --b * b * b + 1 }; ig.Tween.Easing.Cubic.EaseInOut = function(b) { return 1 > (b *= 2) ? 0.5 * b * b * b : 0.5 * ((b -= 2) * b * b + 2) }; ig.Tween.Easing.Quartic.EaseIn = function(b) { return b * b * b * b }; ig.Tween.Easing.Quartic.EaseOut = function(b) { return -(--b * b * b * b - 1) }; ig.Tween.Easing.Quartic.EaseInOut = function(b) { return 1 > (b *= 2) ? 0.5 * b * b * b * b : -0.5 * ((b -= 2) * b * b * b - 2) }; ig.Tween.Easing.Quintic.EaseIn = function(b) { return b * b * b * b * b }; ig.Tween.Easing.Quintic.EaseOut = function(b) { return (b -= 1) * b * b * b * b + 1 }; ig.Tween.Easing.Quintic.EaseInOut = function(b) { return 1 > (b *= 2) ? 0.5 * b * b * b * b * b : 0.5 * ((b -= 2) * b * b * b * b + 2) }; ig.Tween.Easing.Sinusoidal.EaseIn = function(b) { return -Math.cos(b * Math.PI / 2) + 1 }; ig.Tween.Easing.Sinusoidal.EaseOut = function(b) { return Math.sin(b * Math.PI / 2) }; ig.Tween.Easing.Sinusoidal.EaseInOut = function(b) { return -0.5 * (Math.cos(Math.PI * b) - 1) }; ig.Tween.Easing.Exponential.EaseIn = function(b) { return 0 == b ? 0 : Math.pow(2, 10 * (b - 1)) }; ig.Tween.Easing.Exponential.EaseOut = function(b) { return 1 == b ? 1 : -Math.pow(2, -10 * b) + 1 }; ig.Tween.Easing.Exponential.EaseInOut = function(b) { return 0 == b ? 0 : 1 == b ? 1 : 1 > (b *= 2) ? 0.5 * Math.pow(2, 10 * (b - 1)) : 0.5 * (-Math.pow(2, -10 * (b - 1)) + 2) }; ig.Tween.Easing.Circular.EaseIn = function(b) { return -(Math.sqrt(1 - b * b) - 1) }; ig.Tween.Easing.Circular.EaseOut = function(b) { return Math.sqrt(1 - --b * b) }; ig.Tween.Easing.Circular.EaseInOut = function(b) { return 1 > (b /= 0.5) ? -0.5 * (Math.sqrt(1 - b * b) - 1) : 0.5 * (Math.sqrt(1 - (b -= 2) * b) + 1) }; ig.Tween.Easing.Elastic.EaseIn = function(b) { var c, d = 0.1, e = 0.4; if (0 == b) return 0; if (1 == b) return 1; e || (e = 0.3); !d || 1 > d ? (d = 1, c = e / 4) : c = e / (2 * Math.PI) * Math.asin(1 / d); return -(d * Math.pow(2, 10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / e)) }; ig.Tween.Easing.Elastic.EaseOut = function(b) { var c, d = 0.1, e = 0.4; if (0 == b) return 0; if (1 == b) return 1; e || (e = 0.3); !d || 1 > d ? (d = 1, c = e / 4) : c = e / (2 * Math.PI) * Math.asin(1 / d); return d * Math.pow(2, -10 * b) * Math.sin(2 * (b - c) * Math.PI / e) + 1 }; ig.Tween.Easing.Elastic.EaseInOut = function(b) { var c, d = 0.1, e = 0.4; if (0 == b) return 0; if (1 == b) return 1; e || (e = 0.3); !d || 1 > d ? (d = 1, c = e / 4) : c = e / (2 * Math.PI) * Math.asin(1 / d); return 1 > (b *= 2) ? -0.5 * d * Math.pow(2, 10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / e) : 0.5 * d * Math.pow(2, -10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / e) + 1 }; ig.Tween.Easing.Back.EaseIn = function(b) { return b * b * (2.70158 * b - 1.70158) }; ig.Tween.Easing.Back.EaseOut = function(b) { return (b -= 1) * b * (2.70158 * b + 1.70158) + 1 }; ig.Tween.Easing.Back.EaseInOut = function(b) { return 1 > (b *= 2) ? 0.5 * b * b * (3.5949095 * b - 2.5949095) : 0.5 * ((b -= 2) * b * (3.5949095 * b + 2.5949095) + 2) }; ig.Tween.Easing.Bounce.EaseIn = function(b) { return 1 - ig.Tween.Easing.Bounce.EaseOut(1 - b) }; ig.Tween.Easing.Bounce.EaseOut = function(b) { return (b /= 1) < 1 / 2.75 ? 7.5625 * b * b : b < 2 / 2.75 ? 7.5625 * (b -= 1.5 / 2.75) * b + 0.75 : b < 2.5 / 2.75 ? 7.5625 * (b -= 2.25 / 2.75) * b + 0.9375 : 7.5625 * (b -= 2.625 / 2.75) * b + 0.984375 }; ig.Tween.Easing.Bounce.EaseInOut = function(b) { return 0.5 > b ? 0.5 * ig.Tween.Easing.Bounce.EaseIn(2 * b) : 0.5 * ig.Tween.Easing.Bounce.EaseOut(2 * b - 1) + 0.5 } }); ig.baked = !0; ig.module("plugins.url-parameters").defines(function() { ig.UrlParameters = ig.Class.extend({ init: function() { switch (getQueryVariable("iphone")) { case "true": ig.ua.iPhone = !0, console.log("iPhone mode") } var b = getQueryVariable("webview"); if (b) switch (b) { case "true": ig.ua.is_uiwebview = !0, console.log("webview mode") } if (b = getQueryVariable("debug")) switch (b) { case "true": ig.game.showDebugMenu(), console.log("debug mode") } switch (getQueryVariable("view")) { case "stats": ig.game.resetPlayerStats(), ig.game.endGame() } getQueryVariable("ad") } }) }); ig.baked = !0; ig.module("plugins.director").requires("impact.impact").defines(function() { ig.Director = ig.Class.extend({ init: function(b, c) { this.game = b; this.levels = []; this.currentLevel = 0; this.append(c) }, loadLevel: function(b) { for (var c in ig.sizeHandler.dynamicClickableEntityDivs) { var d = ig.domHandler.getElementById("#" + c); ig.domHandler.hide(d) } this.currentLevel = b; this.game.loadLevel(this.levels[b]); return !0 }, loadLevelWithoutEntities: function(b) { this.currentLevel = b; this.game.loadLevelWithoutEntities(this.levels[b]); return !0 }, append: function(b) { newLevels = []; return "object" === typeof b ? (b.constructor === [].constructor ? newLevels = b : newLevels[0] = b, this.levels = this.levels.concat(newLevels), !0) : !1 }, nextLevel: function() { return this.currentLevel + 1 < this.levels.length ? this.loadLevel(this.currentLevel + 1) : !1 }, previousLevel: function() { return 0 <= this.currentLevel - 1 ? this.loadLevel(this.currentLevel - 1) : !1 }, jumpTo: function(b) { var c = null; for (i = 0; i < this.levels.length; i++) this.levels[i] == b && (c = i); return 0 <= c ? this.loadLevel(c) : !1 }, firstLevel: function() { return this.loadLevel(0) }, lastLevel: function() { return this.loadLevel(this.levels.length - 1) }, reloadLevel: function() { return this.loadLevel(this.currentLevel) } }) }); ig.baked = !0; ig.module("plugins.impact-storage").requires("impact.game").defines(function() { ig.Storage = ig.Class.extend({ staticInstantiate: function() { return !ig.Storage.instance ? null : ig.Storage.instance }, init: function() { ig.Storage.instance = this }, isCapable: function() { return "undefined" !== typeof window.localStorage }, isSet: function(b) { return null !== this.get(b) }, initUnset: function(b, c) { null === this.get(b) && this.set(b, c) }, get: function(b) { if (!this.isCapable()) return null; try { return JSON.parse(localStorage.getItem(b)) } catch (c) { return window.localStorage.getItem(b) } }, getInt: function(b) { return ~~this.get(b) }, getFloat: function(b) { return parseFloat(this.get(b)) }, getBool: function(b) { return !!this.get(b) }, key: function(b) { return this.isCapable() ? window.localStorage.key(b) : null }, set: function(b, c) { if (!this.isCapable()) return null; try { window.localStorage.setItem(b, JSON.stringify(c)) } catch (d) { console.log(d) } }, setHighest: function(b, c) { c > this.getFloat(b) && this.set(b, c) }, remove: function(b) { if (!this.isCapable()) return null; window.localStorage.removeItem(b) }, clear: function() { if (!this.isCapable()) return null; window.localStorage.clear() } }) }); ig.baked = !0; ig.module("plugins.fake-storage").requires("impact.game").defines(function() { ig.FakeStorage = ig.Class.extend({ tempData: {}, init: function() { ig.FakeStorage.instance = this }, initUnset: function(b, c) { null === this.get(b) && this.set(b, c) }, set: function(b, c) { this.tempData[b] = JSON.stringify(c) }, setHighest: function(b, c) { c > this.getFloat(b) && this.set(b, c) }, get: function(b) { return "undefined" == typeof this.tempData[b] ? null : JSON.parse(this.tempData[b]) }, getInt: function(b) { return ~~this.get(b) }, getFloat: function(b) { return parseFloat(this.get(b)) }, getBool: function(b) { return !!this.get(b) }, isSet: function(b) { return null !== this.get(b) }, remove: function() { delete this.tempData.key }, clear: function() { this.tempData = {} } }) }); ig.baked = !0; ig.module("plugins.scale").requires("impact.entity").defines(function() { ig.Entity.inject({ scale: { x: 1, y: 1 }, _offset: { x: 0, y: 0 }, _scale: { x: 1, y: 1 }, _size: { x: 0, y: 0 }, init: function(b, c, d) { this.parent(b, c, d); this._offset.x = this.offset.x; this._offset.y = this.offset.y; this._size.x = this.size.x; this._size.y = this.size.y; this.setScale(this.scale.x, this.scale.y) }, draw: function() { var b = ig.system.context; b.save(); b.translate(ig.system.getDrawPos(this.pos.x.round() - this.offset.x - ig.game.screen.x), ig.system.getDrawPos(this.pos.y.round() - this.offset.y - ig.game.screen.y)); b.scale(this._scale.x, this._scale.y); this.currentAnim && this.currentAnim.draw(0, 0); b.restore() }, setScale: function(b, c) { var d = this.size.x, e = this.size.y; this.scale.x = b || this.scale.x; this.scale.y = c || this.scale.y; this._scale.x = this.scale.x / ig.system.scale; this._scale.y = this.scale.y / ig.system.scale; this.offset.x = this._offset.x * this._scale.x; this.offset.y = this._offset.y * this._scale.y; this.size.x = this._size.x * this._scale.x; this.size.y = this._size.y * this._scale.y; this.pos.x += (d - this.size.x) / 2; this.pos.y += (e - this.size.y) / 2 } }) }); ig.baked = !0; ig.module("plugins.animation-scaling").requires("impact.animation").defines(function() { ig.Animation.inject({ scale: { x: 1, y: 1 }, draw: function(b, c) { var d = ig.system.scale; ig.system.context.save(); var e = b + this.sheet.width / 2, f = c + this.sheet.height / 2; ig.system.context.translate(e * d, f * d); ig.system.context.scale(this.scale.x, this.scale.y); ig.system.context.translate(-e * d, -f * d); this.parent(b, c); ig.system.context.restore() } }) }); var Box2D = { SCALE: 0.1 }; (function(b, c) { function d() {}!(Object.prototype.defineProperty instanceof Function) && Object.prototype.__defineGetter__ instanceof Function && Object.prototype.__defineSetter__ instanceof Function && (Object.defineProperty = function(b, c, d) { d.get instanceof Function && b.__defineGetter__(c, d.get); d.set instanceof Function && b.__defineSetter__(c, d.set) }); b.inherit = function(b, c) { d.prototype = c.prototype; b.prototype = new d; b.prototype.constructor = b }; b.generateCallback = function(b, c) { return function() { c.apply(b, arguments) } }; b.NVector = function(b) { b === c && (b = 0); for (var d = Array(b || 0), j = 0; j < b; ++j) d[j] = 0; return d }; b.is = function(b, d) { return null === b ? !1 : d instanceof Function && b instanceof d || b.constructor.__implements != c && b.constructor.__implements[d] ? !0 : !1 }; b.parseUInt = function(b) { return Math.abs(parseInt(b)) } })(Box2D); var Vector = Array, Vector_a2j_Number = Box2D.NVector; "undefined" === typeof Box2D && (Box2D = {}); "undefined" === typeof Box2D.Collision && (Box2D.Collision = {}); "undefined" === typeof Box2D.Collision.Shapes && (Box2D.Collision.Shapes = {}); "undefined" === typeof Box2D.Common && (Box2D.Common = {}); "undefined" === typeof Box2D.Common.Math && (Box2D.Common.Math = {}); "undefined" === typeof Box2D.Dynamics && (Box2D.Dynamics = {}); "undefined" === typeof Box2D.Dynamics.Contacts && (Box2D.Dynamics.Contacts = {}); "undefined" === typeof Box2D.Dynamics.Controllers && (Box2D.Dynamics.Controllers = {}); "undefined" === typeof Box2D.Dynamics.Joints && (Box2D.Dynamics.Joints = {}); (function() { function b() { b.b2AABB.apply(this, arguments) } function c() { c.b2Bound.apply(this, arguments) } function d() { d.b2BoundValues.apply(this, arguments); this.constructor === d && this.b2BoundValues.apply(this, arguments) } function e() { e.b2Collision.apply(this, arguments) } function f() { f.b2ContactID.apply(this, arguments); this.constructor === f && this.b2ContactID.apply(this, arguments) } function j() { j.b2ContactPoint.apply(this, arguments) } function q() { q.b2Distance.apply(this, arguments) } function n() { n.b2DistanceInput.apply(this, arguments) } function g() { g.b2DistanceOutput.apply(this, arguments) } function y() { y.b2DistanceProxy.apply(this, arguments) } function A() { A.b2DynamicTree.apply(this, arguments); this.constructor === A && this.b2DynamicTree.apply(this, arguments) } function z() { z.b2DynamicTreeBroadPhase.apply(this, arguments) } function B() { B.b2DynamicTreeNode.apply(this, arguments) } function C() { C.b2DynamicTreePair.apply(this, arguments) } function G() { G.b2Manifold.apply(this, arguments); this.constructor === G && this.b2Manifold.apply(this, arguments) } function I() { I.b2ManifoldPoint.apply(this, arguments); this.constructor === I && this.b2ManifoldPoint.apply(this, arguments) } function u() { u.b2Point.apply(this, arguments) } function L() { L.b2RayCastInput.apply(this, arguments); this.constructor === L && this.b2RayCastInput.apply(this, arguments) } function E() { E.b2RayCastOutput.apply(this, arguments) } function Q() { Q.b2Segment.apply(this, arguments) } function M() { M.b2SeparationFunction.apply(this, arguments) } function R() { R.b2Simplex.apply(this, arguments); this.constructor === R && this.b2Simplex.apply(this, arguments) } function K() { K.b2SimplexCache.apply(this, arguments) } function X() { X.b2SimplexVertex.apply(this, arguments) } function P() { P.b2TimeOfImpact.apply(this, arguments) } function S() { S.b2TOIInput.apply(this, arguments) } function Z() { Z.b2WorldManifold.apply(this, arguments); this.constructor === Z && this.b2WorldManifold.apply(this, arguments) } function U() { U.ClipVertex.apply(this, arguments) } function p() { p.Features.apply(this, arguments) } function v() { v.b2CircleShape.apply(this, arguments); this.constructor === v && this.b2CircleShape.apply(this, arguments) } function H() { H.b2EdgeChainDef.apply(this, arguments); this.constructor === H && this.b2EdgeChainDef.apply(this, arguments) } function D() { D.b2EdgeShape.apply(this, arguments); this.constructor === D && this.b2EdgeShape.apply(this, arguments) } function N() { N.b2MassData.apply(this, arguments) } function J() { J.b2PolygonShape.apply(this, arguments); this.constructor === J && this.b2PolygonShape.apply(this, arguments) } function V() { V.b2Shape.apply(this, arguments); this.constructor === V && this.b2Shape.apply(this, arguments) } function l() { l.b2Color.apply(this, arguments); this.constructor === l && this.b2Color.apply(this, arguments) } function r() { r.b2Settings.apply(this, arguments) } function O() { O.b2Mat22.apply(this, arguments); this.constructor === O && this.b2Mat22.apply(this, arguments) } function s() { s.b2Mat33.apply(this, arguments); this.constructor === s && this.b2Mat33.apply(this, arguments) } function F() { F.b2Math.apply(this, arguments) } function aa() { aa.b2Sweep.apply(this, arguments) } function T() { T.b2Transform.apply(this, arguments); this.constructor === T && this.b2Transform.apply(this, arguments) } function ka() { ka.b2Vec2.apply(this, arguments); this.constructor === ka && this.b2Vec2.apply(this, arguments) } function ca() { ca.b2Vec3.apply(this, arguments); this.constructor === ca && this.b2Vec3.apply(this, arguments) } function m() { m.b2Body.apply(this, arguments); this.constructor === m && this.b2Body.apply(this, arguments) } function la() { la.b2BodyDef.apply(this, arguments); this.constructor === la && this.b2BodyDef.apply(this, arguments) } function Ma() { Ma.b2ContactFilter.apply(this, arguments) } function qa() { qa.b2ContactImpulse.apply(this, arguments) } function Ab() { Ab.b2ContactListener.apply(this, arguments) } function cb() { cb.b2ContactManager.apply(this, arguments); this.constructor === cb && this.b2ContactManager.apply(this, arguments) } function Na() { Na.b2DebugDraw.apply(this, arguments); this.constructor === Na && this.b2DebugDraw.apply(this, arguments) } function Bb() { Bb.b2DestructionListener.apply(this, arguments) } function Cb() { Cb.b2FilterData.apply(this, arguments) } function db() { db.b2Fixture.apply(this, arguments); this.constructor === db && this.b2Fixture.apply(this, arguments) } function eb() { eb.b2FixtureDef.apply(this, arguments); this.constructor === eb && this.b2FixtureDef.apply(this, arguments) } function fb() { fb.b2Island.apply(this, arguments); this.constructor === fb && this.b2Island.apply(this, arguments) } function Db() { Db.b2TimeStep.apply(this, arguments) } function gb() { gb.b2World.apply(this, arguments); this.constructor === gb && this.b2World.apply(this, arguments) } function Ca() { Ca.b2CircleContact.apply(this, arguments) } function Oa() { Oa.b2Contact.apply(this, arguments); this.constructor === Oa && this.b2Contact.apply(this, arguments) } function Pa() { Pa.b2ContactConstraint.apply(this, arguments); this.constructor === Pa && this.b2ContactConstraint.apply(this, arguments) } function Eb() { Eb.b2ContactConstraintPoint.apply(this, arguments) } function Qa() { Qa.b2ContactEdge.apply(this, arguments) } function ea() { ea.b2ContactFactory.apply(this, arguments); this.constructor === ea && this.b2ContactFactory.apply(this, arguments) } function Da() { Da.b2ContactRegister.apply(this, arguments) } function ra() { ra.b2ContactResult.apply(this, arguments) } function wa() { wa.b2ContactSolver.apply(this, arguments); this.constructor === wa && this.b2ContactSolver.apply(this, arguments) } function Ea() { Ea.b2EdgeAndCircleContact.apply(this, arguments) } function ga() { ga.b2NullContact.apply(this, arguments); this.constructor === ga && this.b2NullContact.apply(this, arguments) } function sa() { sa.b2PolyAndCircleContact.apply(this, arguments) } function Fa() { Fa.b2PolyAndEdgeContact.apply(this, arguments) } function Ra() { Ra.b2PolygonContact.apply(this, arguments) } function ua() { ua.b2PositionSolverManifold.apply(this, arguments); this.constructor === ua && this.b2PositionSolverManifold.apply(this, arguments) } function hb() { hb.b2BuoyancyController.apply(this, arguments) } function Y() { Y.b2ConstantAccelController.apply(this, arguments) } function Sb() { Sb.b2ConstantForceController.apply(this, arguments) } function wb() { wb.b2Controller.apply(this, arguments) } function vb() { vb.b2ControllerEdge.apply(this, arguments) } function ma() { ma.b2GravityController.apply(this, arguments) } function ib() { ib.b2TensorDampingController.apply(this, arguments) } function Sa() { Sa.b2DistanceJoint.apply(this, arguments); this.constructor === Sa && this.b2DistanceJoint.apply(this, arguments) } function Ta() { Ta.b2DistanceJointDef.apply(this, arguments); this.constructor === Ta && this.b2DistanceJointDef.apply(this, arguments) } function jb() { jb.b2FrictionJoint.apply(this, arguments); this.constructor === jb && this.b2FrictionJoint.apply(this, arguments) } function kb() { kb.b2FrictionJointDef.apply(this, arguments); this.constructor === kb && this.b2FrictionJointDef.apply(this, arguments) } function lb() { lb.b2GearJoint.apply(this, arguments); this.constructor === lb && this.b2GearJoint.apply(this, arguments) } function mb() { mb.b2GearJointDef.apply(this, arguments); this.constructor === mb && this.b2GearJointDef.apply(this, arguments) } function nb() { nb.b2Jacobian.apply(this, arguments) } function Ua() { Ua.b2Joint.apply(this, arguments); this.constructor === Ua && this.b2Joint.apply(this, arguments) } function Ga() { Ga.b2JointDef.apply(this, arguments); this.constructor === Ga && this.b2JointDef.apply(this, arguments) } function ob() { ob.b2JointEdge.apply(this, arguments) } function pb() { pb.b2LineJoint.apply(this, arguments); this.constructor === pb && this.b2LineJoint.apply(this, arguments) } function qb() { qb.b2LineJointDef.apply(this, arguments); this.constructor === qb && this.b2LineJointDef.apply(this, arguments) } function rb() { rb.b2MouseJoint.apply(this, arguments); this.constructor === rb && this.b2MouseJoint.apply(this, arguments) } function Va() { Va.b2MouseJointDef.apply(this, arguments); this.constructor === Va && this.b2MouseJointDef.apply(this, arguments) } function Wa() { Wa.b2PrismaticJoint.apply(this, arguments); this.constructor === Wa && this.b2PrismaticJoint.apply(this, arguments) } function sb() { sb.b2PrismaticJointDef.apply(this, arguments); this.constructor === sb && this.b2PrismaticJointDef.apply(this, arguments) } function W() { W.b2PulleyJoint.apply(this, arguments); this.constructor === W && this.b2PulleyJoint.apply(this, arguments) } function va() { va.b2PulleyJointDef.apply(this, arguments); this.constructor === va && this.b2PulleyJointDef.apply(this, arguments) } function Za() { Za.b2RevoluteJoint.apply(this, arguments); this.constructor === Za && this.b2RevoluteJoint.apply(this, arguments) } function pa() { pa.b2RevoluteJointDef.apply(this, arguments); this.constructor === pa && this.b2RevoluteJointDef.apply(this, arguments) } function xa() { xa.b2WeldJoint.apply(this, arguments); this.constructor === xa && this.b2WeldJoint.apply(this, arguments) } function ya() { ya.b2WeldJointDef.apply(this, arguments); this.constructor === ya && this.b2WeldJointDef.apply(this, arguments) } Box2D.Collision.IBroadPhase = "Box2D.Collision.IBroadPhase"; Box2D.Collision.b2AABB = b; Box2D.Collision.b2Bound = c; Box2D.Collision.b2BoundValues = d; Box2D.Collision.b2Collision = e; Box2D.Collision.b2ContactID = f; Box2D.Collision.b2ContactPoint = j; Box2D.Collision.b2Distance = q; Box2D.Collision.b2DistanceInput = n; Box2D.Collision.b2DistanceOutput = g; Box2D.Collision.b2DistanceProxy = y; Box2D.Collision.b2DynamicTree = A; Box2D.Collision.b2DynamicTreeBroadPhase = z; Box2D.Collision.b2DynamicTreeNode = B; Box2D.Collision.b2DynamicTreePair = C; Box2D.Collision.b2Manifold = G; Box2D.Collision.b2ManifoldPoint = I; Box2D.Collision.b2Point = u; Box2D.Collision.b2RayCastInput = L; Box2D.Collision.b2RayCastOutput = E; Box2D.Collision.b2Segment = Q; Box2D.Collision.b2SeparationFunction = M; Box2D.Collision.b2Simplex = R; Box2D.Collision.b2SimplexCache = K; Box2D.Collision.b2SimplexVertex = X; Box2D.Collision.b2TimeOfImpact = P; Box2D.Collision.b2TOIInput = S; Box2D.Collision.b2WorldManifold = Z; Box2D.Collision.ClipVertex = U; Box2D.Collision.Features = p; Box2D.Collision.Shapes.b2CircleShape = v; Box2D.Collision.Shapes.b2EdgeChainDef = H; Box2D.Collision.Shapes.b2EdgeShape = D; Box2D.Collision.Shapes.b2MassData = N; Box2D.Collision.Shapes.b2PolygonShape = J; Box2D.Collision.Shapes.b2Shape = V; Box2D.Common.b2internal = "Box2D.Common.b2internal"; Box2D.Common.b2Color = l; Box2D.Common.b2Settings = r; Box2D.Common.Math.b2Mat22 = O; Box2D.Common.Math.b2Mat33 = s; Box2D.Common.Math.b2Math = F; Box2D.Common.Math.b2Sweep = aa; Box2D.Common.Math.b2Transform = T; Box2D.Common.Math.b2Vec2 = ka; Box2D.Common.Math.b2Vec3 = ca; Box2D.Dynamics.b2Body = m; Box2D.Dynamics.b2BodyDef = la; Box2D.Dynamics.b2ContactFilter = Ma; Box2D.Dynamics.b2ContactImpulse = qa; Box2D.Dynamics.b2ContactListener = Ab; Box2D.Dynamics.b2ContactManager = cb; Box2D.Dynamics.b2DebugDraw = Na; Box2D.Dynamics.b2DestructionListener = Bb; Box2D.Dynamics.b2FilterData = Cb; Box2D.Dynamics.b2Fixture = db; Box2D.Dynamics.b2FixtureDef = eb; Box2D.Dynamics.b2Island = fb; Box2D.Dynamics.b2TimeStep = Db; Box2D.Dynamics.b2World = gb; Box2D.Dynamics.Contacts.b2CircleContact = Ca; Box2D.Dynamics.Contacts.b2Contact = Oa; Box2D.Dynamics.Contacts.b2ContactConstraint = Pa; Box2D.Dynamics.Contacts.b2ContactConstraintPoint = Eb; Box2D.Dynamics.Contacts.b2ContactEdge = Qa; Box2D.Dynamics.Contacts.b2ContactFactory = ea; Box2D.Dynamics.Contacts.b2ContactRegister = Da; Box2D.Dynamics.Contacts.b2ContactResult = ra; Box2D.Dynamics.Contacts.b2ContactSolver = wa; Box2D.Dynamics.Contacts.b2EdgeAndCircleContact = Ea; Box2D.Dynamics.Contacts.b2NullContact = ga; Box2D.Dynamics.Contacts.b2PolyAndCircleContact = sa; Box2D.Dynamics.Contacts.b2PolyAndEdgeContact = Fa; Box2D.Dynamics.Contacts.b2PolygonContact = Ra; Box2D.Dynamics.Contacts.b2PositionSolverManifold = ua; Box2D.Dynamics.Controllers.b2BuoyancyController = hb; Box2D.Dynamics.Controllers.b2ConstantAccelController = Y; Box2D.Dynamics.Controllers.b2ConstantForceController = Sb; Box2D.Dynamics.Controllers.b2Controller = wb; Box2D.Dynamics.Controllers.b2ControllerEdge = vb; Box2D.Dynamics.Controllers.b2GravityController = ma; Box2D.Dynamics.Controllers.b2TensorDampingController = ib; Box2D.Dynamics.Joints.b2DistanceJoint = Sa; Box2D.Dynamics.Joints.b2DistanceJointDef = Ta; Box2D.Dynamics.Joints.b2FrictionJoint = jb; Box2D.Dynamics.Joints.b2FrictionJointDef = kb; Box2D.Dynamics.Joints.b2GearJoint = lb; Box2D.Dynamics.Joints.b2GearJointDef = mb; Box2D.Dynamics.Joints.b2Jacobian = nb; Box2D.Dynamics.Joints.b2Joint = Ua; Box2D.Dynamics.Joints.b2JointDef = Ga; Box2D.Dynamics.Joints.b2JointEdge = ob; Box2D.Dynamics.Joints.b2LineJoint = pb; Box2D.Dynamics.Joints.b2LineJointDef = qb; Box2D.Dynamics.Joints.b2MouseJoint = rb; Box2D.Dynamics.Joints.b2MouseJointDef = Va; Box2D.Dynamics.Joints.b2PrismaticJoint = Wa; Box2D.Dynamics.Joints.b2PrismaticJointDef = sb; Box2D.Dynamics.Joints.b2PulleyJoint = W; Box2D.Dynamics.Joints.b2PulleyJointDef = va; Box2D.Dynamics.Joints.b2RevoluteJoint = Za; Box2D.Dynamics.Joints.b2RevoluteJointDef = pa; Box2D.Dynamics.Joints.b2WeldJoint = xa; Box2D.Dynamics.Joints.b2WeldJointDef = ya })(); Box2D.postDefs = []; (function() { var b = Box2D.Collision.Shapes.b2CircleShape, c = Box2D.Collision.Shapes.b2PolygonShape, d = Box2D.Collision.Shapes.b2Shape, e = Box2D.Common.b2Settings, f = Box2D.Common.Math.b2Math, j = Box2D.Common.Math.b2Sweep, q = Box2D.Common.Math.b2Transform, n = Box2D.Common.Math.b2Vec2, g = Box2D.Collision.b2AABB, y = Box2D.Collision.b2Bound, A = Box2D.Collision.b2BoundValues, z = Box2D.Collision.b2Collision, B = Box2D.Collision.b2ContactID, C = Box2D.Collision.b2ContactPoint, G = Box2D.Collision.b2Distance, I = Box2D.Collision.b2DistanceInput, u = Box2D.Collision.b2DistanceOutput, L = Box2D.Collision.b2DistanceProxy, E = Box2D.Collision.b2DynamicTree, Q = Box2D.Collision.b2DynamicTreeBroadPhase, M = Box2D.Collision.b2DynamicTreeNode, R = Box2D.Collision.b2DynamicTreePair, K = Box2D.Collision.b2Manifold, X = Box2D.Collision.b2ManifoldPoint, P = Box2D.Collision.b2Point, S = Box2D.Collision.b2RayCastInput, Z = Box2D.Collision.b2RayCastOutput, U = Box2D.Collision.b2Segment, p = Box2D.Collision.b2SeparationFunction, v = Box2D.Collision.b2Simplex, H = Box2D.Collision.b2SimplexCache, D = Box2D.Collision.b2SimplexVertex, N = Box2D.Collision.b2TimeOfImpact, J = Box2D.Collision.b2TOIInput, V = Box2D.Collision.b2WorldManifold, l = Box2D.Collision.ClipVertex, r = Box2D.Collision.Features, O = Box2D.Collision.IBroadPhase; g.b2AABB = function() { this.lowerBound = new n; this.upperBound = new n }; g.prototype.IsValid = function() { var b = this.upperBound.y - this.lowerBound.y; return 0 <= this.upperBound.x - this.lowerBound.x && 0 <= b && this.lowerBound.IsValid() && this.upperBound.IsValid() }; g.prototype.GetCenter = function() { return new n((this.lowerBound.x + this.upperBound.x) / 2, (this.lowerBound.y + this.upperBound.y) / 2) }; g.prototype.GetExtents = function() { return new n((this.upperBound.x - this.lowerBound.x) / 2, (this.upperBound.y - this.lowerBound.y) / 2) }; g.prototype.Contains = function(b) { return this.lowerBound.x <= b.lowerBound.x && this.lowerBound.y <= b.lowerBound.y && b.upperBound.x <= this.upperBound.x && b.upperBound.y <= this.upperBound.y }; g.prototype.RayCast = function(b, c) { var d = -Number.MAX_VALUE, e = Number.MAX_VALUE, l = c.p1.x, g = c.p1.y, m = c.p2.x - c.p1.x, f = c.p2.y - c.p1.y, p = Math.abs(f), r = b.normal, j = 0, n = 0, v = 0; if (Math.abs(m) < Number.MIN_VALUE) { if (l < this.lowerBound.x || this.upperBound.x < l) return !1 } else if (j = 1 / m, n = (this.lowerBound.x - l) * j, j *= this.upperBound.x - l, v = -1, n > j && (v = n, n = j, j = v, v = 1), n > d && (r.x = v, r.y = 0, d = n), e = Math.min(e, j), d > e) return !1; if (p < Number.MIN_VALUE) { if (g < this.lowerBound.y || this.upperBound.y < g) return !1 } else if (j = 1 / f, n = (this.lowerBound.y - g) * j, j *= this.upperBound.y - g, v = -1, n > j && (v = n, n = j, j = v, v = 1), n > d && (r.y = v, r.x = 0, d = n), e = Math.min(e, j), d > e) return !1; b.fraction = d; return !0 }; g.prototype.TestOverlap = function(b) { var c = b.lowerBound.y - this.upperBound.y, d = this.lowerBound.y - b.upperBound.y; return 0 < b.lowerBound.x - this.upperBound.x || 0 < c || 0 < this.lowerBound.x - b.upperBound.x || 0 < d ? !1 : !0 }; g.Combine = function(b, c) { var d = new g; d.Combine(b, c); return d }; g.prototype.Combine = function(b, c) { this.lowerBound.x = Math.min(b.lowerBound.x, c.lowerBound.x); this.lowerBound.y = Math.min(b.lowerBound.y, c.lowerBound.y); this.upperBound.x = Math.max(b.upperBound.x, c.upperBound.x); this.upperBound.y = Math.max(b.upperBound.y, c.upperBound.y) }; y.b2Bound = function() {}; y.prototype.IsLower = function() { return 0 == (this.value & 1) }; y.prototype.IsUpper = function() { return 1 == (this.value & 1) }; y.prototype.Swap = function(b) { var c = this.value, d = this.proxy, e = this.stabbingCount; this.value = b.value; this.proxy = b.proxy; this.stabbingCount = b.stabbingCount; b.value = c; b.proxy = d; b.stabbingCount = e }; A.b2BoundValues = function() {}; A.prototype.b2BoundValues = function() { this.lowerValues = new Vector_a2j_Number; this.lowerValues[0] = 0; this.lowerValues[1] = 0; this.upperValues = new Vector_a2j_Number; this.upperValues[0] = 0; this.upperValues[1] = 0 }; z.b2Collision = function() {}; z.ClipSegmentToLine = function(b, c, d, e) { void 0 === e && (e = 0); var l, g = 0; l = c[0]; var m = l.v; l = c[1]; var f = l.v, p = d.x * m.x + d.y * m.y - e; l = d.x * f.x + d.y * f.y - e; 0 >= p && b[g++].Set(c[0]); 0 >= l && b[g++].Set(c[1]); 0 > p * l && (d = p / (p - l), l = b[g], l = l.v, l.x = m.x + d * (f.x - m.x), l.y = m.y + d * (f.y - m.y), l = b[g], l.id = (0 < p ? c[0] : c[1]).id, ++g); return g }; z.EdgeSeparation = function(b, c, d, e, l) { void 0 === d && (d = 0); parseInt(b.m_vertexCount); var g = b.m_vertices; b = b.m_normals; var m = parseInt(e.m_vertexCount), f = e.m_vertices, p, r; p = c.R; r = b[d]; b = p.col1.x * r.x + p.col2.x * r.y; e = p.col1.y * r.x + p.col2.y * r.y; p = l.R; var j = p.col1.x * b + p.col1.y * e; p = p.col2.x * b + p.col2.y * e; for (var n = 0, v = Number.MAX_VALUE, D = 0; D < m; ++D) r = f[D], r = r.x * j + r.y * p, r < v && (v = r, n = D); r = g[d]; p = c.R; d = c.position.x + (p.col1.x * r.x + p.col2.x * r.y); c = c.position.y + (p.col1.y * r.x + p.col2.y * r.y); r = f[n]; p = l.R; g = l.position.x + (p.col1.x * r.x + p.col2.x * r.y); l = l.position.y + (p.col1.y * r.x + p.col2.y * r.y); return (g - d) * b + (l - c) * e }; z.FindMaxSeparation = function(b, c, d, e, l) { var g = parseInt(c.m_vertexCount), m = c.m_normals, f, p; p = l.R; f = e.m_centroid; var r = l.position.x + (p.col1.x * f.x + p.col2.x * f.y), j = l.position.y + (p.col1.y * f.x + p.col2.y * f.y); p = d.R; f = c.m_centroid; r -= d.position.x + (p.col1.x * f.x + p.col2.x * f.y); j -= d.position.y + (p.col1.y * f.x + p.col2.y * f.y); p = r * d.R.col1.x + j * d.R.col1.y; for (var j = r * d.R.col2.x + j * d.R.col2.y, r = 0, n = -Number.MAX_VALUE, v = 0; v < g; ++v) f = m[v], f = f.x * p + f.y * j, f > n && (n = f, r = v); m = z.EdgeSeparation(c, d, r, e, l); f = parseInt(0 <= r - 1 ? r - 1 : g - 1); p = z.EdgeSeparation(c, d, f, e, l); var j = parseInt(r + 1 < g ? r + 1 : 0), n = z.EdgeSeparation(c, d, j, e, l), D = 0, O = 0; if (p > m && p > n) O = -1, v = f, D = p; else if (n > m) O = 1, v = j, D = n; else return b[0] = r, m; for (;;) if (r = -1 == O ? 0 <= v - 1 ? v - 1 : g - 1 : v + 1 < g ? v + 1 : 0, m = z.EdgeSeparation(c, d, r, e, l), m > D) v = r, D = m; else break; b[0] = v; return D }; z.FindIncidentEdge = function(b, c, d, e, l, g) { void 0 === e && (e = 0); parseInt(c.m_vertexCount); var m = c.m_normals, f = parseInt(l.m_vertexCount); c = l.m_vertices; l = l.m_normals; var p; p = d.R; d = m[e]; var m = p.col1.x * d.x + p.col2.x * d.y, r = p.col1.y * d.x + p.col2.y * d.y; p = g.R; d = p.col1.x * m + p.col1.y * r; r = p.col2.x * m + p.col2.y * r; m = d; p = 0; for (var j = Number.MAX_VALUE, n = 0; n < f; ++n) d = l[n], d = m * d.x + r * d.y, d < j && (j = d, p = n); l = parseInt(p); m = parseInt(l + 1 < f ? l + 1 : 0); f = b[0]; d = c[l]; p = g.R; f.v.x = g.position.x + (p.col1.x * d.x + p.col2.x * d.y); f.v.y = g.position.y + (p.col1.y * d.x + p.col2.y * d.y); f.id.features.referenceEdge = e; f.id.features.incidentEdge = l; f.id.features.incidentVertex = 0; f = b[1]; d = c[m]; p = g.R; f.v.x = g.position.x + (p.col1.x * d.x + p.col2.x * d.y); f.v.y = g.position.y + (p.col1.y * d.x + p.col2.y * d.y); f.id.features.referenceEdge = e; f.id.features.incidentEdge = m; f.id.features.incidentVertex = 1 }; z.MakeClipPointVector = function() { var b = new Vector(2); b[0] = new l; b[1] = new l; return b }; z.CollidePolygons = function(b, c, d, l, g) { var f; b.m_pointCount = 0; var m = c.m_radius + l.m_radius; z.s_edgeAO[0] = 0; var p = z.FindMaxSeparation(z.s_edgeAO, c, d, l, g); f = z.s_edgeAO[0]; if (!(p > m)) { var r; z.s_edgeBO[0] = 0; var j = z.FindMaxSeparation(z.s_edgeBO, l, g, c, d); r = z.s_edgeBO[0]; if (!(j > m)) { var n = 0, v = 0; j > 0.98 * p + 0.0010 ? (p = l, l = c, c = g, n = r, b.m_type = K.e_faceB, v = 1) : (p = c, c = d, d = g, n = f, b.m_type = K.e_faceA, v = 0); f = z.s_incidentEdge; z.FindIncidentEdge(f, p, c, n, l, d); r = parseInt(p.m_vertexCount); g = p.m_vertices; var p = g[n], D; D = n + 1 < r ? g[parseInt(n + 1)] : g[0]; n = z.s_localTangent; n.Set(D.x - p.x, D.y - p.y); n.Normalize(); g = z.s_localNormal; g.x = n.y; g.y = -n.x; l = z.s_planePoint; l.Set(0.5 * (p.x + D.x), 0.5 * (p.y + D.y)); j = z.s_tangent; r = c.R; j.x = r.col1.x * n.x + r.col2.x * n.y; j.y = r.col1.y * n.x + r.col2.y * n.y; var O = z.s_tangent2; O.x = -j.x; O.y = -j.y; n = z.s_normal; n.x = j.y; n.y = -j.x; var u = z.s_v11, H = z.s_v12; u.x = c.position.x + (r.col1.x * p.x + r.col2.x * p.y); u.y = c.position.y + (r.col1.y * p.x + r.col2.y * p.y); H.x = c.position.x + (r.col1.x * D.x + r.col2.x * D.y); H.y = c.position.y + (r.col1.y * D.x + r.col2.y * D.y); c = n.x * u.x + n.y * u.y; r = j.x * H.x + j.y * H.y + m; D = z.s_clipPoints1; p = z.s_clipPoints2; H = z.ClipSegmentToLine(D, f, O, -j.x * u.x - j.y * u.y + m); if (!(2 > H) && (H = z.ClipSegmentToLine(p, D, j, r), !(2 > H))) { b.m_localPlaneNormal.SetV(g); b.m_localPoint.SetV(l); for (l = g = 0; l < e.b2_maxManifoldPoints; ++l) f = p[l], n.x * f.v.x + n.y * f.v.y - c <= m && (j = b.m_points[g], r = d.R, O = f.v.x - d.position.x, u = f.v.y - d.position.y, j.m_localPoint.x = O * r.col1.x + u * r.col1.y, j.m_localPoint.y = O * r.col2.x + u * r.col2.y, j.m_id.Set(f.id), j.m_id.features.flip = v, ++g); b.m_pointCount = g } } } }; z.CollideCircles = function(b, c, d, e, l) { b.m_pointCount = 0; var g, f; g = d.R; f = c.m_p; var p = d.position.x + (g.col1.x * f.x + g.col2.x * f.y); d = d.position.y + (g.col1.y * f.x + g.col2.y * f.y); g = l.R; f = e.m_p; p = l.position.x + (g.col1.x * f.x + g.col2.x * f.y) - p; l = l.position.y + (g.col1.y * f.x + g.col2.y * f.y) - d; g = c.m_radius + e.m_radius; p * p + l * l > g * g || (b.m_type = K.e_circles, b.m_localPoint.SetV(c.m_p), b.m_localPlaneNormal.SetZero(), b.m_pointCount = 1, b.m_points[0].m_localPoint.SetV(e.m_p), b.m_points[0].m_id.key = 0) }; z.CollidePolygonAndCircle = function(b, c, d, e, l) { var g = b.m_pointCount = 0, f = 0, p, r; r = l.R; p = e.m_p; var j = l.position.y + (r.col1.y * p.x + r.col2.y * p.y), g = l.position.x + (r.col1.x * p.x + r.col2.x * p.y) - d.position.x, f = j - d.position.y; r = d.R; d = g * r.col1.x + f * r.col1.y; r = g * r.col2.x + f * r.col2.y; var n = 0, j = -Number.MAX_VALUE; l = c.m_radius + e.m_radius; var v = parseInt(c.m_vertexCount), D = c.m_vertices; c = c.m_normals; for (var O = 0; O < v; ++O) { p = D[O]; g = d - p.x; f = r - p.y; p = c[O]; g = p.x * g + p.y * f; if (g > l) return; g > j && (j = g, n = O) } g = parseInt(n); f = parseInt(g + 1 < v ? g + 1 : 0); p = D[g]; D = D[f]; if (j < Number.MIN_VALUE) b.m_pointCount = 1, b.m_type = K.e_faceA, b.m_localPlaneNormal.SetV(c[n]), b.m_localPoint.x = 0.5 * (p.x + D.x), b.m_localPoint.y = 0.5 * (p.y + D.y); else if (j = (d - D.x) * (p.x - D.x) + (r - D.y) * (p.y - D.y), 0 >= (d - p.x) * (D.x - p.x) + (r - p.y) * (D.y - p.y)) { if ((d - p.x) * (d - p.x) + (r - p.y) * (r - p.y) > l * l) return; b.m_pointCount = 1; b.m_type = K.e_faceA; b.m_localPlaneNormal.x = d - p.x; b.m_localPlaneNormal.y = r - p.y; b.m_localPlaneNormal.Normalize(); b.m_localPoint.SetV(p) } else if (0 >= j) { if ((d - D.x) * (d - D.x) + (r - D.y) * (r - D.y) > l * l) return; b.m_pointCount = 1; b.m_type = K.e_faceA; b.m_localPlaneNormal.x = d - D.x; b.m_localPlaneNormal.y = r - D.y; b.m_localPlaneNormal.Normalize(); b.m_localPoint.SetV(D) } else { n = 0.5 * (p.x + D.x); p = 0.5 * (p.y + D.y); j = (d - n) * c[g].x + (r - p) * c[g].y; if (j > l) return; b.m_pointCount = 1; b.m_type = K.e_faceA; b.m_localPlaneNormal.x = c[g].x; b.m_localPlaneNormal.y = c[g].y; b.m_localPlaneNormal.Normalize(); b.m_localPoint.Set(n, p) } b.m_points[0].m_localPoint.SetV(e.m_p); b.m_points[0].m_id.key = 0 }; z.TestOverlap = function(b, c) { var d = c.lowerBound, e = b.upperBound, l = d.x - e.x, g = d.y - e.y, d = b.lowerBound, e = c.upperBound, f = d.y - e.y; return 0 < l || 0 < g || 0 < d.x - e.x || 0 < f ? !1 : !0 }; Box2D.postDefs.push(function() { Box2D.Collision.b2Collision.s_incidentEdge = z.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints1 = z.MakeClipPointVector(); Box2D.Collision.b2Collision.s_clipPoints2 = z.MakeClipPointVector(); Box2D.Collision.b2Collision.s_edgeAO = new Vector_a2j_Number(1); Box2D.Collision.b2Collision.s_edgeBO = new Vector_a2j_Number(1); Box2D.Collision.b2Collision.s_localTangent = new n; Box2D.Collision.b2Collision.s_localNormal = new n; Box2D.Collision.b2Collision.s_planePoint = new n; Box2D.Collision.b2Collision.s_normal = new n; Box2D.Collision.b2Collision.s_tangent = new n; Box2D.Collision.b2Collision.s_tangent2 = new n; Box2D.Collision.b2Collision.s_v11 = new n; Box2D.Collision.b2Collision.s_v12 = new n; Box2D.Collision.b2Collision.b2CollidePolyTempVec = new n; Box2D.Collision.b2Collision.b2_nullFeature = 255 }); B.b2ContactID = function() { this.features = new r }; B.prototype.b2ContactID = function() { this.features._m_id = this }; B.prototype.Set = function(b) { this.key = b._key }; B.prototype.Copy = function() { var b = new B; b.key = this.key; return b }; Object.defineProperty(B.prototype, "key", { enumerable: !1, configurable: !0, get: function() { return this._key } }); Object.defineProperty(B.prototype, "key", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._key = b; this.features._referenceEdge = this._key & 255; this.features._incidentEdge = (this._key & 65280) >> 8 & 255; this.features._incidentVertex = (this._key & 16711680) >> 16 & 255; this.features._flip = (this._key & 4278190080) >> 24 & 255 } }); C.b2ContactPoint = function() { this.position = new n; this.velocity = new n; this.normal = new n; this.id = new B }; G.b2Distance = function() {}; G.Distance = function(b, c, d) { ++G.b2_gjkCalls; var l = d.proxyA, g = d.proxyB, p = d.transformA, m = d.transformB, r = G.s_simplex; r.ReadCache(c, l, p, g, m); var j = r.m_vertices, v = G.s_saveA, D = G.s_saveB, O = 0; r.GetClosestPoint().LengthSquared(); for (var u = 0, H, N = 0; 20 > N;) { O = r.m_count; for (u = 0; u < O; u++) v[u] = j[u].indexA, D[u] = j[u].indexB; switch (r.m_count) { case 1: break; case 2: r.Solve2(); break; case 3: r.Solve3(); break; default: e.b2Assert(!1) } if (3 == r.m_count) break; H = r.GetClosestPoint(); H.LengthSquared(); u = r.GetSearchDirection(); if (u.LengthSquared() < Number.MIN_VALUE * Number.MIN_VALUE) break; H = j[r.m_count]; H.indexA = l.GetSupport(f.MulTMV(p.R, u.GetNegative())); H.wA = f.MulX(p, l.GetVertex(H.indexA)); H.indexB = g.GetSupport(f.MulTMV(m.R, u)); H.wB = f.MulX(m, g.GetVertex(H.indexB)); H.w = f.SubtractVV(H.wB, H.wA); ++N; ++G.b2_gjkIters; for (var V = !1, u = 0; u < O; u++) if (H.indexA == v[u] && H.indexB == D[u]) { V = !0; break } if (V) break; ++r.m_count } G.b2_gjkMaxIters = f.Max(G.b2_gjkMaxIters, N); r.GetWitnessPoints(b.pointA, b.pointB); b.distance = f.SubtractVV(b.pointA, b.pointB).Length(); b.iterations = N; r.WriteCache(c); d.useRadii && (c = l.m_radius, g = g.m_radius, b.distance > c + g && b.distance > Number.MIN_VALUE ? (b.distance -= c + g, d = f.SubtractVV(b.pointB, b.pointA), d.Normalize(), b.pointA.x += c * d.x, b.pointA.y += c * d.y, b.pointB.x -= g * d.x, b.pointB.y -= g * d.y) : (H = new n, H.x = 0.5 * (b.pointA.x + b.pointB.x), H.y = 0.5 * (b.pointA.y + b.pointB.y), b.pointA.x = b.pointB.x = H.x, b.pointA.y = b.pointB.y = H.y, b.distance = 0)) }; Box2D.postDefs.push(function() { Box2D.Collision.b2Distance.s_simplex = new v; Box2D.Collision.b2Distance.s_saveA = new Vector_a2j_Number(3); Box2D.Collision.b2Distance.s_saveB = new Vector_a2j_Number(3) }); I.b2DistanceInput = function() {}; u.b2DistanceOutput = function() { this.pointA = new n; this.pointB = new n }; L.b2DistanceProxy = function() {}; L.prototype.Set = function(l) { switch (l.GetType()) { case d.e_circleShape: l = l instanceof b ? l : null; this.m_vertices = new Vector(1, !0); this.m_vertices[0] = l.m_p; this.m_count = 1; this.m_radius = l.m_radius; break; case d.e_polygonShape: l = l instanceof c ? l : null; this.m_vertices = l.m_vertices; this.m_count = l.m_vertexCount; this.m_radius = l.m_radius; break; default: e.b2Assert(!1) } }; L.prototype.GetSupport = function(b) { for (var c = 0, d = this.m_vertices[0].x * b.x + this.m_vertices[0].y * b.y, l = 1; l < this.m_count; ++l) { var e = this.m_vertices[l].x * b.x + this.m_vertices[l].y * b.y; e > d && (c = l, d = e) } return c }; L.prototype.GetSupportVertex = function(b) { for (var c = 0, d = this.m_vertices[0].x * b.x + this.m_vertices[0].y * b.y, l = 1; l < this.m_count; ++l) { var e = this.m_vertices[l].x * b.x + this.m_vertices[l].y * b.y; e > d && (c = l, d = e) } return this.m_vertices[c] }; L.prototype.GetVertexCount = function() { return this.m_count }; L.prototype.GetVertex = function(b) { void 0 === b && (b = 0); e.b2Assert(0 <= b && b < this.m_count); return this.m_vertices[b] }; E.b2DynamicTree = function() {}; E.prototype.b2DynamicTree = function() { this.m_freeList = this.m_root = null; this.m_insertionCount = this.m_path = 0 }; E.prototype.CreateProxy = function(b, c) { var d = this.AllocateNode(), l = e.b2_aabbExtension, g = e.b2_aabbExtension; d.aabb.lowerBound.x = b.lowerBound.x - l; d.aabb.lowerBound.y = b.lowerBound.y - g; d.aabb.upperBound.x = b.upperBound.x + l; d.aabb.upperBound.y = b.upperBound.y + g; d.userData = c; this.InsertLeaf(d); return d }; E.prototype.DestroyProxy = function(b) { this.RemoveLeaf(b); this.FreeNode(b) }; E.prototype.MoveProxy = function(b, c, d) { e.b2Assert(b.IsLeaf()); if (b.aabb.Contains(c)) return !1; this.RemoveLeaf(b); var l = e.b2_aabbExtension + e.b2_aabbMultiplier * (0 < d.x ? d.x : -d.x); d = e.b2_aabbExtension + e.b2_aabbMultiplier * (0 < d.y ? d.y : -d.y); b.aabb.lowerBound.x = c.lowerBound.x - l; b.aabb.lowerBound.y = c.lowerBound.y - d; b.aabb.upperBound.x = c.upperBound.x + l; b.aabb.upperBound.y = c.upperBound.y + d; this.InsertLeaf(b); return !0 }; E.prototype.Rebalance = function(b) { void 0 === b && (b = 0); if (null != this.m_root) for (var c = 0; c < b; c++) { for (var d = this.m_root, l = 0; !1 == d.IsLeaf();) d = this.m_path >> l & 1 ? d.child2 : d.child1, l = l + 1 & 31; ++this.m_path; this.RemoveLeaf(d); this.InsertLeaf(d) } }; E.prototype.GetFatAABB = function(b) { return b.aabb }; E.prototype.GetUserData = function(b) { return b.userData }; E.prototype.Query = function(b, c) { if (null != this.m_root) { var d = new Vector, l = 0; for (d[l++] = this.m_root; 0 < l;) { var e = d[--l]; if (e.aabb.TestOverlap(c)) if (e.IsLeaf()) { if (!b(e)) break } else d[l++] = e.child1, d[l++] = e.child2 } } }; E.prototype.RayCast = function(b, c) { if (null != this.m_root) { var d = c.p1, l = c.p2, e = f.SubtractVV(d, l); e.Normalize(); var e = f.CrossFV(1, e), p = f.AbsV(e), m = c.maxFraction, r = new g, j = 0, n = 0, j = d.x + m * (l.x - d.x), n = d.y + m * (l.y - d.y); r.lowerBound.x = Math.min(d.x, j); r.lowerBound.y = Math.min(d.y, n); r.upperBound.x = Math.max(d.x, j); r.upperBound.y = Math.max(d.y, n); var v = new Vector, D = 0; for (v[D++] = this.m_root; 0 < D;) if (m = v[--D], !1 != m.aabb.TestOverlap(r) && (j = m.aabb.GetCenter(), n = m.aabb.GetExtents(), !(0 < Math.abs(e.x * (d.x - j.x) + e.y * (d.y - j.y)) - p.x * n.x - p.y * n.y))) if (m.IsLeaf()) { j = new S; j.p1 = c.p1; j.p2 = c.p2; j.maxFraction = c.maxFraction; m = b(j, m); if (0 == m) break; 0 < m && (j = d.x + m * (l.x - d.x), n = d.y + m * (l.y - d.y), r.lowerBound.x = Math.min(d.x, j), r.lowerBound.y = Math.min(d.y, n), r.upperBound.x = Math.max(d.x, j), r.upperBound.y = Math.max(d.y, n)) } else v[D++] = m.child1, v[D++] = m.child2 } }; E.prototype.AllocateNode = function() { if (this.m_freeList) { var b = this.m_freeList; this.m_freeList = b.parent; b.parent = null; b.child1 = null; b.child2 = null; return b } return new M }; E.prototype.FreeNode = function(b) { b.parent = this.m_freeList; this.m_freeList = b }; E.prototype.InsertLeaf = function(b) { ++this.m_insertionCount; if (null == this.m_root) this.m_root = b, this.m_root.parent = null; else { var c = b.aabb.GetCenter(), d = this.m_root; if (!1 == d.IsLeaf()) { do var l = d.child1, d = d.child2, d = Math.abs((l.aabb.lowerBound.x + l.aabb.upperBound.x) / 2 - c.x) + Math.abs((l.aabb.lowerBound.y + l.aabb.upperBound.y) / 2 - c.y) < Math.abs((d.aabb.lowerBound.x + d.aabb.upperBound.x) / 2 - c.x) + Math.abs((d.aabb.lowerBound.y + d.aabb.upperBound.y) / 2 - c.y) ? l : d; while (!1 == d.IsLeaf()) } c = d.parent; l = this.AllocateNode(); l.parent = c; l.userData = null; l.aabb.Combine(b.aabb, d.aabb); if (c) { d.parent.child1 == d ? c.child1 = l : c.child2 = l; l.child1 = d; l.child2 = b; d.parent = l; b.parent = l; do { if (c.aabb.Contains(l.aabb)) break; c.aabb.Combine(c.child1.aabb, c.child2.aabb); l = c; c = c.parent } while (c) } else l.child1 = d, l.child2 = b, d.parent = l, this.m_root = b.parent = l } }; E.prototype.RemoveLeaf = function(b) { if (b == this.m_root) this.m_root = null; else { var c = b.parent, d = c.parent; b = c.child1 == b ? c.child2 : c.child1; if (d) { d.child1 == c ? d.child1 = b : d.child2 = b; b.parent = d; for (this.FreeNode(c); d;) { c = d.aabb; d.aabb = g.Combine(d.child1.aabb, d.child2.aabb); if (c.Contains(d.aabb)) break; d = d.parent } } else this.m_root = b, b.parent = null, this.FreeNode(c) } }; Q.b2DynamicTreeBroadPhase = function() { this.m_tree = new E; this.m_moveBuffer = new Vector; this.m_pairBuffer = new Vector; this.m_pairCount = 0 }; Q.prototype.CreateProxy = function(b, c) { var d = this.m_tree.CreateProxy(b, c); ++this.m_proxyCount; this.BufferMove(d); return d }; Q.prototype.DestroyProxy = function(b) { this.UnBufferMove(b); --this.m_proxyCount; this.m_tree.DestroyProxy(b) }; Q.prototype.MoveProxy = function(b, c, d) { this.m_tree.MoveProxy(b, c, d) && this.BufferMove(b) }; Q.prototype.TestOverlap = function(b, c) { var d = this.m_tree.GetFatAABB(b), l = this.m_tree.GetFatAABB(c); return d.TestOverlap(l) }; Q.prototype.GetUserData = function(b) { return this.m_tree.GetUserData(b) }; Q.prototype.GetFatAABB = function(b) { return this.m_tree.GetFatAABB(b) }; Q.prototype.GetProxyCount = function() { return this.m_proxyCount }; Q.prototype.UpdatePairs = function(b) { for (var c = this, d = c.m_pairCount = 0, l, d = 0; d < c.m_moveBuffer.length; ++d) { l = c.m_moveBuffer[d]; var e = c.m_tree.GetFatAABB(l); c.m_tree.Query(function(b) { if (b == l) return !0; c.m_pairCount == c.m_pairBuffer.length && (c.m_pairBuffer[c.m_pairCount] = new R); var d = c.m_pairBuffer[c.m_pairCount]; d.proxyA = b < l ? b : l; d.proxyB = b >= l ? b : l; ++c.m_pairCount; return !0 }, e) } for (d = c.m_moveBuffer.length = 0; d < c.m_pairCount;) { var e = c.m_pairBuffer[d], g = c.m_tree.GetUserData(e.proxyA), f = c.m_tree.GetUserData(e.proxyB); b(g, f); for (++d; d < c.m_pairCount;) { g = c.m_pairBuffer[d]; if (g.proxyA != e.proxyA || g.proxyB != e.proxyB) break; ++d } } }; Q.prototype.Query = function(b, c) { this.m_tree.Query(b, c) }; Q.prototype.RayCast = function(b, c) { this.m_tree.RayCast(b, c) }; Q.prototype.Validate = function() {}; Q.prototype.Rebalance = function(b) { void 0 === b && (b = 0); this.m_tree.Rebalance(b) }; Q.prototype.BufferMove = function(b) { this.m_moveBuffer[this.m_moveBuffer.length] = b }; Q.prototype.UnBufferMove = function(b) { this.m_moveBuffer.splice(parseInt(this.m_moveBuffer.indexOf(b)), 1) }; Q.prototype.ComparePairs = function() { return 0 }; Q.__implements = {}; Q.__implements[O] = !0; M.b2DynamicTreeNode = function() { this.aabb = new g }; M.prototype.IsLeaf = function() { return null == this.child1 }; R.b2DynamicTreePair = function() {}; K.b2Manifold = function() { this.m_pointCount = 0 }; K.prototype.b2Manifold = function() { this.m_points = new Vector(e.b2_maxManifoldPoints); for (var b = 0; b < e.b2_maxManifoldPoints; b++) this.m_points[b] = new X; this.m_localPlaneNormal = new n; this.m_localPoint = new n }; K.prototype.Reset = function() { for (var b = 0; b < e.b2_maxManifoldPoints; b++)(this.m_points[b] instanceof X ? this.m_points[b] : null).Reset(); this.m_localPlaneNormal.SetZero(); this.m_localPoint.SetZero(); this.m_pointCount = this.m_type = 0 }; K.prototype.Set = function(b) { this.m_pointCount = b.m_pointCount; for (var c = 0; c < e.b2_maxManifoldPoints; c++)(this.m_points[c] instanceof X ? this.m_points[c] : null).Set(b.m_points[c]); this.m_localPlaneNormal.SetV(b.m_localPlaneNormal); this.m_localPoint.SetV(b.m_localPoint); this.m_type = b.m_type }; K.prototype.Copy = function() { var b = new K; b.Set(this); return b }; Box2D.postDefs.push(function() { Box2D.Collision.b2Manifold.e_circles = 1; Box2D.Collision.b2Manifold.e_faceA = 2; Box2D.Collision.b2Manifold.e_faceB = 4 }); X.b2ManifoldPoint = function() { this.m_localPoint = new n; this.m_id = new B }; X.prototype.b2ManifoldPoint = function() { this.Reset() }; X.prototype.Reset = function() { this.m_localPoint.SetZero(); this.m_tangentImpulse = this.m_normalImpulse = 0; this.m_id.key = 0 }; X.prototype.Set = function(b) { this.m_localPoint.SetV(b.m_localPoint); this.m_normalImpulse = b.m_normalImpulse; this.m_tangentImpulse = b.m_tangentImpulse; this.m_id.Set(b.m_id) }; P.b2Point = function() { this.p = new n }; P.prototype.Support = function() { return this.p }; P.prototype.GetFirstVertex = function() { return this.p }; S.b2RayCastInput = function() { this.p1 = new n; this.p2 = new n }; S.prototype.b2RayCastInput = function(b, c, d) { void 0 === b && (b = null); void 0 === c && (c = null); void 0 === d && (d = 1); b && this.p1.SetV(b); c && this.p2.SetV(c); this.maxFraction = d }; Z.b2RayCastOutput = function() { this.normal = new n }; U.b2Segment = function() { this.p1 = new n; this.p2 = new n }; U.prototype.TestSegment = function(b, c, d, l) { void 0 === l && (l = 0); var e = d.p1, g = d.p2.x - e.x, f = d.p2.y - e.y; d = this.p2.y - this.p1.y; var p = -(this.p2.x - this.p1.x), r = 100 * Number.MIN_VALUE, j = -(g * d + f * p); if (j > r) { var n = e.x - this.p1.x, v = e.y - this.p1.y, e = n * d + v * p; if (0 <= e && e <= l * j && (l = -g * v + f * n, -r * j <= l && l <= j * (1 + r))) return e /= j, l = Math.sqrt(d * d + p * p), b[0] = e, c.Set(d / l, p / l), !0 } return !1 }; U.prototype.Extend = function(b) { this.ExtendForward(b); this.ExtendBackward(b) }; U.prototype.ExtendForward = function(b) { var c = this.p2.x - this.p1.x, d = this.p2.y - this.p1.y; b = Math.min(0 < c ? (b.upperBound.x - this.p1.x) / c : 0 > c ? (b.lowerBound.x - this.p1.x) / c : Number.POSITIVE_INFINITY, 0 < d ? (b.upperBound.y - this.p1.y) / d : 0 > d ? (b.lowerBound.y - this.p1.y) / d : Number.POSITIVE_INFINITY); this.p2.x = this.p1.x + c * b; this.p2.y = this.p1.y + d * b }; U.prototype.ExtendBackward = function(b) { var c = -this.p2.x + this.p1.x, d = -this.p2.y + this.p1.y; b = Math.min(0 < c ? (b.upperBound.x - this.p2.x) / c : 0 > c ? (b.lowerBound.x - this.p2.x) / c : Number.POSITIVE_INFINITY, 0 < d ? (b.upperBound.y - this.p2.y) / d : 0 > d ? (b.lowerBound.y - this.p2.y) / d : Number.POSITIVE_INFINITY); this.p1.x = this.p2.x + c * b; this.p1.y = this.p2.y + d * b }; p.b2SeparationFunction = function() { this.m_localPoint = new n; this.m_axis = new n }; p.prototype.Initialize = function(b, c, d, l, g) { this.m_proxyA = c; this.m_proxyB = l; var r = parseInt(b.count); e.b2Assert(0 < r && 3 > r); var m, j, v, D, O = 0, H = 0; 1 == r ? (this.m_type = p.e_points, m = this.m_proxyA.GetVertex(b.indexA[0]), j = this.m_proxyB.GetVertex(b.indexB[0]), r = m, b = d.R, c = d.position.x + (b.col1.x * r.x + b.col2.x * r.y), l = d.position.y + (b.col1.y * r.x + b.col2.y * r.y), r = j, b = g.R, v = g.position.x + (b.col1.x * r.x + b.col2.x * r.y), D = g.position.y + (b.col1.y * r.x + b.col2.y * r.y), this.m_axis.x = v - c, this.m_axis.y = D - l, this.m_axis.Normalize()) : (b.indexB[0] == b.indexB[1] ? (this.m_type = p.e_faceA, c = this.m_proxyA.GetVertex(b.indexA[0]), l = this.m_proxyA.GetVertex(b.indexA[1]), j = this.m_proxyB.GetVertex(b.indexB[0]), this.m_localPoint.x = 0.5 * (c.x + l.x), this.m_localPoint.y = 0.5 * (c.y + l.y), this.m_axis = f.CrossVF(f.SubtractVV(l, c), 1), this.m_axis.Normalize(), r = this.m_axis, b = d.R, O = b.col1.x * r.x + b.col2.x * r.y, H = b.col1.y * r.x + b.col2.y * r.y, r = this.m_localPoint, b = d.R, c = d.position.x + (b.col1.x * r.x + b.col2.x * r.y), l = d.position.y + (b.col1.y * r.x + b.col2.y * r.y), r = j, b = g.R, v = g.position.x + (b.col1.x * r.x + b.col2.x * r.y), D = g.position.y + (b.col1.y * r.x + b.col2.y * r.y), O = (v - c) * O + (D - l) * H) : b.indexA[0] == b.indexA[0] ? (this.m_type = p.e_faceB, v = this.m_proxyB.GetVertex(b.indexB[0]), D = this.m_proxyB.GetVertex(b.indexB[1]), m = this.m_proxyA.GetVertex(b.indexA[0]), this.m_localPoint.x = 0.5 * (v.x + D.x), this.m_localPoint.y = 0.5 * (v.y + D.y), this.m_axis = f.CrossVF(f.SubtractVV(D, v), 1), this.m_axis.Normalize(), r = this.m_axis, b = g.R, O = b.col1.x * r.x + b.col2.x * r.y, H = b.col1.y * r.x + b.col2.y * r.y, r = this.m_localPoint, b = g.R, v = g.position.x + (b.col1.x * r.x + b.col2.x * r.y), D = g.position.y + (b.col1.y * r.x + b.col2.y * r.y), r = m, b = d.R, c = d.position.x + (b.col1.x * r.x + b.col2.x * r.y), l = d.position.y + (b.col1.y * r.x + b.col2.y * r.y), O = (c - v) * O + (l - D) * H) : (c = this.m_proxyA.GetVertex(b.indexA[0]), l = this.m_proxyA.GetVertex(b.indexA[1]), v = this.m_proxyB.GetVertex(b.indexB[0]), D = this.m_proxyB.GetVertex(b.indexB[1]), f.MulX(d, m), m = f.MulMV(d.R, f.SubtractVV(l, c)), f.MulX(g, j), O = f.MulMV(g.R, f.SubtractVV(D, v)), g = m.x * m.x + m.y * m.y, j = O.x * O.x + O.y * O.y, b = f.SubtractVV(O, m), d = m.x * b.x + m.y * b.y, b = O.x * b.x + O.y * b.y, m = m.x * O.x + m.y * O.y, H = g * j - m * m, O = 0, 0 != H && (O = f.Clamp((m * b - d * j) / H, 0, 1)), 0 > (m * O + b) / j && (O = f.Clamp((m - d) / g, 0, 1)), m = new n, m.x = c.x + O * (l.x - c.x), m.y = c.y + O * (l.y - c.y), j = new n, j.x = v.x + O * (D.x - v.x), j.y = v.y + O * (D.y - v.y), 0 == O || 1 == O ? (this.m_type = p.e_faceB, this.m_axis = f.CrossVF(f.SubtractVV(D, v), 1), this.m_axis.Normalize(), this.m_localPoint = j) : (this.m_type = p.e_faceA, this.m_axis = f.CrossVF(f.SubtractVV(l, c), 1), this.m_localPoint = m)), 0 > O && this.m_axis.NegativeSelf()) }; p.prototype.Evaluate = function(b, c) { var d, l, g = 0; switch (this.m_type) { case p.e_points: return d = f.MulTMV(b.R, this.m_axis), l = f.MulTMV(c.R, this.m_axis.GetNegative()), d = this.m_proxyA.GetSupportVertex(d), l = this.m_proxyB.GetSupportVertex(l), d = f.MulX(b, d), l = f.MulX(c, l), (l.x - d.x) * this.m_axis.x + (l.y - d.y) * this.m_axis.y; case p.e_faceA: return g = f.MulMV(b.R, this.m_axis), d = f.MulX(b, this.m_localPoint), l = f.MulTMV(c.R, g.GetNegative()), l = this.m_proxyB.GetSupportVertex(l), l = f.MulX(c, l), (l.x - d.x) * g.x + (l.y - d.y) * g.y; case p.e_faceB: return g = f.MulMV(c.R, this.m_axis), l = f.MulX(c, this.m_localPoint), d = f.MulTMV(b.R, g.GetNegative()), d = this.m_proxyA.GetSupportVertex(d), d = f.MulX(b, d), (d.x - l.x) * g.x + (d.y - l.y) * g.y; default: return e.b2Assert(!1), 0 } }; Box2D.postDefs.push(function() { Box2D.Collision.b2SeparationFunction.e_points = 1; Box2D.Collision.b2SeparationFunction.e_faceA = 2; Box2D.Collision.b2SeparationFunction.e_faceB = 4 }); v.b2Simplex = function() { this.m_v1 = new D; this.m_v2 = new D; this.m_v3 = new D; this.m_vertices = new Vector(3) }; v.prototype.b2Simplex = function() { this.m_vertices[0] = this.m_v1; this.m_vertices[1] = this.m_v2; this.m_vertices[2] = this.m_v3 }; v.prototype.ReadCache = function(b, c, d, l, g) { e.b2Assert(0 <= b.count && 3 >= b.count); var p, m; this.m_count = b.count; for (var r = this.m_vertices, j = 0; j < this.m_count; j++) { var n = r[j]; n.indexA = b.indexA[j]; n.indexB = b.indexB[j]; p = c.GetVertex(n.indexA); m = l.GetVertex(n.indexB); n.wA = f.MulX(d, p); n.wB = f.MulX(g, m); n.w = f.SubtractVV(n.wB, n.wA); n.a = 0 } if (1 < this.m_count && (b = b.metric, p = this.GetMetric(), p < 0.5 * b || 2 * b < p || p < Number.MIN_VALUE)) this.m_count = 0; 0 == this.m_count && (n = r[0], n.indexA = 0, n.indexB = 0, p = c.GetVertex(0), m = l.GetVertex(0), n.wA = f.MulX(d, p), n.wB = f.MulX(g, m), n.w = f.SubtractVV(n.wB, n.wA), this.m_count = 1) }; v.prototype.WriteCache = function(b) { b.metric = this.GetMetric(); b.count = Box2D.parseUInt(this.m_count); for (var c = this.m_vertices, d = 0; d < this.m_count; d++) b.indexA[d] = Box2D.parseUInt(c[d].indexA), b.indexB[d] = Box2D.parseUInt(c[d].indexB) }; v.prototype.GetSearchDirection = function() { switch (this.m_count) { case 1: return this.m_v1.w.GetNegative(); case 2: var b = f.SubtractVV(this.m_v2.w, this.m_v1.w); return 0 < f.CrossVV(b, this.m_v1.w.GetNegative()) ? f.CrossFV(1, b) : f.CrossVF(b, 1); default: return e.b2Assert(!1), new n } }; v.prototype.GetClosestPoint = function() { switch (this.m_count) { case 0: return e.b2Assert(!1), new n; case 1: return this.m_v1.w; case 2: return new n(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y); default: return e.b2Assert(!1), new n } }; v.prototype.GetWitnessPoints = function(b, c) { switch (this.m_count) { case 0: e.b2Assert(!1); break; case 1: b.SetV(this.m_v1.wA); c.SetV(this.m_v1.wB); break; case 2: b.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x; b.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y; c.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x; c.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y; break; case 3: c.x = b.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x; c.y = b.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y; break; default: e.b2Assert(!1) } }; v.prototype.GetMetric = function() { switch (this.m_count) { case 0: return e.b2Assert(!1), 0; case 1: return 0; case 2: return f.SubtractVV(this.m_v1.w, this.m_v2.w).Length(); case 3: return f.CrossVV(f.SubtractVV(this.m_v2.w, this.m_v1.w), f.SubtractVV(this.m_v3.w, this.m_v1.w)); default: return e.b2Assert(!1), 0 } }; v.prototype.Solve2 = function() { var b = this.m_v1.w, c = this.m_v2.w, d = f.SubtractVV(c, b), b = -(b.x * d.x + b.y * d.y); 0 >= b ? this.m_count = this.m_v1.a = 1 : (c = c.x * d.x + c.y * d.y, 0 >= c ? (this.m_count = this.m_v2.a = 1, this.m_v1.Set(this.m_v2)) : (d = 1 / (c + b), this.m_v1.a = c * d, this.m_v2.a = b * d, this.m_count = 2)) }; v.prototype.Solve3 = function() { var b = this.m_v1.w, c = this.m_v2.w, d = this.m_v3.w, l = f.SubtractVV(c, b), e = f.Dot(b, l), g = f.Dot(c, l), e = -e, p = f.SubtractVV(d, b), r = f.Dot(b, p), j = f.Dot(d, p), r = -r, n = f.SubtractVV(d, c), v = f.Dot(c, n), n = f.Dot(d, n), v = -v, p = f.CrossVV(l, p), l = p * f.CrossVV(c, d), d = p * f.CrossVV(d, b), b = p * f.CrossVV(b, c); 0 >= e && 0 >= r ? this.m_count = this.m_v1.a = 1 : 0 < g && 0 < e && 0 >= b ? (j = 1 / (g + e), this.m_v1.a = g * j, this.m_v2.a = e * j, this.m_count = 2) : 0 < j && 0 < r && 0 >= d ? (g = 1 / (j + r), this.m_v1.a = j * g, this.m_v3.a = r * g, this.m_count = 2, this.m_v2.Set(this.m_v3)) : 0 >= g && 0 >= v ? (this.m_count = this.m_v2.a = 1, this.m_v1.Set(this.m_v2)) : 0 >= j && 0 >= n ? (this.m_count = this.m_v3.a = 1, this.m_v1.Set(this.m_v3)) : 0 < n && 0 < v && 0 >= l ? (g = 1 / (n + v), this.m_v2.a = n * g, this.m_v3.a = v * g, this.m_count = 2, this.m_v1.Set(this.m_v3)) : (g = 1 / (l + d + b), this.m_v1.a = l * g, this.m_v2.a = d * g, this.m_v3.a = b * g, this.m_count = 3) }; H.b2SimplexCache = function() { this.indexA = new Vector_a2j_Number(3); this.indexB = new Vector_a2j_Number(3) }; D.b2SimplexVertex = function() {}; D.prototype.Set = function(b) { this.wA.SetV(b.wA); this.wB.SetV(b.wB); this.w.SetV(b.w); this.a = b.a; this.indexA = b.indexA; this.indexB = b.indexB }; N.b2TimeOfImpact = function() {}; N.TimeOfImpact = function(b) { ++N.b2_toiCalls; var c = b.proxyA, d = b.proxyB, l = b.sweepA, g = b.sweepB; e.b2Assert(l.t0 == g.t0); e.b2Assert(1 - l.t0 > Number.MIN_VALUE); var p = c.m_radius + d.m_radius; b = b.tolerance; var r = 0, j = 0, n = 0; N.s_cache.count = 0; for (N.s_distanceInput.useRadii = !1;;) { l.GetTransform(N.s_xfA, r); g.GetTransform(N.s_xfB, r); N.s_distanceInput.proxyA = c; N.s_distanceInput.proxyB = d; N.s_distanceInput.transformA = N.s_xfA; N.s_distanceInput.transformB = N.s_xfB; G.Distance(N.s_distanceOutput, N.s_cache, N.s_distanceInput); if (0 >= N.s_distanceOutput.distance) { r = 1; break } N.s_fcn.Initialize(N.s_cache, c, N.s_xfA, d, N.s_xfB); var v = N.s_fcn.Evaluate(N.s_xfA, N.s_xfB); if (0 >= v) { r = 1; break } 0 == j && (n = v > p ? f.Max(p - b, 0.75 * p) : f.Max(v - b, 0.02 * p)); if (v - n < 0.5 * b) { if (0 == j) { r = 1; break } break } var D = r, O = r, H = 1; l.GetTransform(N.s_xfA, H); g.GetTransform(N.s_xfB, H); var u = N.s_fcn.Evaluate(N.s_xfA, N.s_xfB); if (u >= n) { r = 1; break } for (var V = 0;;) { var J = 0, J = V & 1 ? O + (n - v) * (H - O) / (u - v) : 0.5 * (O + H); l.GetTransform(N.s_xfA, J); g.GetTransform(N.s_xfB, J); var q = N.s_fcn.Evaluate(N.s_xfA, N.s_xfB); if (f.Abs(q - n) < 0.025 * b) { D = J; break } q > n ? (O = J, v = q) : (H = J, u = q); ++V; ++N.b2_toiRootIters; if (50 == V) break } N.b2_toiMaxRootIters = f.Max(N.b2_toiMaxRootIters, V); if (D < (1 + 100 * Number.MIN_VALUE) * r) break; r = D; j++; ++N.b2_toiIters; if (1E3 == j) break } N.b2_toiMaxIters = f.Max(N.b2_toiMaxIters, j); return r }; Box2D.postDefs.push(function() { Box2D.Collision.b2TimeOfImpact.b2_toiCalls = 0; Box2D.Collision.b2TimeOfImpact.b2_toiIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiRootIters = 0; Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters = 0; Box2D.Collision.b2TimeOfImpact.s_cache = new H; Box2D.Collision.b2TimeOfImpact.s_distanceInput = new I; Box2D.Collision.b2TimeOfImpact.s_xfA = new q; Box2D.Collision.b2TimeOfImpact.s_xfB = new q; Box2D.Collision.b2TimeOfImpact.s_fcn = new p; Box2D.Collision.b2TimeOfImpact.s_distanceOutput = new u }); J.b2TOIInput = function() { this.proxyA = new L; this.proxyB = new L; this.sweepA = new j; this.sweepB = new j }; V.b2WorldManifold = function() { this.m_normal = new n }; V.prototype.b2WorldManifold = function() { this.m_points = new Vector(e.b2_maxManifoldPoints); for (var b = 0; b < e.b2_maxManifoldPoints; b++) this.m_points[b] = new n }; V.prototype.Initialize = function(b, c, d, l, e) { void 0 === d && (d = 0); void 0 === e && (e = 0); if (0 != b.m_pointCount) { var g = 0, f, p, r = 0, j = 0, n = 0, v = 0, D = 0; switch (b.m_type) { case K.e_circles: p = c.R; f = b.m_localPoint; g = c.position.x + p.col1.x * f.x + p.col2.x * f.y; c = c.position.y + p.col1.y * f.x + p.col2.y * f.y; p = l.R; f = b.m_points[0].m_localPoint; b = l.position.x + p.col1.x * f.x + p.col2.x * f.y; l = l.position.y + p.col1.y * f.x + p.col2.y * f.y; f = b - g; p = l - c; r = f * f + p * p; r > Number.MIN_VALUE * Number.MIN_VALUE ? (r = Math.sqrt(r), this.m_normal.x = f / r, this.m_normal.y = p / r) : (this.m_normal.x = 1, this.m_normal.y = 0); f = c + d * this.m_normal.y; l -= e * this.m_normal.y; this.m_points[0].x = 0.5 * (g + d * this.m_normal.x + (b - e * this.m_normal.x)); this.m_points[0].y = 0.5 * (f + l); break; case K.e_faceA: p = c.R; f = b.m_localPlaneNormal; r = p.col1.x * f.x + p.col2.x * f.y; j = p.col1.y * f.x + p.col2.y * f.y; p = c.R; f = b.m_localPoint; n = c.position.x + p.col1.x * f.x + p.col2.x * f.y; v = c.position.y + p.col1.y * f.x + p.col2.y * f.y; this.m_normal.x = r; this.m_normal.y = j; for (g = 0; g < b.m_pointCount; g++) p = l.R, f = b.m_points[g].m_localPoint, D = l.position.x + p.col1.x * f.x + p.col2.x * f.y, f = l.position.y + p.col1.y * f.x + p.col2.y * f.y, this.m_points[g].x = D + 0.5 * (d - (D - n) * r - (f - v) * j - e) * r, this.m_points[g].y = f + 0.5 * (d - (D - n) * r - (f - v) * j - e) * j; break; case K.e_faceB: p = l.R; f = b.m_localPlaneNormal; r = p.col1.x * f.x + p.col2.x * f.y; j = p.col1.y * f.x + p.col2.y * f.y; p = l.R; f = b.m_localPoint; n = l.position.x + p.col1.x * f.x + p.col2.x * f.y; v = l.position.y + p.col1.y * f.x + p.col2.y * f.y; this.m_normal.x = -r; this.m_normal.y = -j; for (g = 0; g < b.m_pointCount; g++) p = c.R, f = b.m_points[g].m_localPoint, D = c.position.x + p.col1.x * f.x + p.col2.x * f.y, f = c.position.y + p.col1.y * f.x + p.col2.y * f.y, this.m_points[g].x = D + 0.5 * (e - (D - n) * r - (f - v) * j - d) * r, this.m_points[g].y = f + 0.5 * (e - (D - n) * r - (f - v) * j - d) * j } } }; l.ClipVertex = function() { this.v = new n; this.id = new B }; l.prototype.Set = function(b) { this.v.SetV(b.v); this.id.Set(b.id) }; r.Features = function() {}; Object.defineProperty(r.prototype, "referenceEdge", { enumerable: !1, configurable: !0, get: function() { return this._referenceEdge } }); Object.defineProperty(r.prototype, "referenceEdge", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._referenceEdge = b; this._m_id._key = this._m_id._key & 4294967040 | this._referenceEdge & 255 } }); Object.defineProperty(r.prototype, "incidentEdge", { enumerable: !1, configurable: !0, get: function() { return this._incidentEdge } }); Object.defineProperty(r.prototype, "incidentEdge", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._incidentEdge = b; this._m_id._key = this._m_id._key & 4294902015 | this._incidentEdge << 8 & 65280 } }); Object.defineProperty(r.prototype, "incidentVertex", { enumerable: !1, configurable: !0, get: function() { return this._incidentVertex } }); Object.defineProperty(r.prototype, "incidentVertex", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._incidentVertex = b; this._m_id._key = this._m_id._key & 4278255615 | this._incidentVertex << 16 & 16711680 } }); Object.defineProperty(r.prototype, "flip", { enumerable: !1, configurable: !0, get: function() { return this._flip } }); Object.defineProperty(r.prototype, "flip", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._flip = b; this._m_id._key = this._m_id._key & 16777215 | this._flip << 24 & 4278190080 } }) })(); (function() { var b = Box2D.Common.b2Settings, c = Box2D.Collision.Shapes.b2CircleShape, d = Box2D.Collision.Shapes.b2EdgeChainDef, e = Box2D.Collision.Shapes.b2EdgeShape, f = Box2D.Collision.Shapes.b2MassData, j = Box2D.Collision.Shapes.b2PolygonShape, q = Box2D.Collision.Shapes.b2Shape, n = Box2D.Common.Math.b2Mat22, g = Box2D.Common.Math.b2Math, y = Box2D.Common.Math.b2Transform, A = Box2D.Common.Math.b2Vec2, z = Box2D.Collision.b2Distance, B = Box2D.Collision.b2DistanceInput, C = Box2D.Collision.b2DistanceOutput, G = Box2D.Collision.b2DistanceProxy, I = Box2D.Collision.b2SimplexCache; Box2D.inherit(c, Box2D.Collision.Shapes.b2Shape); c.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype; c.b2CircleShape = function() { Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments); this.m_p = new A }; c.prototype.Copy = function() { var b = new c; b.Set(this); return b }; c.prototype.Set = function(b) { this.__super.Set.call(this, b); Box2D.is(b, c) && this.m_p.SetV((b instanceof c ? b : null).m_p) }; c.prototype.TestPoint = function(b, c) { var d = b.R, e = b.position.x + (d.col1.x * this.m_p.x + d.col2.x * this.m_p.y), d = b.position.y + (d.col1.y * this.m_p.x + d.col2.y * this.m_p.y), e = c.x - e, d = c.y - d; return e * e + d * d <= this.m_radius * this.m_radius }; c.prototype.RayCast = function(b, c, d) { var e = d.R, g = c.p1.x - (d.position.x + (e.col1.x * this.m_p.x + e.col2.x * this.m_p.y)); d = c.p1.y - (d.position.y + (e.col1.y * this.m_p.x + e.col2.y * this.m_p.y)); var e = c.p2.x - c.p1.x, f = c.p2.y - c.p1.y, j = g * e + d * f, n = e * e + f * f, q = j * j - n * (g * g + d * d - this.m_radius * this.m_radius); if (0 > q || n < Number.MIN_VALUE) return !1; j = -(j + Math.sqrt(q)); return 0 <= j && j <= c.maxFraction * n ? (j /= n, b.fraction = j, b.normal.x = g + j * e, b.normal.y = d + j * f, b.normal.Normalize(), !0) : !1 }; c.prototype.ComputeAABB = function(b, c) { var d = c.R, e = c.position.x + (d.col1.x * this.m_p.x + d.col2.x * this.m_p.y), d = c.position.y + (d.col1.y * this.m_p.x + d.col2.y * this.m_p.y); b.lowerBound.Set(e - this.m_radius, d - this.m_radius); b.upperBound.Set(e + this.m_radius, d + this.m_radius) }; c.prototype.ComputeMass = function(c, d) { void 0 === d && (d = 0); c.mass = d * b.b2_pi * this.m_radius * this.m_radius; c.center.SetV(this.m_p); c.I = c.mass * (0.5 * this.m_radius * this.m_radius + (this.m_p.x * this.m_p.x + this.m_p.y * this.m_p.y)) }; c.prototype.ComputeSubmergedArea = function(b, c, d, e) { void 0 === c && (c = 0); d = g.MulX(d, this.m_p); var f = -(g.Dot(b, d) - c); if (f < -this.m_radius + Number.MIN_VALUE) return 0; if (f > this.m_radius) return e.SetV(d), Math.PI * this.m_radius * this.m_radius; c = this.m_radius * this.m_radius; var j = f * f, f = c * (Math.asin(f / this.m_radius) + Math.PI / 2) + f * Math.sqrt(c - j); c = -2 / 3 * Math.pow(c - j, 1.5) / f; e.x = d.x + b.x * c; e.y = d.y + b.y * c; return f }; c.prototype.GetLocalPosition = function() { return this.m_p }; c.prototype.SetLocalPosition = function(b) { this.m_p.SetV(b) }; c.prototype.GetRadius = function() { return this.m_radius }; c.prototype.SetRadius = function(b) { void 0 === b && (b = 0); this.m_radius = b }; c.prototype.b2CircleShape = function(b) { void 0 === b && (b = 0); this.__super.b2Shape.call(this); this.m_type = q.e_circleShape; this.m_radius = b }; d.b2EdgeChainDef = function() {}; d.prototype.b2EdgeChainDef = function() { this.vertexCount = 0; this.isALoop = !0; this.vertices = [] }; Box2D.inherit(e, Box2D.Collision.Shapes.b2Shape); e.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype; e.b2EdgeShape = function() { Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments); this.s_supportVec = new A; this.m_v1 = new A; this.m_v2 = new A; this.m_coreV1 = new A; this.m_coreV2 = new A; this.m_normal = new A; this.m_direction = new A; this.m_cornerDir1 = new A; this.m_cornerDir2 = new A }; e.prototype.TestPoint = function() { return !1 }; e.prototype.RayCast = function(b, c, d) { var e, g = c.p2.x - c.p1.x, f = c.p2.y - c.p1.y; e = d.R; var j = d.position.x + (e.col1.x * this.m_v1.x + e.col2.x * this.m_v1.y), n = d.position.y + (e.col1.y * this.m_v1.x + e.col2.y * this.m_v1.y), q = d.position.y + (e.col1.y * this.m_v2.x + e.col2.y * this.m_v2.y) - n; d = -(d.position.x + (e.col1.x * this.m_v2.x + e.col2.x * this.m_v2.y) - j); e = 100 * Number.MIN_VALUE; var y = -(g * q + f * d); if (y > e) { var j = c.p1.x - j, B = c.p1.y - n, n = j * q + B * d; if (0 <= n && n <= c.maxFraction * y && (c = -g * B + f * j, -e * y <= c && c <= y * (1 + e))) return b.fraction = n / y, c = Math.sqrt(q * q + d * d), b.normal.x = q / c, b.normal.y = d / c, !0 } return !1 }; e.prototype.ComputeAABB = function(b, c) { var d = c.R, e = c.position.x + (d.col1.x * this.m_v1.x + d.col2.x * this.m_v1.y), g = c.position.y + (d.col1.y * this.m_v1.x + d.col2.y * this.m_v1.y), f = c.position.x + (d.col1.x * this.m_v2.x + d.col2.x * this.m_v2.y), d = c.position.y + (d.col1.y * this.m_v2.x + d.col2.y * this.m_v2.y); e < f ? (b.lowerBound.x = e, b.upperBound.x = f) : (b.lowerBound.x = f, b.upperBound.x = e); g < d ? (b.lowerBound.y = g, b.upperBound.y = d) : (b.lowerBound.y = d, b.upperBound.y = g) }; e.prototype.ComputeMass = function(b) { b.mass = 0; b.center.SetV(this.m_v1); b.I = 0 }; e.prototype.ComputeSubmergedArea = function(b, c, d, e) { void 0 === c && (c = 0); var f = new A(b.x * c, b.y * c), j = g.MulX(d, this.m_v1); d = g.MulX(d, this.m_v2); var n = g.Dot(b, j) - c; b = g.Dot(b, d) - c; if (0 < n) { if (0 < b) return 0; j.x = -b / (n - b) * j.x + n / (n - b) * d.x; j.y = -b / (n - b) * j.y + n / (n - b) * d.y } else 0 < b && (d.x = -b / (n - b) * j.x + n / (n - b) * d.x, d.y = -b / (n - b) * j.y + n / (n - b) * d.y); e.x = (f.x + j.x + d.x) / 3; e.y = (f.y + j.y + d.y) / 3; return 0.5 * ((j.x - f.x) * (d.y - f.y) - (j.y - f.y) * (d.x - f.x)) }; e.prototype.GetLength = function() { return this.m_length }; e.prototype.GetVertex1 = function() { return this.m_v1 }; e.prototype.GetVertex2 = function() { return this.m_v2 }; e.prototype.GetCoreVertex1 = function() { return this.m_coreV1 }; e.prototype.GetCoreVertex2 = function() { return this.m_coreV2 }; e.prototype.GetNormalVector = function() { return this.m_normal }; e.prototype.GetDirectionVector = function() { return this.m_direction }; e.prototype.GetCorner1Vector = function() { return this.m_cornerDir1 }; e.prototype.GetCorner2Vector = function() { return this.m_cornerDir2 }; e.prototype.Corner1IsConvex = function() { return this.m_cornerConvex1 }; e.prototype.Corner2IsConvex = function() { return this.m_cornerConvex2 }; e.prototype.GetFirstVertex = function(b) { var c = b.R; return new A(b.position.x + (c.col1.x * this.m_coreV1.x + c.col2.x * this.m_coreV1.y), b.position.y + (c.col1.y * this.m_coreV1.x + c.col2.y * this.m_coreV1.y)) }; e.prototype.GetNextEdge = function() { return this.m_nextEdge }; e.prototype.GetPrevEdge = function() { return this.m_prevEdge }; e.prototype.Support = function(b, c, d) { void 0 === c && (c = 0); void 0 === d && (d = 0); var e = b.R, g = b.position.x + (e.col1.x * this.m_coreV1.x + e.col2.x * this.m_coreV1.y), f = b.position.y + (e.col1.y * this.m_coreV1.x + e.col2.y * this.m_coreV1.y), j = b.position.x + (e.col1.x * this.m_coreV2.x + e.col2.x * this.m_coreV2.y); b = b.position.y + (e.col1.y * this.m_coreV2.x + e.col2.y * this.m_coreV2.y); g * c + f * d > j * c + b * d ? (this.s_supportVec.x = g, this.s_supportVec.y = f) : (this.s_supportVec.x = j, this.s_supportVec.y = b); return this.s_supportVec }; e.prototype.b2EdgeShape = function(c, d) { this.__super.b2Shape.call(this); this.m_type = q.e_edgeShape; this.m_nextEdge = this.m_prevEdge = null; this.m_v1 = c; this.m_v2 = d; this.m_direction.Set(this.m_v2.x - this.m_v1.x, this.m_v2.y - this.m_v1.y); this.m_length = this.m_direction.Normalize(); this.m_normal.Set(this.m_direction.y, -this.m_direction.x); this.m_coreV1.Set(-b.b2_toiSlop * (this.m_normal.x - this.m_direction.x) + this.m_v1.x, -b.b2_toiSlop * (this.m_normal.y - this.m_direction.y) + this.m_v1.y); this.m_coreV2.Set(-b.b2_toiSlop * (this.m_normal.x + this.m_direction.x) + this.m_v2.x, -b.b2_toiSlop * (this.m_normal.y + this.m_direction.y) + this.m_v2.y); this.m_cornerDir1 = this.m_normal; this.m_cornerDir2.Set(-this.m_normal.x, -this.m_normal.y) }; e.prototype.SetPrevEdge = function(b, c, d, e) { this.m_prevEdge = b; this.m_coreV1 = c; this.m_cornerDir1 = d; this.m_cornerConvex1 = e }; e.prototype.SetNextEdge = function(b, c, d, e) { this.m_nextEdge = b; this.m_coreV2 = c; this.m_cornerDir2 = d; this.m_cornerConvex2 = e }; f.b2MassData = function() { this.mass = 0; this.center = new A(0, 0); this.I = 0 }; Box2D.inherit(j, Box2D.Collision.Shapes.b2Shape); j.prototype.__super = Box2D.Collision.Shapes.b2Shape.prototype; j.b2PolygonShape = function() { Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this, arguments) }; j.prototype.Copy = function() { var b = new j; b.Set(this); return b }; j.prototype.Set = function(b) { this.__super.Set.call(this, b); if (Box2D.is(b, j)) { b = b instanceof j ? b : null; this.m_centroid.SetV(b.m_centroid); this.m_vertexCount = b.m_vertexCount; this.Reserve(this.m_vertexCount); for (var c = 0; c < this.m_vertexCount; c++) this.m_vertices[c].SetV(b.m_vertices[c]), this.m_normals[c].SetV(b.m_normals[c]) } }; j.prototype.SetAsArray = function(b, c) { void 0 === c && (c = 0); for (var d = new Vector, e = 0, g, e = 0; e < b.length; ++e) g = b[e], d.push(g); this.SetAsVector(d, c) }; j.AsArray = function(b, c) { void 0 === c && (c = 0); var d = new j; d.SetAsArray(b, c); return d }; j.prototype.SetAsVector = function(c, d) { void 0 === d && (d = 0); 0 == d && (d = c.length); b.b2Assert(2 <= d); this.m_vertexCount = d; this.Reserve(d); for (var e = 0, e = 0; e < this.m_vertexCount; e++) this.m_vertices[e].SetV(c[e]); for (e = 0; e < this.m_vertexCount; ++e) { var f = parseInt(e), n = parseInt(e + 1 < this.m_vertexCount ? e + 1 : 0), f = g.SubtractVV(this.m_vertices[n], this.m_vertices[f]); b.b2Assert(f.LengthSquared() > Number.MIN_VALUE); this.m_normals[e].SetV(g.CrossVF(f, 1)); this.m_normals[e].Normalize() } this.m_centroid = j.ComputeCentroid(this.m_vertices, this.m_vertexCount) }; j.AsVector = function(b, c) { void 0 === c && (c = 0); var d = new j; d.SetAsVector(b, c); return d }; j.prototype.SetAsBox = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set(-b, -c); this.m_vertices[1].Set(b, -c); this.m_vertices[2].Set(b, c); this.m_vertices[3].Set(-b, c); this.m_normals[0].Set(0, -1); this.m_normals[1].Set(1, 0); this.m_normals[2].Set(0, 1); this.m_normals[3].Set(-1, 0); this.m_centroid.SetZero() }; j.AsBox = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); var d = new j; d.SetAsBox(b, c); return d }; j.prototype.SetAsOrientedBox = function(b, c, d, e) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = null); void 0 === e && (e = 0); this.m_vertexCount = 4; this.Reserve(4); this.m_vertices[0].Set(-b, -c); this.m_vertices[1].Set(b, -c); this.m_vertices[2].Set(b, c); this.m_vertices[3].Set(-b, c); this.m_normals[0].Set(0, -1); this.m_normals[1].Set(1, 0); this.m_normals[2].Set(0, 1); this.m_normals[3].Set(-1, 0); this.m_centroid = d; b = new y; b.position = d; b.R.Set(e); for (d = 0; d < this.m_vertexCount; ++d) this.m_vertices[d] = g.MulX(b, this.m_vertices[d]), this.m_normals[d] = g.MulMV(b.R, this.m_normals[d]) }; j.AsOrientedBox = function(b, c, d, e) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = null); void 0 === e && (e = 0); var g = new j; g.SetAsOrientedBox(b, c, d, e); return g }; j.prototype.SetAsEdge = function(b, c) { this.m_vertexCount = 2; this.Reserve(2); this.m_vertices[0].SetV(b); this.m_vertices[1].SetV(c); this.m_centroid.x = 0.5 * (b.x + c.x); this.m_centroid.y = 0.5 * (b.y + c.y); this.m_normals[0] = g.CrossVF(g.SubtractVV(c, b), 1); this.m_normals[0].Normalize(); this.m_normals[1].x = -this.m_normals[0].x; this.m_normals[1].y = -this.m_normals[0].y }; j.AsEdge = function(b, c) { var d = new j; d.SetAsEdge(b, c); return d }; j.prototype.TestPoint = function(b, c) { var d; d = b.R; for (var e = c.x - b.position.x, g = c.y - b.position.y, f = e * d.col1.x + g * d.col1.y, j = e * d.col2.x + g * d.col2.y, n = 0; n < this.m_vertexCount; ++n) if (d = this.m_vertices[n], e = f - d.x, g = j - d.y, d = this.m_normals[n], 0 < d.x * e + d.y * g) return !1; return !0 }; j.prototype.RayCast = function(b, c, d) { var e = 0, g = c.maxFraction, f = 0, j = 0, n, q, f = c.p1.x - d.position.x, j = c.p1.y - d.position.y; n = d.R; var y = f * n.col1.x + j * n.col1.y, B = f * n.col2.x + j * n.col2.y, f = c.p2.x - d.position.x, j = c.p2.y - d.position.y; n = d.R; c = f * n.col1.x + j * n.col1.y - y; n = f * n.col2.x + j * n.col2.y - B; for (var z = -1, p = 0; p < this.m_vertexCount; ++p) { q = this.m_vertices[p]; f = q.x - y; j = q.y - B; q = this.m_normals[p]; f = q.x * f + q.y * j; j = q.x * c + q.y * n; if (0 == j) { if (0 > f) return !1 } else 0 > j && f < e * j ? (e = f / j, z = p) : 0 < j && f < g * j && (g = f / j); if (g < e - Number.MIN_VALUE) return !1 } return 0 <= z ? (b.fraction = e, n = d.R, q = this.m_normals[z], b.normal.x = n.col1.x * q.x + n.col2.x * q.y, b.normal.y = n.col1.y * q.x + n.col2.y * q.y, !0) : !1 }; j.prototype.ComputeAABB = function(b, c) { for (var d = c.R, e = this.m_vertices[0], g = c.position.x + (d.col1.x * e.x + d.col2.x * e.y), f = c.position.y + (d.col1.y * e.x + d.col2.y * e.y), j = g, n = f, q = 1; q < this.m_vertexCount; ++q) var e = this.m_vertices[q], y = c.position.x + (d.col1.x * e.x + d.col2.x * e.y), e = c.position.y + (d.col1.y * e.x + d.col2.y * e.y), g = g < y ? g : y, f = f < e ? f : e, j = j > y ? j : y, n = n > e ? n : e; b.lowerBound.x = g - this.m_radius; b.lowerBound.y = f - this.m_radius; b.upperBound.x = j + this.m_radius; b.upperBound.y = n + this.m_radius }; j.prototype.ComputeMass = function(b, c) { void 0 === c && (c = 0); if (2 == this.m_vertexCount) b.center.x = 0.5 * (this.m_vertices[0].x + this.m_vertices[1].x), b.center.y = 0.5 * (this.m_vertices[0].y + this.m_vertices[1].y), b.mass = 0, b.I = 0; else { for (var d = 0, e = 0, g = 0, f = 0, j = 1 / 3, n = 0; n < this.m_vertexCount; ++n) var q = this.m_vertices[n], y = n + 1 < this.m_vertexCount ? this.m_vertices[parseInt(n + 1)] : this.m_vertices[0], B = q.x - 0, z = q.y - 0, p = y.x - 0, v = y.y - 0, H = B * v - z * p, D = 0.5 * H, g = g + D, d = d + D * j * (0 + q.x + y.x), e = e + D * j * (0 + q.y + y.y), q = B, f = f + H * (j * (0.25 * (q * q + p * q + p * p) + (0 * q + 0 * p)) + 0 + (j * (0.25 * (z * z + v * z + v * v) + (0 * z + 0 * v)) + 0)); b.mass = c * g; b.center.Set(d * (1 / g), e * (1 / g)); b.I = c * f } }; j.prototype.ComputeSubmergedArea = function(b, c, d, e) { void 0 === c && (c = 0); var j = g.MulTMV(d.R, b), n = c - g.Dot(b, d.position), q = new Vector_a2j_Number, y = 0, B = -1; c = -1; var z = !1; for (b = b = 0; b < this.m_vertexCount; ++b) { q[b] = g.Dot(j, this.m_vertices[b]) - n; var C = q[b] < -Number.MIN_VALUE; 0 < b && (C ? z || (B = b - 1, y++) : z && (c = b - 1, y++)); z = C } switch (y) { case 0: return z ? (b = new f, this.ComputeMass(b, 1), e.SetV(g.MulX(d, b.center)), b.mass) : 0; case 1: -1 == B ? B = this.m_vertexCount - 1 : c = this.m_vertexCount - 1 } b = parseInt((B + 1) % this.m_vertexCount); j = parseInt((c + 1) % this.m_vertexCount); n = (0 - q[B]) / (q[b] - q[B]); q = (0 - q[c]) / (q[j] - q[c]); B = new A(this.m_vertices[B].x * (1 - n) + this.m_vertices[b].x * n, this.m_vertices[B].y * (1 - n) + this.m_vertices[b].y * n); c = new A(this.m_vertices[c].x * (1 - q) + this.m_vertices[j].x * q, this.m_vertices[c].y * (1 - q) + this.m_vertices[j].y * q); q = 0; n = new A; for (y = this.m_vertices[b]; b != j;) b = (b + 1) % this.m_vertexCount, z = b == j ? c : this.m_vertices[b], C = 0.5 * ((y.x - B.x) * (z.y - B.y) - (y.y - B.y) * (z.x - B.x)), q += C, n.x += C * (B.x + y.x + z.x) / 3, n.y += C * (B.y + y.y + z.y) / 3, y = z; n.Multiply(1 / q); e.SetV(g.MulX(d, n)); return q }; j.prototype.GetVertexCount = function() { return this.m_vertexCount }; j.prototype.GetVertices = function() { return this.m_vertices }; j.prototype.GetNormals = function() { return this.m_normals }; j.prototype.GetSupport = function(b) { for (var c = 0, d = this.m_vertices[0].x * b.x + this.m_vertices[0].y * b.y, e = 1; e < this.m_vertexCount; ++e) { var g = this.m_vertices[e].x * b.x + this.m_vertices[e].y * b.y; g > d && (c = e, d = g) } return c }; j.prototype.GetSupportVertex = function(b) { for (var c = 0, d = this.m_vertices[0].x * b.x + this.m_vertices[0].y * b.y, e = 1; e < this.m_vertexCount; ++e) { var g = this.m_vertices[e].x * b.x + this.m_vertices[e].y * b.y; g > d && (c = e, d = g) } return this.m_vertices[c] }; j.prototype.Validate = function() { return !1 }; j.prototype.b2PolygonShape = function() { this.__super.b2Shape.call(this); this.m_type = q.e_polygonShape; this.m_centroid = new A; this.m_vertices = new Vector; this.m_normals = new Vector }; j.prototype.Reserve = function(b) { void 0 === b && (b = 0); for (var c = parseInt(this.m_vertices.length); c < b; c++) this.m_vertices[c] = new A, this.m_normals[c] = new A }; j.ComputeCentroid = function(b, c) { void 0 === c && (c = 0); for (var d = new A, e = 0, g = 1 / 3, f = 0; f < c; ++f) { var j = b[f], n = f + 1 < c ? b[parseInt(f + 1)] : b[0], q = 0.5 * ((j.x - 0) * (n.y - 0) - (j.y - 0) * (n.x - 0)), e = e + q; d.x += q * g * (0 + j.x + n.x); d.y += q * g * (0 + j.y + n.y) } d.x *= 1 / e; d.y *= 1 / e; return d }; j.ComputeOBB = function(b, c, d) { void 0 === d && (d = 0); for (var e = 0, g = new Vector(d + 1), e = 0; e < d; ++e) g[e] = c[e]; g[d] = g[0]; c = Number.MAX_VALUE; for (e = 1; e <= d; ++e) { for (var f = g[parseInt(e - 1)], j = g[e].x - f.x, n = g[e].y - f.y, q = Math.sqrt(j * j + n * n), j = j / q, n = n / q, y = -n, B = j, z = q = Number.MAX_VALUE, p = -Number.MAX_VALUE, v = -Number.MAX_VALUE, H = 0; H < d; ++H) { var D = g[H].x - f.x, N = g[H].y - f.y, J = j * D + n * N, D = y * D + B * N; J < q && (q = J); D < z && (z = D); J > p && (p = J); D > v && (v = D) } H = (p - q) * (v - z); H < 0.95 * c && (c = H, b.R.col1.x = j, b.R.col1.y = n, b.R.col2.x = y, b.R.col2.y = B, j = 0.5 * (q + p), n = 0.5 * (z + v), y = b.R, b.center.x = f.x + (y.col1.x * j + y.col2.x * n), b.center.y = f.y + (y.col1.y * j + y.col2.y * n), b.extents.x = 0.5 * (p - q), b.extents.y = 0.5 * (v - z)) } }; Box2D.postDefs.push(function() { Box2D.Collision.Shapes.b2PolygonShape.s_mat = new n }); q.b2Shape = function() {}; q.prototype.Copy = function() { return null }; q.prototype.Set = function(b) { this.m_radius = b.m_radius }; q.prototype.GetType = function() { return this.m_type }; q.prototype.TestPoint = function() { return !1 }; q.prototype.RayCast = function() { return !1 }; q.prototype.ComputeAABB = function() {}; q.prototype.ComputeMass = function() {}; q.prototype.ComputeSubmergedArea = function() { return 0 }; q.TestOverlap = function(b, c, d, e) { var g = new B; g.proxyA = new G; g.proxyA.Set(b); g.proxyB = new G; g.proxyB.Set(d); g.transformA = c; g.transformB = e; g.useRadii = !0; b = new I; b.count = 0; c = new C; z.Distance(c, b, g); return c.distance < 10 * Number.MIN_VALUE }; q.prototype.b2Shape = function() { this.m_type = q.e_unknownShape; this.m_radius = b.b2_linearSlop }; Box2D.postDefs.push(function() { Box2D.Collision.Shapes.b2Shape.e_unknownShape = -1; Box2D.Collision.Shapes.b2Shape.e_circleShape = 0; Box2D.Collision.Shapes.b2Shape.e_polygonShape = 1; Box2D.Collision.Shapes.b2Shape.e_edgeShape = 2; Box2D.Collision.Shapes.b2Shape.e_shapeTypeCount = 3; Box2D.Collision.Shapes.b2Shape.e_hitCollide = 1; Box2D.Collision.Shapes.b2Shape.e_missCollide = 0; Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide = -1 }) })(); (function() { var b = Box2D.Common.b2Color, c = Box2D.Common.b2Settings, d = Box2D.Common.Math.b2Math; b.b2Color = function() { this._b = this._g = this._r = 0 }; b.prototype.b2Color = function(b, c, j) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === j && (j = 0); this._r = Box2D.parseUInt(255 * d.Clamp(b, 0, 1)); this._g = Box2D.parseUInt(255 * d.Clamp(c, 0, 1)); this._b = Box2D.parseUInt(255 * d.Clamp(j, 0, 1)) }; b.prototype.Set = function(b, c, j) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === j && (j = 0); this._r = Box2D.parseUInt(255 * d.Clamp(b, 0, 1)); this._g = Box2D.parseUInt(255 * d.Clamp(c, 0, 1)); this._b = Box2D.parseUInt(255 * d.Clamp(j, 0, 1)) }; Object.defineProperty(b.prototype, "r", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._r = Box2D.parseUInt(255 * d.Clamp(b, 0, 1)) } }); Object.defineProperty(b.prototype, "g", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._g = Box2D.parseUInt(255 * d.Clamp(b, 0, 1)) } }); Object.defineProperty(b.prototype, "b", { enumerable: !1, configurable: !0, set: function(b) { void 0 === b && (b = 0); this._b = Box2D.parseUInt(255 * d.Clamp(b, 0, 1)) } }); Object.defineProperty(b.prototype, "color", { enumerable: !1, configurable: !0, get: function() { return this._r << 16 | this._g << 8 | this._b } }); c.b2Settings = function() {}; c.b2MixFriction = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); return Math.sqrt(b * c) }; c.b2MixRestitution = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); return b > c ? b : c }; c.b2Assert = function(b) { if (!b) throw "Assertion Failed"; }; Box2D.postDefs.push(function() { Box2D.Common.b2Settings.VERSION = "2.1alpha"; Box2D.Common.b2Settings.USHRT_MAX = 65535; Box2D.Common.b2Settings.b2_pi = Math.PI; Box2D.Common.b2Settings.b2_maxManifoldPoints = 2; Box2D.Common.b2Settings.b2_aabbExtension = 0.1; Box2D.Common.b2Settings.b2_aabbMultiplier = 2; Box2D.Common.b2Settings.b2_polygonRadius = 2 * c.b2_linearSlop; Box2D.Common.b2Settings.b2_linearSlop = 0.0050; Box2D.Common.b2Settings.b2_angularSlop = 2 / 180 * c.b2_pi; Box2D.Common.b2Settings.b2_toiSlop = 8 * c.b2_linearSlop; Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland = 32; Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland = 32; Box2D.Common.b2Settings.b2_velocityThreshold = 1; Box2D.Common.b2Settings.b2_maxLinearCorrection = 0.2; Box2D.Common.b2Settings.b2_maxAngularCorrection = 8 / 180 * c.b2_pi; Box2D.Common.b2Settings.b2_maxTranslation = 2; Box2D.Common.b2Settings.b2_maxTranslationSquared = c.b2_maxTranslation * c.b2_maxTranslation; Box2D.Common.b2Settings.b2_maxRotation = 0.5 * c.b2_pi; Box2D.Common.b2Settings.b2_maxRotationSquared = c.b2_maxRotation * c.b2_maxRotation; Box2D.Common.b2Settings.b2_contactBaumgarte = 0.2; Box2D.Common.b2Settings.b2_timeToSleep = 0.5; Box2D.Common.b2Settings.b2_linearSleepTolerance = 0.01; Box2D.Common.b2Settings.b2_angularSleepTolerance = 2 / 180 * c.b2_pi }) })(); (function() { var b = Box2D.Common.Math.b2Mat22, c = Box2D.Common.Math.b2Mat33, d = Box2D.Common.Math.b2Math, e = Box2D.Common.Math.b2Sweep, f = Box2D.Common.Math.b2Transform, j = Box2D.Common.Math.b2Vec2, q = Box2D.Common.Math.b2Vec3; b.b2Mat22 = function() { this.col1 = new j; this.col2 = new j }; b.prototype.b2Mat22 = function() { this.SetIdentity() }; b.FromAngle = function(c) { void 0 === c && (c = 0); var d = new b; d.Set(c); return d }; b.FromVV = function(c, d) { var e = new b; e.SetVV(c, d); return e }; b.prototype.Set = function(b) { void 0 === b && (b = 0); var c = Math.cos(b); b = Math.sin(b); this.col1.x = c; this.col2.x = -b; this.col1.y = b; this.col2.y = c }; b.prototype.SetVV = function(b, c) { this.col1.SetV(b); this.col2.SetV(c) }; b.prototype.Copy = function() { var c = new b; c.SetM(this); return c }; b.prototype.SetM = function(b) { this.col1.SetV(b.col1); this.col2.SetV(b.col2) }; b.prototype.AddM = function(b) { this.col1.x += b.col1.x; this.col1.y += b.col1.y; this.col2.x += b.col2.x; this.col2.y += b.col2.y }; b.prototype.SetIdentity = function() { this.col1.x = 1; this.col2.x = 0; this.col1.y = 0; this.col2.y = 1 }; b.prototype.SetZero = function() { this.col1.x = 0; this.col2.x = 0; this.col1.y = 0; this.col2.y = 0 }; b.prototype.GetAngle = function() { return Math.atan2(this.col1.y, this.col1.x) }; b.prototype.GetInverse = function(b) { var c = this.col1.x, d = this.col2.x, e = this.col1.y, f = this.col2.y, j = c * f - d * e; 0 != j && (j = 1 / j); b.col1.x = j * f; b.col2.x = -j * d; b.col1.y = -j * e; b.col2.y = j * c; return b }; b.prototype.Solve = function(b, c, d) { void 0 === c && (c = 0); void 0 === d && (d = 0); var e = this.col1.x, f = this.col2.x, j = this.col1.y, q = this.col2.y, G = e * q - f * j; 0 != G && (G = 1 / G); b.x = G * (q * c - f * d); b.y = G * (e * d - j * c); return b }; b.prototype.Abs = function() { this.col1.Abs(); this.col2.Abs() }; c.b2Mat33 = function() { this.col1 = new q; this.col2 = new q; this.col3 = new q }; c.prototype.b2Mat33 = function(b, c, d) { void 0 === b && (b = null); void 0 === c && (c = null); void 0 === d && (d = null); !b && !c && !d ? (this.col1.SetZero(), this.col2.SetZero(), this.col3.SetZero()) : (this.col1.SetV(b), this.col2.SetV(c), this.col3.SetV(d)) }; c.prototype.SetVVV = function(b, c, d) { this.col1.SetV(b); this.col2.SetV(c); this.col3.SetV(d) }; c.prototype.Copy = function() { return new c(this.col1, this.col2, this.col3) }; c.prototype.SetM = function(b) { this.col1.SetV(b.col1); this.col2.SetV(b.col2); this.col3.SetV(b.col3) }; c.prototype.AddM = function(b) { this.col1.x += b.col1.x; this.col1.y += b.col1.y; this.col1.z += b.col1.z; this.col2.x += b.col2.x; this.col2.y += b.col2.y; this.col2.z += b.col2.z; this.col3.x += b.col3.x; this.col3.y += b.col3.y; this.col3.z += b.col3.z }; c.prototype.SetIdentity = function() { this.col1.x = 1; this.col2.x = 0; this.col3.x = 0; this.col1.y = 0; this.col2.y = 1; this.col3.y = 0; this.col1.z = 0; this.col2.z = 0; this.col3.z = 1 }; c.prototype.SetZero = function() { this.col1.x = 0; this.col2.x = 0; this.col3.x = 0; this.col1.y = 0; this.col2.y = 0; this.col3.y = 0; this.col1.z = 0; this.col2.z = 0; this.col3.z = 0 }; c.prototype.Solve22 = function(b, c, d) { void 0 === c && (c = 0); void 0 === d && (d = 0); var e = this.col1.x, f = this.col2.x, j = this.col1.y, q = this.col2.y, G = e * q - f * j; 0 != G && (G = 1 / G); b.x = G * (q * c - f * d); b.y = G * (e * d - j * c); return b }; c.prototype.Solve33 = function(b, c, d, e) { void 0 === c && (c = 0); void 0 === d && (d = 0); void 0 === e && (e = 0); var f = this.col1.x, j = this.col1.y, q = this.col1.z, G = this.col2.x, I = this.col2.y, u = this.col2.z, L = this.col3.x, E = this.col3.y, Q = this.col3.z, M = f * (I * Q - u * E) + j * (u * L - G * Q) + q * (G * E - I * L); 0 != M && (M = 1 / M); b.x = M * (c * (I * Q - u * E) + d * (u * L - G * Q) + e * (G * E - I * L)); b.y = M * (f * (d * Q - e * E) + j * (e * L - c * Q) + q * (c * E - d * L)); b.z = M * (f * (I * e - u * d) + j * (u * c - G * e) + q * (G * d - I * c)); return b }; d.b2Math = function() {}; d.IsValid = function(b) { void 0 === b && (b = 0); return isFinite(b) }; d.Dot = function(b, c) { return b.x * c.x + b.y * c.y }; d.CrossVV = function(b, c) { return b.x * c.y - b.y * c.x }; d.CrossVF = function(b, c) { void 0 === c && (c = 0); return new j(c * b.y, -c * b.x) }; d.CrossFV = function(b, c) { void 0 === b && (b = 0); return new j(-b * c.y, b * c.x) }; d.MulMV = function(b, c) { return new j(b.col1.x * c.x + b.col2.x * c.y, b.col1.y * c.x + b.col2.y * c.y) }; d.MulTMV = function(b, c) { return new j(d.Dot(c, b.col1), d.Dot(c, b.col2)) }; d.MulX = function(b, c) { var e = d.MulMV(b.R, c); e.x += b.position.x; e.y += b.position.y; return e }; d.MulXT = function(b, c) { var e = d.SubtractVV(c, b.position), f = e.x * b.R.col1.x + e.y * b.R.col1.y; e.y = e.x * b.R.col2.x + e.y * b.R.col2.y; e.x = f; return e }; d.AddVV = function(b, c) { return new j(b.x + c.x, b.y + c.y) }; d.SubtractVV = function(b, c) { return new j(b.x - c.x, b.y - c.y) }; d.Distance = function(b, c) { var d = b.x - c.x, e = b.y - c.y; return Math.sqrt(d * d + e * e) }; d.DistanceSquared = function(b, c) { var d = b.x - c.x, e = b.y - c.y; return d * d + e * e }; d.MulFV = function(b, c) { void 0 === b && (b = 0); return new j(b * c.x, b * c.y) }; d.AddMM = function(c, e) { return b.FromVV(d.AddVV(c.col1, e.col1), d.AddVV(c.col2, e.col2)) }; d.MulMM = function(c, e) { return b.FromVV(d.MulMV(c, e.col1), d.MulMV(c, e.col2)) }; d.MulTMM = function(c, e) { var f = new j(d.Dot(c.col1, e.col1), d.Dot(c.col2, e.col1)), q = new j(d.Dot(c.col1, e.col2), d.Dot(c.col2, e.col2)); return b.FromVV(f, q) }; d.Abs = function(b) { void 0 === b && (b = 0); return 0 < b ? b : -b }; d.AbsV = function(b) { return new j(d.Abs(b.x), d.Abs(b.y)) }; d.AbsM = function(c) { return b.FromVV(d.AbsV(c.col1), d.AbsV(c.col2)) }; d.Min = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); return b < c ? b : c }; d.MinV = function(b, c) { return new j(d.Min(b.x, c.x), d.Min(b.y, c.y)) }; d.Max = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); return b > c ? b : c }; d.MaxV = function(b, c) { return new j(d.Max(b.x, c.x), d.Max(b.y, c.y)) }; d.Clamp = function(b, c, d) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = 0); return b < c ? c : b > d ? d : b }; d.ClampV = function(b, c, e) { return d.MaxV(c, d.MinV(b, e)) }; d.Swap = function(b, c) { var d = b[0]; b[0] = c[0]; c[0] = d }; d.Random = function() { return 2 * Math.random() - 1 }; d.RandomRange = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); var d = Math.random(); return (c - b) * d + b }; d.NextPowerOfTwo = function(b) { void 0 === b && (b = 0); b |= b >> 1 & 2147483647; b |= b >> 2 & 1073741823; b |= b >> 4 & 268435455; b |= b >> 8 & 16777215; return (b | b >> 16 & 65535) + 1 }; d.IsPowerOfTwo = function(b) { void 0 === b && (b = 0); return 0 < b && 0 == (b & b - 1) }; Box2D.postDefs.push(function() { Box2D.Common.Math.b2Math.b2Vec2_zero = new j(0, 0); Box2D.Common.Math.b2Math.b2Mat22_identity = b.FromVV(new j(1, 0), new j(0, 1)); Box2D.Common.Math.b2Math.b2Transform_identity = new f(d.b2Vec2_zero, d.b2Mat22_identity) }); e.b2Sweep = function() { this.localCenter = new j; this.c0 = new j; this.c = new j }; e.prototype.Set = function(b) { this.localCenter.SetV(b.localCenter); this.c0.SetV(b.c0); this.c.SetV(b.c); this.a0 = b.a0; this.a = b.a; this.t0 = b.t0 }; e.prototype.Copy = function() { var b = new e; b.localCenter.SetV(this.localCenter); b.c0.SetV(this.c0); b.c.SetV(this.c); b.a0 = this.a0; b.a = this.a; b.t0 = this.t0; return b }; e.prototype.GetTransform = function(b, c) { void 0 === c && (c = 0); b.position.x = (1 - c) * this.c0.x + c * this.c.x; b.position.y = (1 - c) * this.c0.y + c * this.c.y; b.R.Set((1 - c) * this.a0 + c * this.a); var d = b.R; b.position.x -= d.col1.x * this.localCenter.x + d.col2.x * this.localCenter.y; b.position.y -= d.col1.y * this.localCenter.x + d.col2.y * this.localCenter.y }; e.prototype.Advance = function(b) { void 0 === b && (b = 0); if (this.t0 < b && 1 - this.t0 > Number.MIN_VALUE) { var c = (b - this.t0) / (1 - this.t0); this.c0.x = (1 - c) * this.c0.x + c * this.c.x; this.c0.y = (1 - c) * this.c0.y + c * this.c.y; this.a0 = (1 - c) * this.a0 + c * this.a; this.t0 = b } }; f.b2Transform = function() { this.position = new j; this.R = new b }; f.prototype.b2Transform = function(b, c) { void 0 === b && (b = null); void 0 === c && (c = null); b && (this.position.SetV(b), this.R.SetM(c)) }; f.prototype.Initialize = function(b, c) { this.position.SetV(b); this.R.SetM(c) }; f.prototype.SetIdentity = function() { this.position.SetZero(); this.R.SetIdentity() }; f.prototype.Set = function(b) { this.position.SetV(b.position); this.R.SetM(b.R) }; f.prototype.GetAngle = function() { return Math.atan2(this.R.col1.y, this.R.col1.x) }; j.b2Vec2 = function() {}; j.prototype.b2Vec2 = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.x = b; this.y = c }; j.prototype.SetZero = function() { this.y = this.x = 0 }; j.prototype.Set = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.x = b; this.y = c }; j.prototype.SetV = function(b) { this.x = b.x; this.y = b.y }; j.prototype.GetNegative = function() { return new j(-this.x, -this.y) }; j.prototype.NegativeSelf = function() { this.x = -this.x; this.y = -this.y }; j.Make = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); return new j(b, c) }; j.prototype.Copy = function() { return new j(this.x, this.y) }; j.prototype.Add = function(b) { this.x += b.x; this.y += b.y }; j.prototype.Subtract = function(b) { this.x -= b.x; this.y -= b.y }; j.prototype.Multiply = function(b) { void 0 === b && (b = 0); this.x *= b; this.y *= b }; j.prototype.MulM = function(b) { var c = this.x; this.x = b.col1.x * c + b.col2.x * this.y; this.y = b.col1.y * c + b.col2.y * this.y }; j.prototype.MulTM = function(b) { var c = d.Dot(this, b.col1); this.y = d.Dot(this, b.col2); this.x = c }; j.prototype.CrossVF = function(b) { void 0 === b && (b = 0); var c = this.x; this.x = b * this.y; this.y = -b * c }; j.prototype.CrossFV = function(b) { void 0 === b && (b = 0); var c = this.x; this.x = -b * this.y; this.y = b * c }; j.prototype.MinV = function(b) { this.x = this.x < b.x ? this.x : b.x; this.y = this.y < b.y ? this.y : b.y }; j.prototype.MaxV = function(b) { this.x = this.x > b.x ? this.x : b.x; this.y = this.y > b.y ? this.y : b.y }; j.prototype.Abs = function() { 0 > this.x && (this.x = -this.x); 0 > this.y && (this.y = -this.y) }; j.prototype.Length = function() { return Math.sqrt(this.x * this.x + this.y * this.y) }; j.prototype.LengthSquared = function() { return this.x * this.x + this.y * this.y }; j.prototype.Normalize = function() { var b = Math.sqrt(this.x * this.x + this.y * this.y); if (b < Number.MIN_VALUE) return 0; var c = 1 / b; this.x *= c; this.y *= c; return b }; j.prototype.IsValid = function() { return d.IsValid(this.x) && d.IsValid(this.y) }; q.b2Vec3 = function() {}; q.prototype.b2Vec3 = function(b, c, d) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = 0); this.x = b; this.y = c; this.z = d }; q.prototype.SetZero = function() { this.x = this.y = this.z = 0 }; q.prototype.Set = function(b, c, d) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = 0); this.x = b; this.y = c; this.z = d }; q.prototype.SetV = function(b) { this.x = b.x; this.y = b.y; this.z = b.z }; q.prototype.GetNegative = function() { return new q(-this.x, -this.y, -this.z) }; q.prototype.NegativeSelf = function() { this.x = -this.x; this.y = -this.y; this.z = -this.z }; q.prototype.Copy = function() { return new q(this.x, this.y, this.z) }; q.prototype.Add = function(b) { this.x += b.x; this.y += b.y; this.z += b.z }; q.prototype.Subtract = function(b) { this.x -= b.x; this.y -= b.y; this.z -= b.z }; q.prototype.Multiply = function(b) { void 0 === b && (b = 0); this.x *= b; this.y *= b; this.z *= b } })(); (function() { var b = Box2D.Common.Math.b2Math, c = Box2D.Common.Math.b2Sweep, d = Box2D.Common.Math.b2Transform, e = Box2D.Common.Math.b2Vec2, f = Box2D.Common.b2Color, j = Box2D.Common.b2Settings, q = Box2D.Collision.b2AABB, n = Box2D.Collision.b2ContactPoint, g = Box2D.Collision.b2DynamicTreeBroadPhase, y = Box2D.Collision.b2RayCastInput, A = Box2D.Collision.b2RayCastOutput, z = Box2D.Collision.Shapes.b2CircleShape, B = Box2D.Collision.Shapes.b2EdgeShape, C = Box2D.Collision.Shapes.b2MassData, G = Box2D.Collision.Shapes.b2PolygonShape, I = Box2D.Collision.Shapes.b2Shape, u = Box2D.Dynamics.b2Body, L = Box2D.Dynamics.b2BodyDef, E = Box2D.Dynamics.b2ContactFilter, Q = Box2D.Dynamics.b2ContactImpulse, M = Box2D.Dynamics.b2ContactListener, R = Box2D.Dynamics.b2ContactManager, K = Box2D.Dynamics.b2DebugDraw, X = Box2D.Dynamics.b2DestructionListener, P = Box2D.Dynamics.b2FilterData, S = Box2D.Dynamics.b2Fixture, Z = Box2D.Dynamics.b2FixtureDef, U = Box2D.Dynamics.b2Island, p = Box2D.Dynamics.b2TimeStep, v = Box2D.Dynamics.b2World, H = Box2D.Dynamics.Contacts.b2Contact, D = Box2D.Dynamics.Contacts.b2ContactFactory, N = Box2D.Dynamics.Contacts.b2ContactSolver, J = Box2D.Dynamics.Joints.b2Joint, V = Box2D.Dynamics.Joints.b2PulleyJoint; u.b2Body = function() { this.m_xf = new d; this.m_sweep = new c; this.m_linearVelocity = new e; this.m_force = new e }; u.prototype.connectEdges = function(c, d, e) { void 0 === e && (e = 0); var f = Math.atan2(d.GetDirectionVector().y, d.GetDirectionVector().x); e = b.MulFV(Math.tan(0.5 * (f - e)), d.GetDirectionVector()); e = b.SubtractVV(e, d.GetNormalVector()); e = b.MulFV(j.b2_toiSlop, e); e = b.AddVV(e, d.GetVertex1()); var g = b.AddVV(c.GetDirectionVector(), d.GetDirectionVector()); g.Normalize(); var p = 0 < b.Dot(c.GetDirectionVector(), d.GetNormalVector()); c.SetNextEdge(d, e, g, p); d.SetPrevEdge(c, e, g, p); return f }; u.prototype.CreateFixture = function(b) { if (!0 == this.m_world.IsLocked()) return null; var c = new S; c.Create(this, this.m_xf, b); this.m_flags & u.e_activeFlag && c.CreateProxy(this.m_world.m_contactManager.m_broadPhase, this.m_xf); c.m_next = this.m_fixtureList; this.m_fixtureList = c; ++this.m_fixtureCount; c.m_body = this; 0 < c.m_density && this.ResetMassData(); this.m_world.m_flags |= v.e_newFixture; return c }; u.prototype.CreateFixture2 = function(b, c) { void 0 === c && (c = 0); var d = new Z; d.shape = b; d.density = c; return this.CreateFixture(d) }; u.prototype.DestroyFixture = function(b) { if (!0 != this.m_world.IsLocked()) { for (var c = this.m_fixtureList, d = null; null != c;) { if (c == b) { d ? d.m_next = b.m_next : this.m_fixtureList = b.m_next; break } d = c; c = c.m_next } for (c = this.m_contactList; c;) { var d = c.contact, c = c.next, e = d.GetFixtureA(), f = d.GetFixtureB(); (b == e || b == f) && this.m_world.m_contactManager.Destroy(d) } this.m_flags & u.e_activeFlag && b.DestroyProxy(this.m_world.m_contactManager.m_broadPhase); b.Destroy(); b.m_body = null; b.m_next = null; --this.m_fixtureCount; this.ResetMassData() } }; u.prototype.SetPositionAndAngle = function(b, c) { void 0 === c && (c = 0); var d; if (!0 != this.m_world.IsLocked()) { this.m_xf.R.Set(c); this.m_xf.position.SetV(b); d = this.m_xf.R; var e = this.m_sweep.localCenter; this.m_sweep.c.x = d.col1.x * e.x + d.col2.x * e.y; this.m_sweep.c.y = d.col1.y * e.x + d.col2.y * e.y; this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); this.m_sweep.a0 = this.m_sweep.a = c; e = this.m_world.m_contactManager.m_broadPhase; for (d = this.m_fixtureList; d; d = d.m_next) d.Synchronize(e, this.m_xf, this.m_xf); this.m_world.m_contactManager.FindNewContacts() } }; u.prototype.SetTransform = function(b) { this.SetPositionAndAngle(b.position, b.GetAngle()) }; u.prototype.GetTransform = function() { return this.m_xf }; u.prototype.GetPosition = function() { return this.m_xf.position }; u.prototype.SetPosition = function(b) { this.SetPositionAndAngle(b, this.GetAngle()) }; u.prototype.GetAngle = function() { return this.m_sweep.a }; u.prototype.SetAngle = function(b) { void 0 === b && (b = 0); this.SetPositionAndAngle(this.GetPosition(), b) }; u.prototype.GetWorldCenter = function() { return this.m_sweep.c }; u.prototype.GetLocalCenter = function() { return this.m_sweep.localCenter }; u.prototype.SetLinearVelocity = function(b) { this.m_type != u.b2_staticBody && this.m_linearVelocity.SetV(b) }; u.prototype.GetLinearVelocity = function() { return this.m_linearVelocity }; u.prototype.SetAngularVelocity = function(b) { void 0 === b && (b = 0); this.m_type != u.b2_staticBody && (this.m_angularVelocity = b) }; u.prototype.GetAngularVelocity = function() { return this.m_angularVelocity }; u.prototype.GetDefinition = function() { var b = new L; b.type = this.GetType(); b.allowSleep = (this.m_flags & u.e_allowSleepFlag) == u.e_allowSleepFlag; b.angle = this.GetAngle(); b.angularDamping = this.m_angularDamping; b.angularVelocity = this.m_angularVelocity; b.fixedRotation = (this.m_flags & u.e_fixedRotationFlag) == u.e_fixedRotationFlag; b.bullet = (this.m_flags & u.e_bulletFlag) == u.e_bulletFlag; b.awake = (this.m_flags & u.e_awakeFlag) == u.e_awakeFlag; b.linearDamping = this.m_linearDamping; b.linearVelocity.SetV(this.GetLinearVelocity()); b.position = this.GetPosition(); b.userData = this.GetUserData(); return b }; u.prototype.ApplyForce = function(b, c) { this.m_type == u.b2_dynamicBody && (!1 == this.IsAwake() && this.SetAwake(!0), this.m_force.x += b.x, this.m_force.y += b.y, this.m_torque += (c.x - this.m_sweep.c.x) * b.y - (c.y - this.m_sweep.c.y) * b.x) }; u.prototype.ApplyTorque = function(b) { void 0 === b && (b = 0); this.m_type == u.b2_dynamicBody && (!1 == this.IsAwake() && this.SetAwake(!0), this.m_torque += b) }; u.prototype.ApplyImpulse = function(b, c) { this.m_type == u.b2_dynamicBody && (!1 == this.IsAwake() && this.SetAwake(!0), this.m_linearVelocity.x += this.m_invMass * b.x, this.m_linearVelocity.y += this.m_invMass * b.y, this.m_angularVelocity += this.m_invI * ((c.x - this.m_sweep.c.x) * b.y - (c.y - this.m_sweep.c.y) * b.x)) }; u.prototype.Split = function(c) { for (var d = this.GetLinearVelocity().Copy(), e = this.GetAngularVelocity(), f = this.GetWorldCenter(), g = this.m_world.CreateBody(this.GetDefinition()), p, j = this.m_fixtureList; j;) if (c(j)) { var v = j.m_next; p ? p.m_next = v : this.m_fixtureList = v; this.m_fixtureCount--; j.m_next = g.m_fixtureList; g.m_fixtureList = j; g.m_fixtureCount++; j.m_body = g; j = v } else p = j, j = j.m_next; this.ResetMassData(); g.ResetMassData(); p = this.GetWorldCenter(); c = g.GetWorldCenter(); p = b.AddVV(d, b.CrossFV(e, b.SubtractVV(p, f))); d = b.AddVV(d, b.CrossFV(e, b.SubtractVV(c, f))); this.SetLinearVelocity(p); g.SetLinearVelocity(d); this.SetAngularVelocity(e); g.SetAngularVelocity(e); this.SynchronizeFixtures(); g.SynchronizeFixtures(); return g }; u.prototype.Merge = function(b) { var c; for (c = b.m_fixtureList; c;) { var d = c.m_next; b.m_fixtureCount--; c.m_next = this.m_fixtureList; this.m_fixtureList = c; this.m_fixtureCount++; c.m_body = f; c = d } e.m_fixtureCount = 0; var e = this, f = b; e.GetWorldCenter(); f.GetWorldCenter(); e.GetLinearVelocity().Copy(); f.GetLinearVelocity().Copy(); e.GetAngularVelocity(); f.GetAngularVelocity(); e.ResetMassData(); this.SynchronizeFixtures() }; u.prototype.GetMass = function() { return this.m_mass }; u.prototype.GetInertia = function() { return this.m_I }; u.prototype.GetMassData = function(b) { b.mass = this.m_mass; b.I = this.m_I; b.center.SetV(this.m_sweep.localCenter) }; u.prototype.SetMassData = function(c) { j.b2Assert(!1 == this.m_world.IsLocked()); if (!0 != this.m_world.IsLocked() && this.m_type == u.b2_dynamicBody) { this.m_invI = this.m_I = this.m_invMass = 0; this.m_mass = c.mass; 0 >= this.m_mass && (this.m_mass = 1); this.m_invMass = 1 / this.m_mass; 0 < c.I && 0 == (this.m_flags & u.e_fixedRotationFlag) && (this.m_I = c.I - this.m_mass * (c.center.x * c.center.x + c.center.y * c.center.y), this.m_invI = 1 / this.m_I); var d = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(c.center); this.m_sweep.c0.SetV(b.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * -(this.m_sweep.c.y - d.y); this.m_linearVelocity.y += this.m_angularVelocity * +(this.m_sweep.c.x - d.x) } }; u.prototype.ResetMassData = function() { this.m_invI = this.m_I = this.m_invMass = this.m_mass = 0; this.m_sweep.localCenter.SetZero(); if (!(this.m_type == u.b2_staticBody || this.m_type == u.b2_kinematicBody)) { for (var c = e.Make(0, 0), d = this.m_fixtureList; d; d = d.m_next) if (0 != d.m_density) { var f = d.GetMassData(); this.m_mass += f.mass; c.x += f.center.x * f.mass; c.y += f.center.y * f.mass; this.m_I += f.I } 0 < this.m_mass ? (this.m_invMass = 1 / this.m_mass, c.x *= this.m_invMass, c.y *= this.m_invMass) : this.m_invMass = this.m_mass = 1; 0 < this.m_I && 0 == (this.m_flags & u.e_fixedRotationFlag) ? (this.m_I -= this.m_mass * (c.x * c.x + c.y * c.y), this.m_I *= this.m_inertiaScale, j.b2Assert(0 < this.m_I), this.m_invI = 1 / this.m_I) : this.m_invI = this.m_I = 0; d = this.m_sweep.c.Copy(); this.m_sweep.localCenter.SetV(c); this.m_sweep.c0.SetV(b.MulX(this.m_xf, this.m_sweep.localCenter)); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_linearVelocity.x += this.m_angularVelocity * -(this.m_sweep.c.y - d.y); this.m_linearVelocity.y += this.m_angularVelocity * +(this.m_sweep.c.x - d.x) } }; u.prototype.GetWorldPoint = function(b) { var c = this.m_xf.R; b = new e(c.col1.x * b.x + c.col2.x * b.y, c.col1.y * b.x + c.col2.y * b.y); b.x += this.m_xf.position.x; b.y += this.m_xf.position.y; return b }; u.prototype.GetWorldVector = function(c) { return b.MulMV(this.m_xf.R, c) }; u.prototype.GetLocalPoint = function(c) { return b.MulXT(this.m_xf, c) }; u.prototype.GetLocalVector = function(c) { return b.MulTMV(this.m_xf.R, c) }; u.prototype.GetLinearVelocityFromWorldPoint = function(b) { return new e(this.m_linearVelocity.x - this.m_angularVelocity * (b.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (b.x - this.m_sweep.c.x)) }; u.prototype.GetLinearVelocityFromLocalPoint = function(b) { var c = this.m_xf.R; b = new e(c.col1.x * b.x + c.col2.x * b.y, c.col1.y * b.x + c.col2.y * b.y); b.x += this.m_xf.position.x; b.y += this.m_xf.position.y; return new e(this.m_linearVelocity.x - this.m_angularVelocity * (b.y - this.m_sweep.c.y), this.m_linearVelocity.y + this.m_angularVelocity * (b.x - this.m_sweep.c.x)) }; u.prototype.GetLinearDamping = function() { return this.m_linearDamping }; u.prototype.SetLinearDamping = function(b) { void 0 === b && (b = 0); this.m_linearDamping = b }; u.prototype.GetAngularDamping = function() { return this.m_angularDamping }; u.prototype.SetAngularDamping = function(b) { void 0 === b && (b = 0); this.m_angularDamping = b }; u.prototype.SetType = function(b) { void 0 === b && (b = 0); if (this.m_type != b) { this.m_type = b; this.ResetMassData(); this.m_type == u.b2_staticBody && (this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0); this.SetAwake(!0); this.m_force.SetZero(); this.m_torque = 0; for (b = this.m_contactList; b; b = b.next) b.contact.FlagForFiltering() } }; u.prototype.GetType = function() { return this.m_type }; u.prototype.SetBullet = function(b) { this.m_flags = b ? this.m_flags | u.e_bulletFlag : this.m_flags & ~u.e_bulletFlag }; u.prototype.IsBullet = function() { return (this.m_flags & u.e_bulletFlag) == u.e_bulletFlag }; u.prototype.SetSleepingAllowed = function(b) { b ? this.m_flags |= u.e_allowSleepFlag : (this.m_flags &= ~u.e_allowSleepFlag, this.SetAwake(!0)) }; u.prototype.SetAwake = function(b) { b ? (this.m_flags |= u.e_awakeFlag, this.m_sleepTime = 0) : (this.m_flags &= ~u.e_awakeFlag, this.m_sleepTime = 0, this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0, this.m_force.SetZero(), this.m_torque = 0) }; u.prototype.IsAwake = function() { return (this.m_flags & u.e_awakeFlag) == u.e_awakeFlag }; u.prototype.SetFixedRotation = function(b) { this.m_flags = b ? this.m_flags | u.e_fixedRotationFlag : this.m_flags & ~u.e_fixedRotationFlag; this.ResetMassData() }; u.prototype.IsFixedRotation = function() { return (this.m_flags & u.e_fixedRotationFlag) == u.e_fixedRotationFlag }; u.prototype.SetActive = function(b) { if (b != this.IsActive()) { var c; if (b) { this.m_flags |= u.e_activeFlag; b = this.m_world.m_contactManager.m_broadPhase; for (c = this.m_fixtureList; c; c = c.m_next) c.CreateProxy(b, this.m_xf) } else { this.m_flags &= ~u.e_activeFlag; b = this.m_world.m_contactManager.m_broadPhase; for (c = this.m_fixtureList; c; c = c.m_next) c.DestroyProxy(b); for (b = this.m_contactList; b;) c = b, b = b.next, this.m_world.m_contactManager.Destroy(c.contact); this.m_contactList = null } } }; u.prototype.IsActive = function() { return (this.m_flags & u.e_activeFlag) == u.e_activeFlag }; u.prototype.IsSleepingAllowed = function() { return (this.m_flags & u.e_allowSleepFlag) == u.e_allowSleepFlag }; u.prototype.GetFixtureList = function() { return this.m_fixtureList }; u.prototype.GetJointList = function() { return this.m_jointList }; u.prototype.GetControllerList = function() { return this.m_controllerList }; u.prototype.GetContactList = function() { return this.m_contactList }; u.prototype.GetNext = function() { return this.m_next }; u.prototype.GetUserData = function() { return this.m_userData }; u.prototype.SetUserData = function(b) { this.m_userData = b }; u.prototype.GetWorld = function() { return this.m_world }; u.prototype.b2Body = function(b, c) { this.m_flags = 0; b.bullet && (this.m_flags |= u.e_bulletFlag); b.fixedRotation && (this.m_flags |= u.e_fixedRotationFlag); b.allowSleep && (this.m_flags |= u.e_allowSleepFlag); b.awake && (this.m_flags |= u.e_awakeFlag); b.active && (this.m_flags |= u.e_activeFlag); this.m_world = c; this.m_xf.position.SetV(b.position); this.m_xf.R.Set(b.angle); this.m_sweep.localCenter.SetZero(); this.m_sweep.t0 = 1; this.m_sweep.a0 = this.m_sweep.a = b.angle; var d = this.m_xf.R, e = this.m_sweep.localCenter; this.m_sweep.c.x = d.col1.x * e.x + d.col2.x * e.y; this.m_sweep.c.y = d.col1.y * e.x + d.col2.y * e.y; this.m_sweep.c.x += this.m_xf.position.x; this.m_sweep.c.y += this.m_xf.position.y; this.m_sweep.c0.SetV(this.m_sweep.c); this.m_contactList = this.m_controllerList = this.m_jointList = null; this.m_controllerCount = 0; this.m_next = this.m_prev = null; this.m_linearVelocity.SetV(b.linearVelocity); this.m_angularVelocity = b.angularVelocity; this.m_linearDamping = b.linearDamping; this.m_angularDamping = b.angularDamping; this.m_force.Set(0, 0); this.m_sleepTime = this.m_torque = 0; this.m_type = b.type; this.m_invMass = this.m_type == u.b2_dynamicBody ? this.m_mass = 1 : this.m_mass = 0; this.m_invI = this.m_I = 0; this.m_inertiaScale = b.inertiaScale; this.m_userData = b.userData; this.m_fixtureList = null; this.m_fixtureCount = 0 }; u.prototype.SynchronizeFixtures = function() { var b = u.s_xf1; b.R.Set(this.m_sweep.a0); var c = b.R, d = this.m_sweep.localCenter; b.position.x = this.m_sweep.c0.x - (c.col1.x * d.x + c.col2.x * d.y); b.position.y = this.m_sweep.c0.y - (c.col1.y * d.x + c.col2.y * d.y); d = this.m_world.m_contactManager.m_broadPhase; for (c = this.m_fixtureList; c; c = c.m_next) c.Synchronize(d, b, this.m_xf) }; u.prototype.SynchronizeTransform = function() { this.m_xf.R.Set(this.m_sweep.a); var b = this.m_xf.R, c = this.m_sweep.localCenter; this.m_xf.position.x = this.m_sweep.c.x - (b.col1.x * c.x + b.col2.x * c.y); this.m_xf.position.y = this.m_sweep.c.y - (b.col1.y * c.x + b.col2.y * c.y) }; u.prototype.ShouldCollide = function(b) { if (this.m_type != u.b2_dynamicBody && b.m_type != u.b2_dynamicBody) return !1; for (var c = this.m_jointList; c; c = c.next) if (c.other == b && !1 == c.joint.m_collideConnected) return !1; return !0 }; u.prototype.Advance = function(b) { void 0 === b && (b = 0); this.m_sweep.Advance(b); this.m_sweep.c.SetV(this.m_sweep.c0); this.m_sweep.a = this.m_sweep.a0; this.SynchronizeTransform() }; Box2D.postDefs.push(function() { Box2D.Dynamics.b2Body.s_xf1 = new d; Box2D.Dynamics.b2Body.e_islandFlag = 1; Box2D.Dynamics.b2Body.e_awakeFlag = 2; Box2D.Dynamics.b2Body.e_allowSleepFlag = 4; Box2D.Dynamics.b2Body.e_bulletFlag = 8; Box2D.Dynamics.b2Body.e_fixedRotationFlag = 16; Box2D.Dynamics.b2Body.e_activeFlag = 32; Box2D.Dynamics.b2Body.b2_staticBody = 0; Box2D.Dynamics.b2Body.b2_kinematicBody = 1; Box2D.Dynamics.b2Body.b2_dynamicBody = 2 }); L.b2BodyDef = function() { this.position = new e; this.linearVelocity = new e }; L.prototype.b2BodyDef = function() { this.userData = null; this.position.Set(0, 0); this.angle = 0; this.linearVelocity.Set(0, 0); this.angularDamping = this.linearDamping = this.angularVelocity = 0; this.awake = this.allowSleep = !0; this.bullet = this.fixedRotation = !1; this.type = u.b2_staticBody; this.active = !0; this.inertiaScale = 1 }; E.b2ContactFilter = function() {}; E.prototype.ShouldCollide = function(b, c) { var d = b.GetFilterData(), e = c.GetFilterData(); return d.groupIndex == e.groupIndex && 0 != d.groupIndex ? 0 < d.groupIndex : 0 != (d.maskBits & e.categoryBits) && 0 != (d.categoryBits & e.maskBits) }; E.prototype.RayCollide = function(b, c) { return !b ? !0 : this.ShouldCollide(b instanceof S ? b : null, c) }; Box2D.postDefs.push(function() { Box2D.Dynamics.b2ContactFilter.b2_defaultFilter = new E }); Q.b2ContactImpulse = function() { this.normalImpulses = new Vector_a2j_Number(j.b2_maxManifoldPoints); this.tangentImpulses = new Vector_a2j_Number(j.b2_maxManifoldPoints) }; M.b2ContactListener = function() {}; M.prototype.BeginContact = function() {}; M.prototype.EndContact = function() {}; M.prototype.PreSolve = function() {}; M.prototype.PostSolve = function() {}; Box2D.postDefs.push(function() { Box2D.Dynamics.b2ContactListener.b2_defaultListener = new M }); R.b2ContactManager = function() {}; R.prototype.b2ContactManager = function() { this.m_world = null; this.m_contactCount = 0; this.m_contactFilter = E.b2_defaultFilter; this.m_contactListener = M.b2_defaultListener; this.m_contactFactory = new D(this.m_allocator); this.m_broadPhase = new g }; R.prototype.AddPair = function(b, c) { var d = b instanceof S ? b : null, e = c instanceof S ? c : null, f = d.GetBody(), g = e.GetBody(); if (f != g) { for (var p = g.GetContactList(); p;) { if (p.other == f) { var j = p.contact.GetFixtureA(), v = p.contact.GetFixtureB(); if (j == d && v == e || j == e && v == d) return } p = p.next }!1 != g.ShouldCollide(f) && !1 != this.m_contactFilter.ShouldCollide(d, e) && (p = this.m_contactFactory.Create(d, e), d = p.GetFixtureA(), e = p.GetFixtureB(), f = d.m_body, g = e.m_body, p.m_prev = null, p.m_next = this.m_world.m_contactList, null != this.m_world.m_contactList && (this.m_world.m_contactList.m_prev = p), this.m_world.m_contactList = p, p.m_nodeA.contact = p, p.m_nodeA.other = g, p.m_nodeA.prev = null, p.m_nodeA.next = f.m_contactList, null != f.m_contactList && (f.m_contactList.prev = p.m_nodeA), f.m_contactList = p.m_nodeA, p.m_nodeB.contact = p, p.m_nodeB.other = f, p.m_nodeB.prev = null, p.m_nodeB.next = g.m_contactList, null != g.m_contactList && (g.m_contactList.prev = p.m_nodeB), g.m_contactList = p.m_nodeB, ++this.m_world.m_contactCount) } }; R.prototype.FindNewContacts = function() { this.m_broadPhase.UpdatePairs(Box2D.generateCallback(this, this.AddPair)) }; R.prototype.Destroy = function(b) { var c = b.GetFixtureA(), d = b.GetFixtureB(), c = c.GetBody(), d = d.GetBody(); b.IsTouching() && this.m_contactListener.EndContact(b); b.m_prev && (b.m_prev.m_next = b.m_next); b.m_next && (b.m_next.m_prev = b.m_prev); b == this.m_world.m_contactList && (this.m_world.m_contactList = b.m_next); b.m_nodeA.prev && (b.m_nodeA.prev.next = b.m_nodeA.next); b.m_nodeA.next && (b.m_nodeA.next.prev = b.m_nodeA.prev); b.m_nodeA == c.m_contactList && (c.m_contactList = b.m_nodeA.next); b.m_nodeB.prev && (b.m_nodeB.prev.next = b.m_nodeB.next); b.m_nodeB.next && (b.m_nodeB.next.prev = b.m_nodeB.prev); b.m_nodeB == d.m_contactList && (d.m_contactList = b.m_nodeB.next); this.m_contactFactory.Destroy(b); --this.m_contactCount }; R.prototype.Collide = function() { for (var b = this.m_world.m_contactList; b;) { var c = b.GetFixtureA(), d = b.GetFixtureB(), e = c.GetBody(), f = d.GetBody(); if (!1 == e.IsAwake() && !1 == f.IsAwake()) b = b.GetNext(); else { if (b.m_flags & H.e_filterFlag) { if (!1 == f.ShouldCollide(e)) { c = b; b = c.GetNext(); this.Destroy(c); continue } if (!1 == this.m_contactFilter.ShouldCollide(c, d)) { c = b; b = c.GetNext(); this.Destroy(c); continue } b.m_flags &= ~H.e_filterFlag }!1 == this.m_broadPhase.TestOverlap(c.m_proxy, d.m_proxy) ? (c = b, b = c.GetNext(), this.Destroy(c)) : (b.Update(this.m_contactListener), b = b.GetNext()) } } }; Box2D.postDefs.push(function() { Box2D.Dynamics.b2ContactManager.s_evalCP = new n }); K.b2DebugDraw = function() {}; K.prototype.b2DebugDraw = function() {}; K.prototype.SetFlags = function() {}; K.prototype.GetFlags = function() {}; K.prototype.AppendFlags = function() {}; K.prototype.ClearFlags = function() {}; K.prototype.SetSprite = function() {}; K.prototype.GetSprite = function() {}; K.prototype.SetDrawScale = function() {}; K.prototype.GetDrawScale = function() {}; K.prototype.SetLineThickness = function() {}; K.prototype.GetLineThickness = function() {}; K.prototype.SetAlpha = function() {}; K.prototype.GetAlpha = function() {}; K.prototype.SetFillAlpha = function() {}; K.prototype.GetFillAlpha = function() {}; K.prototype.SetXFormScale = function() {}; K.prototype.GetXFormScale = function() {}; K.prototype.DrawPolygon = function() {}; K.prototype.DrawSolidPolygon = function() {}; K.prototype.DrawCircle = function() {}; K.prototype.DrawSolidCircle = function() {}; K.prototype.DrawSegment = function() {}; K.prototype.DrawTransform = function() {}; Box2D.postDefs.push(function() { Box2D.Dynamics.b2DebugDraw.e_shapeBit = 1; Box2D.Dynamics.b2DebugDraw.e_jointBit = 2; Box2D.Dynamics.b2DebugDraw.e_aabbBit = 4; Box2D.Dynamics.b2DebugDraw.e_pairBit = 8; Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit = 16; Box2D.Dynamics.b2DebugDraw.e_controllerBit = 32 }); X.b2DestructionListener = function() {}; X.prototype.SayGoodbyeJoint = function() {}; X.prototype.SayGoodbyeFixture = function() {}; P.b2FilterData = function() { this.categoryBits = 1; this.maskBits = 65535; this.groupIndex = 0 }; P.prototype.Copy = function() { var b = new P; b.categoryBits = this.categoryBits; b.maskBits = this.maskBits; b.groupIndex = this.groupIndex; return b }; S.b2Fixture = function() { this.m_filter = new P }; S.prototype.GetType = function() { return this.m_shape.GetType() }; S.prototype.GetShape = function() { return this.m_shape }; S.prototype.SetSensor = function(b) { if (this.m_isSensor != b && (this.m_isSensor = b, null != this.m_body)) for (b = this.m_body.GetContactList(); b;) { var c = b.contact, d = c.GetFixtureA(), e = c.GetFixtureB(); if (d == this || e == this) c.SetSensor(d.IsSensor() || e.IsSensor()); b = b.next } }; S.prototype.IsSensor = function() { return this.m_isSensor }; S.prototype.SetFilterData = function(b) { this.m_filter = b.Copy(); if (!this.m_body) for (b = this.m_body.GetContactList(); b;) { var c = b.contact, d = c.GetFixtureA(), e = c.GetFixtureB(); (d == this || e == this) && c.FlagForFiltering(); b = b.next } }; S.prototype.GetFilterData = function() { return this.m_filter.Copy() }; S.prototype.GetBody = function() { return this.m_body }; S.prototype.GetNext = function() { return this.m_next }; S.prototype.GetUserData = function() { return this.m_userData }; S.prototype.SetUserData = function(b) { this.m_userData = b }; S.prototype.TestPoint = function(b) { return this.m_shape.TestPoint(this.m_body.GetTransform(), b) }; S.prototype.RayCast = function(b, c) { return this.m_shape.RayCast(b, c, this.m_body.GetTransform()) }; S.prototype.GetMassData = function(b) { void 0 === b && (b = null); null == b && (b = new C); this.m_shape.ComputeMass(b, this.m_density); return b }; S.prototype.SetDensity = function(b) { void 0 === b && (b = 0); this.m_density = b }; S.prototype.GetDensity = function() { return this.m_density }; S.prototype.GetFriction = function() { return this.m_friction }; S.prototype.SetFriction = function(b) { void 0 === b && (b = 0); this.m_friction = b }; S.prototype.GetRestitution = function() { return this.m_restitution }; S.prototype.SetRestitution = function(b) { void 0 === b && (b = 0); this.m_restitution = b }; S.prototype.GetAABB = function() { return this.m_aabb }; S.prototype.b2Fixture = function() { this.m_aabb = new q; this.m_shape = this.m_next = this.m_body = this.m_userData = null; this.m_restitution = this.m_friction = this.m_density = 0 }; S.prototype.Create = function(b, c, d) { this.m_userData = d.userData; this.m_friction = d.friction; this.m_restitution = d.restitution; this.m_body = b; this.m_next = null; this.m_filter = d.filter.Copy(); this.m_isSensor = d.isSensor; this.m_shape = d.shape.Copy(); this.m_density = d.density }; S.prototype.Destroy = function() { this.m_shape = null }; S.prototype.CreateProxy = function(b, c) { this.m_shape.ComputeAABB(this.m_aabb, c); this.m_proxy = b.CreateProxy(this.m_aabb, this) }; S.prototype.DestroyProxy = function(b) { null != this.m_proxy && (b.DestroyProxy(this.m_proxy), this.m_proxy = null) }; S.prototype.Synchronize = function(c, d, e) { if (this.m_proxy) { var f = new q, g = new q; this.m_shape.ComputeAABB(f, d); this.m_shape.ComputeAABB(g, e); this.m_aabb.Combine(f, g); d = b.SubtractVV(e.position, d.position); c.MoveProxy(this.m_proxy, this.m_aabb, d) } }; Z.b2FixtureDef = function() { this.filter = new P }; Z.prototype.b2FixtureDef = function() { this.userData = this.shape = null; this.friction = 0.2; this.density = this.restitution = 0; this.filter.categoryBits = 1; this.filter.maskBits = 65535; this.filter.groupIndex = 0; this.isSensor = !1 }; U.b2Island = function() {}; U.prototype.b2Island = function() { this.m_bodies = new Vector; this.m_contacts = new Vector; this.m_joints = new Vector }; U.prototype.Initialize = function(b, c, d, e, f, g) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = 0); var p = 0; this.m_bodyCapacity = b; this.m_contactCapacity = c; this.m_jointCapacity = d; this.m_jointCount = this.m_contactCount = this.m_bodyCount = 0; this.m_allocator = e; this.m_listener = f; this.m_contactSolver = g; for (p = this.m_bodies.length; p < b; p++) this.m_bodies[p] = null; for (p = this.m_contacts.length; p < c; p++) this.m_contacts[p] = null; for (p = this.m_joints.length; p < d; p++) this.m_joints[p] = null }; U.prototype.Clear = function() { this.m_jointCount = this.m_contactCount = this.m_bodyCount = 0 }; U.prototype.Solve = function(c, d, e) { for (var f = 0, p = 0, g, f = 0; f < this.m_bodyCount; ++f) p = this.m_bodies[f], p.GetType() == u.b2_dynamicBody && (p.m_linearVelocity.x += c.dt * (d.x + p.m_invMass * p.m_force.x), p.m_linearVelocity.y += c.dt * (d.y + p.m_invMass * p.m_force.y), p.m_angularVelocity += c.dt * p.m_invI * p.m_torque, p.m_linearVelocity.Multiply(b.Clamp(1 - c.dt * p.m_linearDamping, 0, 1)), p.m_angularVelocity *= b.Clamp(1 - c.dt * p.m_angularDamping, 0, 1)); this.m_contactSolver.Initialize(c, this.m_contacts, this.m_contactCount, this.m_allocator); d = this.m_contactSolver; d.InitVelocityConstraints(c); for (f = 0; f < this.m_jointCount; ++f) g = this.m_joints[f], g.InitVelocityConstraints(c); for (f = 0; f < c.velocityIterations; ++f) { for (p = 0; p < this.m_jointCount; ++p) g = this.m_joints[p], g.SolveVelocityConstraints(c); d.SolveVelocityConstraints() } for (f = 0; f < this.m_jointCount; ++f) g = this.m_joints[f], g.FinalizeVelocityConstraints(); d.FinalizeVelocityConstraints(); for (f = 0; f < this.m_bodyCount; ++f) if (p = this.m_bodies[f], p.GetType() != u.b2_staticBody) { var v = c.dt * p.m_linearVelocity.x, D = c.dt * p.m_linearVelocity.y; v * v + D * D > j.b2_maxTranslationSquared && (p.m_linearVelocity.Normalize(), p.m_linearVelocity.x *= j.b2_maxTranslation * c.inv_dt, p.m_linearVelocity.y *= j.b2_maxTranslation * c.inv_dt); v = c.dt * p.m_angularVelocity; v * v > j.b2_maxRotationSquared && (p.m_angularVelocity = 0 > p.m_angularVelocity ? -j.b2_maxRotation * c.inv_dt : j.b2_maxRotation * c.inv_dt); p.m_sweep.c0.SetV(p.m_sweep.c); p.m_sweep.a0 = p.m_sweep.a; p.m_sweep.c.x += c.dt * p.m_linearVelocity.x; p.m_sweep.c.y += c.dt * p.m_linearVelocity.y; p.m_sweep.a += c.dt * p.m_angularVelocity; p.SynchronizeTransform() } for (f = 0; f < c.positionIterations; ++f) { v = d.SolvePositionConstraints(j.b2_contactBaumgarte); D = !0; for (p = 0; p < this.m_jointCount; ++p) g = this.m_joints[p], g = g.SolvePositionConstraints(j.b2_contactBaumgarte), D = D && g; if (v && D) break } this.Report(d.m_constraints); if (e) { e = Number.MAX_VALUE; d = j.b2_linearSleepTolerance * j.b2_linearSleepTolerance; v = j.b2_angularSleepTolerance * j.b2_angularSleepTolerance; for (f = 0; f < this.m_bodyCount; ++f) p = this.m_bodies[f], p.GetType() != u.b2_staticBody && (0 == (p.m_flags & u.e_allowSleepFlag) && (e = p.m_sleepTime = 0), 0 == (p.m_flags & u.e_allowSleepFlag) || p.m_angularVelocity * p.m_angularVelocity > v || b.Dot(p.m_linearVelocity, p.m_linearVelocity) > d ? e = p.m_sleepTime = 0 : (p.m_sleepTime += c.dt, e = b.Min(e, p.m_sleepTime))); if (e >= j.b2_timeToSleep) for (f = 0; f < this.m_bodyCount; ++f) p = this.m_bodies[f], p.SetAwake(!1) } }; U.prototype.SolveTOI = function(b) { var c = 0, d = 0; this.m_contactSolver.Initialize(b, this.m_contacts, this.m_contactCount, this.m_allocator); for (var e = this.m_contactSolver, c = 0; c < this.m_jointCount; ++c) this.m_joints[c].InitVelocityConstraints(b); for (c = 0; c < b.velocityIterations; ++c) { e.SolveVelocityConstraints(); for (d = 0; d < this.m_jointCount; ++d) this.m_joints[d].SolveVelocityConstraints(b) } for (c = 0; c < this.m_bodyCount; ++c) if (d = this.m_bodies[c], d.GetType() != u.b2_staticBody) { var f = b.dt * d.m_linearVelocity.x, p = b.dt * d.m_linearVelocity.y; f * f + p * p > j.b2_maxTranslationSquared && (d.m_linearVelocity.Normalize(), d.m_linearVelocity.x *= j.b2_maxTranslation * b.inv_dt, d.m_linearVelocity.y *= j.b2_maxTranslation * b.inv_dt); f = b.dt * d.m_angularVelocity; f * f > j.b2_maxRotationSquared && (d.m_angularVelocity = 0 > d.m_angularVelocity ? -j.b2_maxRotation * b.inv_dt : j.b2_maxRotation * b.inv_dt); d.m_sweep.c0.SetV(d.m_sweep.c); d.m_sweep.a0 = d.m_sweep.a; d.m_sweep.c.x += b.dt * d.m_linearVelocity.x; d.m_sweep.c.y += b.dt * d.m_linearVelocity.y; d.m_sweep.a += b.dt * d.m_angularVelocity; d.SynchronizeTransform() } for (c = 0; c < b.positionIterations; ++c) { f = e.SolvePositionConstraints(0.75); p = !0; for (d = 0; d < this.m_jointCount; ++d) var g = this.m_joints[d].SolvePositionConstraints(j.b2_contactBaumgarte), p = p && g; if (f && p) break } this.Report(e.m_constraints) }; U.prototype.Report = function(b) { if (null != this.m_listener) for (var c = 0; c < this.m_contactCount; ++c) { for (var d = this.m_contacts[c], e = b[c], f = 0; f < e.pointCount; ++f) U.s_impulse.normalImpulses[f] = e.points[f].normalImpulse, U.s_impulse.tangentImpulses[f] = e.points[f].tangentImpulse; this.m_listener.PostSolve(d, U.s_impulse) } }; U.prototype.AddBody = function(b) { b.m_islandIndex = this.m_bodyCount; this.m_bodies[this.m_bodyCount++] = b }; U.prototype.AddContact = function(b) { this.m_contacts[this.m_contactCount++] = b }; U.prototype.AddJoint = function(b) { this.m_joints[this.m_jointCount++] = b }; Box2D.postDefs.push(function() { Box2D.Dynamics.b2Island.s_impulse = new Q }); p.b2TimeStep = function() {}; p.prototype.Set = function(b) { this.dt = b.dt; this.inv_dt = b.inv_dt; this.positionIterations = b.positionIterations; this.velocityIterations = b.velocityIterations; this.warmStarting = b.warmStarting }; v.b2World = function() { this.s_stack = new Vector; this.m_contactManager = new R; this.m_contactSolver = new N; this.m_island = new U }; v.prototype.b2World = function(b, c) { this.m_controllerList = this.m_jointList = this.m_contactList = this.m_bodyList = this.m_debugDraw = this.m_destructionListener = null; this.m_controllerCount = this.m_jointCount = this.m_contactCount = this.m_bodyCount = 0; v.m_warmStarting = !0; v.m_continuousPhysics = !0; this.m_allowSleep = c; this.m_gravity = b; this.m_inv_dt0 = 0; this.m_contactManager.m_world = this; this.m_groundBody = this.CreateBody(new L) }; v.prototype.SetDestructionListener = function(b) { this.m_destructionListener = b }; v.prototype.SetContactFilter = function(b) { this.m_contactManager.m_contactFilter = b }; v.prototype.SetContactListener = function(b) { this.m_contactManager.m_contactListener = b }; v.prototype.SetDebugDraw = function(b) { this.m_debugDraw = b }; v.prototype.SetBroadPhase = function(b) { var c = this.m_contactManager.m_broadPhase; this.m_contactManager.m_broadPhase = b; for (var d = this.m_bodyList; d; d = d.m_next) for (var e = d.m_fixtureList; e; e = e.m_next) e.m_proxy = b.CreateProxy(c.GetFatAABB(e.m_proxy), e) }; v.prototype.Validate = function() { this.m_contactManager.m_broadPhase.Validate() }; v.prototype.GetProxyCount = function() { return this.m_contactManager.m_broadPhase.GetProxyCount() }; v.prototype.CreateBody = function(b) { if (!0 == this.IsLocked()) return null; b = new u(b, this); b.m_prev = null; if (b.m_next = this.m_bodyList) this.m_bodyList.m_prev = b; this.m_bodyList = b; ++this.m_bodyCount; return b }; v.prototype.DestroyBody = function(b) { if (!0 != this.IsLocked()) { for (var c = b.m_jointList; c;) { var d = c, c = c.next; this.m_destructionListener && this.m_destructionListener.SayGoodbyeJoint(d.joint); this.DestroyJoint(d.joint) } for (c = b.m_controllerList; c;) d = c, c = c.nextController, d.controller.RemoveBody(b); for (c = b.m_contactList; c;) d = c, c = c.next, this.m_contactManager.Destroy(d.contact); b.m_contactList = null; for (c = b.m_fixtureList; c;) d = c, c = c.m_next, this.m_destructionListener && this.m_destructionListener.SayGoodbyeFixture(d), d.DestroyProxy(this.m_contactManager.m_broadPhase), d.Destroy(); b.m_fixtureList = null; b.m_fixtureCount = 0; b.m_prev && (b.m_prev.m_next = b.m_next); b.m_next && (b.m_next.m_prev = b.m_prev); b == this.m_bodyList && (this.m_bodyList = b.m_next); --this.m_bodyCount } }; v.prototype.CreateJoint = function(b) { var c = J.Create(b, null); c.m_prev = null; if (c.m_next = this.m_jointList) this.m_jointList.m_prev = c; this.m_jointList = c; ++this.m_jointCount; c.m_edgeA.joint = c; c.m_edgeA.other = c.m_bodyB; c.m_edgeA.prev = null; if (c.m_edgeA.next = c.m_bodyA.m_jointList) c.m_bodyA.m_jointList.prev = c.m_edgeA; c.m_bodyA.m_jointList = c.m_edgeA; c.m_edgeB.joint = c; c.m_edgeB.other = c.m_bodyA; c.m_edgeB.prev = null; if (c.m_edgeB.next = c.m_bodyB.m_jointList) c.m_bodyB.m_jointList.prev = c.m_edgeB; c.m_bodyB.m_jointList = c.m_edgeB; var d = b.bodyA, e = b.bodyB; if (!1 == b.collideConnected) for (b = e.GetContactList(); b;) b.other == d && b.contact.FlagForFiltering(), b = b.next; return c }; v.prototype.DestroyJoint = function(b) { var c = b.m_collideConnected; b.m_prev && (b.m_prev.m_next = b.m_next); b.m_next && (b.m_next.m_prev = b.m_prev); b == this.m_jointList && (this.m_jointList = b.m_next); var d = b.m_bodyA, e = b.m_bodyB; d.SetAwake(!0); e.SetAwake(!0); b.m_edgeA.prev && (b.m_edgeA.prev.next = b.m_edgeA.next); b.m_edgeA.next && (b.m_edgeA.next.prev = b.m_edgeA.prev); b.m_edgeA == d.m_jointList && (d.m_jointList = b.m_edgeA.next); b.m_edgeA.prev = null; b.m_edgeA.next = null; b.m_edgeB.prev && (b.m_edgeB.prev.next = b.m_edgeB.next); b.m_edgeB.next && (b.m_edgeB.next.prev = b.m_edgeB.prev); b.m_edgeB == e.m_jointList && (e.m_jointList = b.m_edgeB.next); b.m_edgeB.prev = null; b.m_edgeB.next = null; J.Destroy(b, null); --this.m_jointCount; if (!1 == c) for (b = e.GetContactList(); b;) b.other == d && b.contact.FlagForFiltering(), b = b.next }; v.prototype.AddController = function(b) { b.m_next = this.m_controllerList; b.m_prev = null; this.m_controllerList = b; b.m_world = this; this.m_controllerCount++; return b }; v.prototype.RemoveController = function(b) { b.m_prev && (b.m_prev.m_next = b.m_next); b.m_next && (b.m_next.m_prev = b.m_prev); this.m_controllerList == b && (this.m_controllerList = b.m_next); this.m_controllerCount-- }; v.prototype.CreateController = function(b) { if (b.m_world != this) throw Error("Controller can only be a member of one world"); b.m_next = this.m_controllerList; b.m_prev = null; this.m_controllerList && (this.m_controllerList.m_prev = b); this.m_controllerList = b; ++this.m_controllerCount; b.m_world = this; return b }; v.prototype.DestroyController = function(b) { b.Clear(); b.m_next && (b.m_next.m_prev = b.m_prev); b.m_prev && (b.m_prev.m_next = b.m_next); b == this.m_controllerList && (this.m_controllerList = b.m_next); --this.m_controllerCount }; v.prototype.SetWarmStarting = function(b) { v.m_warmStarting = b }; v.prototype.SetContinuousPhysics = function(b) { v.m_continuousPhysics = b }; v.prototype.GetBodyCount = function() { return this.m_bodyCount }; v.prototype.GetJointCount = function() { return this.m_jointCount }; v.prototype.GetContactCount = function() { return this.m_contactCount }; v.prototype.SetGravity = function(b) { this.m_gravity = b }; v.prototype.GetGravity = function() { return this.m_gravity }; v.prototype.GetGroundBody = function() { return this.m_groundBody }; v.prototype.Step = function(b, c, d) { void 0 === b && (b = 0); void 0 === c && (c = 0); void 0 === d && (d = 0); this.m_flags & v.e_newFixture && (this.m_contactManager.FindNewContacts(), this.m_flags &= ~v.e_newFixture); this.m_flags |= v.e_locked; var e = v.s_timestep2; e.dt = b; e.velocityIterations = c; e.positionIterations = d; e.inv_dt = 0 < b ? 1 / b : 0; e.dtRatio = this.m_inv_dt0 * b; e.warmStarting = v.m_warmStarting; this.m_contactManager.Collide(); 0 < e.dt && this.Solve(e); v.m_continuousPhysics && 0 < e.dt && this.SolveTOI(e); 0 < e.dt && (this.m_inv_dt0 = e.inv_dt); this.m_flags &= ~v.e_locked }; v.prototype.ClearForces = function() { for (var b = this.m_bodyList; b; b = b.m_next) b.m_force.SetZero(), b.m_torque = 0 }; v.prototype.DrawDebugData = function() { if (null != this.m_debugDraw) { this.m_debugDraw.m_sprite.graphics.clear(); var b = this.m_debugDraw.GetFlags(), c, d, p; new e; new e; new e; var g; new q; new q; new e; new e; new e; new e; var j = new f(0, 0, 0); if (b & K.e_shapeBit) for (c = this.m_bodyList; c; c = c.m_next) { g = c.m_xf; for (d = c.GetFixtureList(); d; d = d.m_next) p = d.GetShape(), !1 == c.IsActive() ? j.Set(0.5, 0.5, 0.3) : c.GetType() == u.b2_staticBody ? j.Set(0.5, 0.9, 0.5) : c.GetType() == u.b2_kinematicBody ? j.Set(0.5, 0.5, 0.9) : !1 == c.IsAwake() ? j.Set(0.6, 0.6, 0.6) : j.Set(0.9, 0.7, 0.7), this.DrawShape(p, g, j) } if (b & K.e_jointBit) for (c = this.m_jointList; c; c = c.m_next) this.DrawJoint(c); if (b & K.e_controllerBit) for (c = this.m_controllerList; c; c = c.m_next) c.Draw(this.m_debugDraw); if (b & K.e_pairBit) { j.Set(0.3, 0.9, 0.9); for (c = this.m_contactManager.m_contactList; c; c = c.GetNext()) p = c.GetFixtureA(), d = c.GetFixtureB(), p = p.GetAABB().GetCenter(), d = d.GetAABB().GetCenter(), this.m_debugDraw.DrawSegment(p, d, j) } if (b & K.e_aabbBit) { p = this.m_contactManager.m_broadPhase; g = [new e, new e, new e, new e]; for (c = this.m_bodyList; c; c = c.GetNext()) if (!1 != c.IsActive()) for (d = c.GetFixtureList(); d; d = d.GetNext()) { var D = p.GetFatAABB(d.m_proxy); g[0].Set(D.lowerBound.x, D.lowerBound.y); g[1].Set(D.upperBound.x, D.lowerBound.y); g[2].Set(D.upperBound.x, D.upperBound.y); g[3].Set(D.lowerBound.x, D.upperBound.y); this.m_debugDraw.DrawPolygon(g, 4, j) } } if (b & K.e_centerOfMassBit) for (c = this.m_bodyList; c; c = c.m_next) g = v.s_xf, g.R = c.m_xf.R, g.position = c.GetWorldCenter(), this.m_debugDraw.DrawTransform(g) } }; v.prototype.QueryAABB = function(b, c) { var d = this.m_contactManager.m_broadPhase; d.Query(function(c) { return b(d.GetUserData(c)) }, c) }; v.prototype.QueryShape = function(b, c, e) { void 0 === e && (e = null); null == e && (e = new d, e.SetIdentity()); var f = this.m_contactManager.m_broadPhase, p = new q; c.ComputeAABB(p, e); f.Query(function(d) { d = f.GetUserData(d) instanceof S ? f.GetUserData(d) : null; return I.TestOverlap(c, e, d.GetShape(), d.GetBody().GetTransform()) ? b(d) : !0 }, p) }; v.prototype.QueryPoint = function(b, c) { var d = this.m_contactManager.m_broadPhase, e = new q; e.lowerBound.Set(c.x - j.b2_linearSlop, c.y - j.b2_linearSlop); e.upperBound.Set(c.x + j.b2_linearSlop, c.y + j.b2_linearSlop); d.Query(function(e) { e = d.GetUserData(e) instanceof S ? d.GetUserData(e) : null; return e.TestPoint(c) ? b(e) : !0 }, e) }; v.prototype.RayCast = function(b, c, d) { var f = this.m_contactManager.m_broadPhase, p = new A, g = new y(c, d); f.RayCast(function(g, j) { var v = f.GetUserData(j), v = v instanceof S ? v : null; if (v.RayCast(p, g)) { var m = p.fraction, D = new e((1 - m) * c.x + m * d.x, (1 - m) * c.y + m * d.y); return b(v, D, p.normal, m) } return g.maxFraction }, g) }; v.prototype.RayCastOne = function(b, c) { var d; this.RayCast(function(b, c, e, f) { void 0 === f && (f = 0); d = b; return f }, b, c); return d }; v.prototype.RayCastAll = function(b, c) { var d = new Vector; this.RayCast(function(b) { d[d.length] = b; return 1 }, b, c); return d }; v.prototype.GetBodyList = function() { return this.m_bodyList }; v.prototype.GetJointList = function() { return this.m_jointList }; v.prototype.GetContactList = function() { return this.m_contactList }; v.prototype.IsLocked = function() { return 0 < (this.m_flags & v.e_locked) }; v.prototype.Solve = function(b) { for (var c, d = this.m_controllerList; d; d = d.m_next) d.Step(b); d = this.m_island; d.Initialize(this.m_bodyCount, this.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener, this.m_contactSolver); for (c = this.m_bodyList; c; c = c.m_next) c.m_flags &= ~u.e_islandFlag; for (var e = this.m_contactList; e; e = e.m_next) e.m_flags &= ~H.e_islandFlag; for (e = this.m_jointList; e; e = e.m_next) e.m_islandFlag = !1; parseInt(this.m_bodyCount); for (var e = this.s_stack, f = this.m_bodyList; f; f = f.m_next) if (!(f.m_flags & u.e_islandFlag) && !(!1 == f.IsAwake() || !1 == f.IsActive()) && f.GetType() != u.b2_staticBody) { d.Clear(); var p = 0; e[p++] = f; for (f.m_flags |= u.e_islandFlag; 0 < p;) if (c = e[--p], d.AddBody(c), !1 == c.IsAwake() && c.SetAwake(!0), c.GetType() != u.b2_staticBody) { for (var g, j = c.m_contactList; j; j = j.next) if (!(j.contact.m_flags & H.e_islandFlag) && !(!0 == j.contact.IsSensor() || !1 == j.contact.IsEnabled() || !1 == j.contact.IsTouching())) d.AddContact(j.contact), j.contact.m_flags |= H.e_islandFlag, g = j.other, g.m_flags & u.e_islandFlag || (e[p++] = g, g.m_flags |= u.e_islandFlag); for (c = c.m_jointList; c; c = c.next) !0 != c.joint.m_islandFlag && (g = c.other, !1 != g.IsActive() && (d.AddJoint(c.joint), c.joint.m_islandFlag = !0, g.m_flags & u.e_islandFlag || (e[p++] = g, g.m_flags |= u.e_islandFlag))) } d.Solve(b, this.m_gravity, this.m_allowSleep); for (p = 0; p < d.m_bodyCount; ++p) c = d.m_bodies[p], c.GetType() == u.b2_staticBody && (c.m_flags &= ~u.e_islandFlag) } for (p = 0; p < e.length && e[p]; ++p) e[p] = null; for (c = this.m_bodyList; c; c = c.m_next) !1 == c.IsAwake() || !1 == c.IsActive() || c.GetType() != u.b2_staticBody && c.SynchronizeFixtures(); this.m_contactManager.FindNewContacts() }; v.prototype.SolveTOI = function(b) { var c, d, e, f = this.m_island; f.Initialize(this.m_bodyCount, j.b2_maxTOIContactsPerIsland, j.b2_maxTOIJointsPerIsland, null, this.m_contactManager.m_contactListener, this.m_contactSolver); var p = v.s_queue; for (c = this.m_bodyList; c; c = c.m_next) c.m_flags &= ~u.e_islandFlag, c.m_sweep.t0 = 0; for (e = this.m_contactList; e; e = e.m_next) e.m_flags &= ~(H.e_toiFlag | H.e_islandFlag); for (e = this.m_jointList; e; e = e.m_next) e.m_islandFlag = !1; for (;;) { var g = null, D = 1; for (e = this.m_contactList; e; e = e.m_next) if (!(!0 == e.IsSensor() || !1 == e.IsEnabled() || !1 == e.IsContinuous())) { if (e.m_flags & H.e_toiFlag) c = e.m_toi; else { c = e.m_fixtureA; d = e.m_fixtureB; c = c.m_body; d = d.m_body; if ((c.GetType() != u.b2_dynamicBody || !1 == c.IsAwake()) && (d.GetType() != u.b2_dynamicBody || !1 == d.IsAwake())) continue; var n = c.m_sweep.t0; c.m_sweep.t0 < d.m_sweep.t0 ? (n = d.m_sweep.t0, c.m_sweep.Advance(n)) : d.m_sweep.t0 < c.m_sweep.t0 && (n = c.m_sweep.t0, d.m_sweep.Advance(n)); c = e.ComputeTOI(c.m_sweep, d.m_sweep); j.b2Assert(0 <= c && 1 >= c); 0 < c && 1 > c && (c = (1 - c) * n + c, 1 < c && (c = 1)); e.m_toi = c; e.m_flags |= H.e_toiFlag } Number.MIN_VALUE < c && c < D && (g = e, D = c) } if (null == g || 1 - 100 * Number.MIN_VALUE < D) break; c = g.m_fixtureA; d = g.m_fixtureB; c = c.m_body; d = d.m_body; v.s_backupA.Set(c.m_sweep); v.s_backupB.Set(d.m_sweep); c.Advance(D); d.Advance(D); g.Update(this.m_contactManager.m_contactListener); g.m_flags &= ~H.e_toiFlag; if (!0 == g.IsSensor() || !1 == g.IsEnabled()) c.m_sweep.Set(v.s_backupA), d.m_sweep.Set(v.s_backupB), c.SynchronizeTransform(), d.SynchronizeTransform(); else if (!1 != g.IsTouching()) { c.GetType() != u.b2_dynamicBody && (c = d); f.Clear(); g = e = 0; p[e + g++] = c; for (c.m_flags |= u.e_islandFlag; 0 < g;) if (c = p[e++], --g, f.AddBody(c), !1 == c.IsAwake() && c.SetAwake(!0), c.GetType() == u.b2_dynamicBody) { for (d = c.m_contactList; d && f.m_contactCount != f.m_contactCapacity; d = d.next) if (!(d.contact.m_flags & H.e_islandFlag) && !(!0 == d.contact.IsSensor() || !1 == d.contact.IsEnabled() || !1 == d.contact.IsTouching())) f.AddContact(d.contact), d.contact.m_flags |= H.e_islandFlag, n = d.other, n.m_flags & u.e_islandFlag || (n.GetType() != u.b2_staticBody && (n.Advance(D), n.SetAwake(!0)), p[e + g] = n, ++g, n.m_flags |= u.e_islandFlag); for (c = c.m_jointList; c; c = c.next) f.m_jointCount != f.m_jointCapacity && !0 != c.joint.m_islandFlag && (n = c.other, !1 != n.IsActive() && (f.AddJoint(c.joint), c.joint.m_islandFlag = !0, n.m_flags & u.e_islandFlag || (n.GetType() != u.b2_staticBody && (n.Advance(D), n.SetAwake(!0)), p[e + g] = n, ++g, n.m_flags |= u.e_islandFlag))) } e = v.s_timestep; e.warmStarting = !1; e.dt = (1 - D) * b.dt; e.inv_dt = 1 / e.dt; e.dtRatio = 0; e.velocityIterations = b.velocityIterations; e.positionIterations = b.positionIterations; f.SolveTOI(e); for (D = D = 0; D < f.m_bodyCount; ++D) if (c = f.m_bodies[D], c.m_flags &= ~u.e_islandFlag, !1 != c.IsAwake() && c.GetType() == u.b2_dynamicBody) { c.SynchronizeFixtures(); for (d = c.m_contactList; d; d = d.next) d.contact.m_flags &= ~H.e_toiFlag } for (D = 0; D < f.m_contactCount; ++D) e = f.m_contacts[D], e.m_flags &= ~(H.e_toiFlag | H.e_islandFlag); for (D = 0; D < f.m_jointCount; ++D) e = f.m_joints[D], e.m_islandFlag = !1; this.m_contactManager.FindNewContacts() } } }; v.prototype.DrawJoint = function(b) { var c = b.GetBodyA(), d = b.GetBodyB(), e = c.m_xf.position, f = d.m_xf.position, p = b.GetAnchorA(), g = b.GetAnchorB(), j = v.s_jointColor; switch (b.m_type) { case J.e_distanceJoint: this.m_debugDraw.DrawSegment(p, g, j); break; case J.e_pulleyJoint: c = b instanceof V ? b : null; b = c.GetGroundAnchorA(); c = c.GetGroundAnchorB(); this.m_debugDraw.DrawSegment(b, p, j); this.m_debugDraw.DrawSegment(c, g, j); this.m_debugDraw.DrawSegment(b, c, j); break; case J.e_mouseJoint: this.m_debugDraw.DrawSegment(p, g, j); break; default: c != this.m_groundBody && this.m_debugDraw.DrawSegment(e, p, j), this.m_debugDraw.DrawSegment(p, g, j), d != this.m_groundBody && this.m_debugDraw.DrawSegment(f, g, j) } }; v.prototype.DrawShape = function(c, d, e) { switch (c.m_type) { case I.e_circleShape: var f = c instanceof z ? c : null; this.m_debugDraw.DrawSolidCircle(b.MulX(d, f.m_p), f.m_radius, d.R.col1, e); break; case I.e_polygonShape: f = c instanceof G ? c : null; c = parseInt(f.GetVertexCount()); for (var p = f.GetVertices(), g = new Vector(c), f = 0; f < c; ++f) g[f] = b.MulX(d, p[f]); this.m_debugDraw.DrawSolidPolygon(g, c, e); break; case I.e_edgeShape: f = c instanceof B ? c : null, this.m_debugDraw.DrawSegment(b.MulX(d, f.GetVertex1()), b.MulX(d, f.GetVertex2()), e) } }; Box2D.postDefs.push(function() { Box2D.Dynamics.b2World.s_timestep2 = new p; Box2D.Dynamics.b2World.s_xf = new d; Box2D.Dynamics.b2World.s_backupA = new c; Box2D.Dynamics.b2World.s_backupB = new c; Box2D.Dynamics.b2World.s_timestep = new p; Box2D.Dynamics.b2World.s_queue = new Vector; Box2D.Dynamics.b2World.s_jointColor = new f(0.5, 0.8, 0.8); Box2D.Dynamics.b2World.e_newFixture = 1; Box2D.Dynamics.b2World.e_locked = 2 }) })(); (function() { var b = Box2D.Collision.Shapes.b2CircleShape, c = Box2D.Collision.Shapes.b2EdgeShape, d = Box2D.Collision.Shapes.b2PolygonShape, e = Box2D.Collision.Shapes.b2Shape, f = Box2D.Dynamics.Contacts.b2CircleContact, j = Box2D.Dynamics.Contacts.b2Contact, q = Box2D.Dynamics.Contacts.b2ContactConstraint, n = Box2D.Dynamics.Contacts.b2ContactConstraintPoint, g = Box2D.Dynamics.Contacts.b2ContactEdge, y = Box2D.Dynamics.Contacts.b2ContactFactory, A = Box2D.Dynamics.Contacts.b2ContactRegister, z = Box2D.Dynamics.Contacts.b2ContactResult, B = Box2D.Dynamics.Contacts.b2ContactSolver, C = Box2D.Dynamics.Contacts.b2EdgeAndCircleContact, G = Box2D.Dynamics.Contacts.b2NullContact, I = Box2D.Dynamics.Contacts.b2PolyAndCircleContact, u = Box2D.Dynamics.Contacts.b2PolyAndEdgeContact, L = Box2D.Dynamics.Contacts.b2PolygonContact, E = Box2D.Dynamics.Contacts.b2PositionSolverManifold, Q = Box2D.Dynamics.b2Body, M = Box2D.Dynamics.b2TimeStep, R = Box2D.Common.b2Settings, K = Box2D.Common.Math.b2Mat22, X = Box2D.Common.Math.b2Math, P = Box2D.Common.Math.b2Vec2, S = Box2D.Collision.b2Collision, Z = Box2D.Collision.b2ContactID, U = Box2D.Collision.b2Manifold, p = Box2D.Collision.b2TimeOfImpact, v = Box2D.Collision.b2TOIInput, H = Box2D.Collision.b2WorldManifold; Box2D.inherit(f, Box2D.Dynamics.Contacts.b2Contact); f.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; f.b2CircleContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; f.Create = function() { return new f }; f.Destroy = function() {}; f.prototype.Reset = function(b, c) { this.__super.Reset.call(this, b, c) }; f.prototype.Evaluate = function() { var c = this.m_fixtureA.GetBody(), d = this.m_fixtureB.GetBody(); S.CollideCircles(this.m_manifold, this.m_fixtureA.GetShape() instanceof b ? this.m_fixtureA.GetShape() : null, c.m_xf, this.m_fixtureB.GetShape() instanceof b ? this.m_fixtureB.GetShape() : null, d.m_xf) }; j.b2Contact = function() { this.m_nodeA = new g; this.m_nodeB = new g; this.m_manifold = new U; this.m_oldManifold = new U }; j.prototype.GetManifold = function() { return this.m_manifold }; j.prototype.GetWorldManifold = function(b) { var c = this.m_fixtureA.GetBody(), d = this.m_fixtureB.GetBody(), e = this.m_fixtureA.GetShape(), f = this.m_fixtureB.GetShape(); b.Initialize(this.m_manifold, c.GetTransform(), e.m_radius, d.GetTransform(), f.m_radius) }; j.prototype.IsTouching = function() { return (this.m_flags & j.e_touchingFlag) == j.e_touchingFlag }; j.prototype.IsContinuous = function() { return (this.m_flags & j.e_continuousFlag) == j.e_continuousFlag }; j.prototype.SetSensor = function(b) { this.m_flags = b ? this.m_flags | j.e_sensorFlag : this.m_flags & ~j.e_sensorFlag }; j.prototype.IsSensor = function() { return (this.m_flags & j.e_sensorFlag) == j.e_sensorFlag }; j.prototype.SetEnabled = function(b) { this.m_flags = b ? this.m_flags | j.e_enabledFlag : this.m_flags & ~j.e_enabledFlag }; j.prototype.IsEnabled = function() { return (this.m_flags & j.e_enabledFlag) == j.e_enabledFlag }; j.prototype.GetNext = function() { return this.m_next }; j.prototype.GetFixtureA = function() { return this.m_fixtureA }; j.prototype.GetFixtureB = function() { return this.m_fixtureB }; j.prototype.FlagForFiltering = function() { this.m_flags |= j.e_filterFlag }; j.prototype.b2Contact = function() {}; j.prototype.Reset = function(b, c) { void 0 === b && (b = null); void 0 === c && (c = null); this.m_flags = j.e_enabledFlag; if (!b || !c) this.m_fixtureB = this.m_fixtureA = null; else { if (b.IsSensor() || c.IsSensor()) this.m_flags |= j.e_sensorFlag; var d = b.GetBody(), e = c.GetBody(); if (d.GetType() != Q.b2_dynamicBody || d.IsBullet() || e.GetType() != Q.b2_dynamicBody || e.IsBullet()) this.m_flags |= j.e_continuousFlag; this.m_fixtureA = b; this.m_fixtureB = c; this.m_manifold.m_pointCount = 0; this.m_next = this.m_prev = null; this.m_nodeA.contact = null; this.m_nodeA.prev = null; this.m_nodeA.next = null; this.m_nodeA.other = null; this.m_nodeB.contact = null; this.m_nodeB.prev = null; this.m_nodeB.next = null; this.m_nodeB.other = null } }; j.prototype.Update = function(b) { var c = this.m_oldManifold; this.m_oldManifold = this.m_manifold; this.m_manifold = c; this.m_flags |= j.e_enabledFlag; var d = !1, c = (this.m_flags & j.e_touchingFlag) == j.e_touchingFlag, f = this.m_fixtureA.m_body, p = this.m_fixtureB.m_body, g = this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb); if (this.m_flags & j.e_sensorFlag) g && (d = this.m_fixtureA.GetShape(), g = this.m_fixtureB.GetShape(), f = f.GetTransform(), p = p.GetTransform(), d = e.TestOverlap(d, f, g, p)), this.m_manifold.m_pointCount = 0; else { this.m_flags = f.GetType() != Q.b2_dynamicBody || f.IsBullet() || p.GetType() != Q.b2_dynamicBody || p.IsBullet() ? this.m_flags | j.e_continuousFlag : this.m_flags & ~j.e_continuousFlag; if (g) { this.Evaluate(); d = 0 < this.m_manifold.m_pointCount; for (g = 0; g < this.m_manifold.m_pointCount; ++g) { var v = this.m_manifold.m_points[g]; v.m_normalImpulse = 0; v.m_tangentImpulse = 0; for (var n = v.m_id, H = 0; H < this.m_oldManifold.m_pointCount; ++H) { var q = this.m_oldManifold.m_points[H]; if (q.m_id.key == n.key) { v.m_normalImpulse = q.m_normalImpulse; v.m_tangentImpulse = q.m_tangentImpulse; break } } } } else this.m_manifold.m_pointCount = 0; d != c && (f.SetAwake(!0), p.SetAwake(!0)) } this.m_flags = d ? this.m_flags | j.e_touchingFlag : this.m_flags & ~j.e_touchingFlag; !1 == c && !0 == d && b.BeginContact(this); !0 == c && !1 == d && b.EndContact(this); 0 == (this.m_flags & j.e_sensorFlag) && b.PreSolve(this, this.m_oldManifold) }; j.prototype.Evaluate = function() {}; j.prototype.ComputeTOI = function(b, c) { j.s_input.proxyA.Set(this.m_fixtureA.GetShape()); j.s_input.proxyB.Set(this.m_fixtureB.GetShape()); j.s_input.sweepA = b; j.s_input.sweepB = c; j.s_input.tolerance = R.b2_linearSlop; return p.TimeOfImpact(j.s_input) }; Box2D.postDefs.push(function() { Box2D.Dynamics.Contacts.b2Contact.e_sensorFlag = 1; Box2D.Dynamics.Contacts.b2Contact.e_continuousFlag = 2; Box2D.Dynamics.Contacts.b2Contact.e_islandFlag = 4; Box2D.Dynamics.Contacts.b2Contact.e_toiFlag = 8; Box2D.Dynamics.Contacts.b2Contact.e_touchingFlag = 16; Box2D.Dynamics.Contacts.b2Contact.e_enabledFlag = 32; Box2D.Dynamics.Contacts.b2Contact.e_filterFlag = 64; Box2D.Dynamics.Contacts.b2Contact.s_input = new v }); q.b2ContactConstraint = function() { this.localPlaneNormal = new P; this.localPoint = new P; this.normal = new P; this.normalMass = new K; this.K = new K }; q.prototype.b2ContactConstraint = function() { this.points = new Vector(R.b2_maxManifoldPoints); for (var b = 0; b < R.b2_maxManifoldPoints; b++) this.points[b] = new n }; n.b2ContactConstraintPoint = function() { this.localPoint = new P; this.rA = new P; this.rB = new P }; g.b2ContactEdge = function() {}; y.b2ContactFactory = function() {}; y.prototype.b2ContactFactory = function(b) { this.m_allocator = b; this.InitializeRegisters() }; y.prototype.AddType = function(b, c, d, e) { void 0 === d && (d = 0); void 0 === e && (e = 0); this.m_registers[d][e].createFcn = b; this.m_registers[d][e].destroyFcn = c; this.m_registers[d][e].primary = !0; d != e && (this.m_registers[e][d].createFcn = b, this.m_registers[e][d].destroyFcn = c, this.m_registers[e][d].primary = !1) }; y.prototype.InitializeRegisters = function() { this.m_registers = new Vector(e.e_shapeTypeCount); for (var b = 0; b < e.e_shapeTypeCount; b++) { this.m_registers[b] = new Vector(e.e_shapeTypeCount); for (var c = 0; c < e.e_shapeTypeCount; c++) this.m_registers[b][c] = new A } this.AddType(f.Create, f.Destroy, e.e_circleShape, e.e_circleShape); this.AddType(I.Create, I.Destroy, e.e_polygonShape, e.e_circleShape); this.AddType(L.Create, L.Destroy, e.e_polygonShape, e.e_polygonShape); this.AddType(C.Create, C.Destroy, e.e_edgeShape, e.e_circleShape); this.AddType(u.Create, u.Destroy, e.e_polygonShape, e.e_edgeShape) }; y.prototype.Create = function(b, c) { var d = parseInt(b.GetType()), e = parseInt(c.GetType()), d = this.m_registers[d][e]; if (d.pool) return e = d.pool, d.pool = e.m_next, d.poolCount--, e.Reset(b, c), e; e = d.createFcn; return null != e ? (d.primary ? (e = e(this.m_allocator), e.Reset(b, c)) : (e = e(this.m_allocator), e.Reset(c, b)), e) : null }; y.prototype.Destroy = function(b) { 0 < b.m_manifold.m_pointCount && (b.m_fixtureA.m_body.SetAwake(!0), b.m_fixtureB.m_body.SetAwake(!0)); var c = parseInt(b.m_fixtureA.GetType()), d = parseInt(b.m_fixtureB.GetType()), c = this.m_registers[c][d]; c.poolCount++; b.m_next = c.pool; c.pool = b; c = c.destroyFcn; c(b, this.m_allocator) }; A.b2ContactRegister = function() {}; z.b2ContactResult = function() { this.position = new P; this.normal = new P; this.id = new Z }; B.b2ContactSolver = function() { this.m_step = new M; this.m_constraints = new Vector }; B.prototype.b2ContactSolver = function() {}; B.prototype.Initialize = function(b, c, d, e) { void 0 === d && (d = 0); var f; this.m_step.Set(b); this.m_allocator = e; for (this.m_constraintCount = d; this.m_constraints.length < this.m_constraintCount;) this.m_constraints[this.m_constraints.length] = new q; for (b = 0; b < d; ++b) { f = c[b]; e = f.m_fixtureA; var p = f.m_fixtureB, g = e.m_shape.m_radius, j = p.m_shape.m_radius, v = e.m_body, n = p.m_body, H = f.GetManifold(), u = R.b2MixFriction(e.GetFriction(), p.GetFriction()), z = R.b2MixRestitution(e.GetRestitution(), p.GetRestitution()), m = v.m_linearVelocity.x, y = v.m_linearVelocity.y, C = n.m_linearVelocity.x, A = n.m_linearVelocity.y, E = v.m_angularVelocity, I = n.m_angularVelocity; R.b2Assert(0 < H.m_pointCount); B.s_worldManifold.Initialize(H, v.m_xf, g, n.m_xf, j); p = B.s_worldManifold.m_normal.x; f = B.s_worldManifold.m_normal.y; e = this.m_constraints[b]; e.bodyA = v; e.bodyB = n; e.manifold = H; e.normal.x = p; e.normal.y = f; e.pointCount = H.m_pointCount; e.friction = u; e.restitution = z; e.localPlaneNormal.x = H.m_localPlaneNormal.x; e.localPlaneNormal.y = H.m_localPlaneNormal.y; e.localPoint.x = H.m_localPoint.x; e.localPoint.y = H.m_localPoint.y; e.radius = g + j; e.type = H.m_type; for (g = 0; g < e.pointCount; ++g) { u = H.m_points[g]; j = e.points[g]; j.normalImpulse = u.m_normalImpulse; j.tangentImpulse = u.m_tangentImpulse; j.localPoint.SetV(u.m_localPoint); var u = j.rA.x = B.s_worldManifold.m_points[g].x - v.m_sweep.c.x, z = j.rA.y = B.s_worldManifold.m_points[g].y - v.m_sweep.c.y, G = j.rB.x = B.s_worldManifold.m_points[g].x - n.m_sweep.c.x, L = j.rB.y = B.s_worldManifold.m_points[g].y - n.m_sweep.c.y, K = u * f - z * p, M = G * f - L * p, K = K * K, M = M * M; j.normalMass = 1 / (v.m_invMass + n.m_invMass + v.m_invI * K + n.m_invI * M); var Q = v.m_mass * v.m_invMass + n.m_mass * n.m_invMass, Q = Q + (v.m_mass * v.m_invI * K + n.m_mass * n.m_invI * M); j.equalizedMass = 1 / Q; M = f; Q = -p; K = u * Q - z * M; M = G * Q - L * M; K *= K; M *= M; j.tangentMass = 1 / (v.m_invMass + n.m_invMass + v.m_invI * K + n.m_invI * M); j.velocityBias = 0; u = e.normal.x * (C + -I * L - m - -E * z) + e.normal.y * (A + I * G - y - E * u); u < -R.b2_velocityThreshold && (j.velocityBias += -e.restitution * u) } 2 == e.pointCount && (A = e.points[0], C = e.points[1], H = v.m_invMass, v = v.m_invI, m = n.m_invMass, n = n.m_invI, y = A.rA.x * f - A.rA.y * p, A = A.rB.x * f - A.rB.y * p, E = C.rA.x * f - C.rA.y * p, C = C.rB.x * f - C.rB.y * p, p = H + m + v * y * y + n * A * A, f = H + m + v * E * E + n * C * C, n = H + m + v * y * E + n * A * C, p * p < 100 * (p * f - n * n) ? (e.K.col1.Set(p, n), e.K.col2.Set(n, f), e.K.GetInverse(e.normalMass)) : e.pointCount = 1) } }; B.prototype.InitVelocityConstraints = function(b) { for (var c = 0; c < this.m_constraintCount; ++c) { var d = this.m_constraints[c], e = d.bodyA, f = d.bodyB, p = e.m_invMass, g = e.m_invI, j = f.m_invMass, v = f.m_invI, n = d.normal.x, H = d.normal.y, q = H, u = -n, m = 0, B = 0; if (b.warmStarting) { B = d.pointCount; for (m = 0; m < B; ++m) { var z = d.points[m]; z.normalImpulse *= b.dtRatio; z.tangentImpulse *= b.dtRatio; var C = z.normalImpulse * n + z.tangentImpulse * q, y = z.normalImpulse * H + z.tangentImpulse * u; e.m_angularVelocity -= g * (z.rA.x * y - z.rA.y * C); e.m_linearVelocity.x -= p * C; e.m_linearVelocity.y -= p * y; f.m_angularVelocity += v * (z.rB.x * y - z.rB.y * C); f.m_linearVelocity.x += j * C; f.m_linearVelocity.y += j * y } } else { B = d.pointCount; for (m = 0; m < B; ++m) e = d.points[m], e.normalImpulse = 0, e.tangentImpulse = 0 } } }; B.prototype.SolveVelocityConstraints = function() { for (var b = 0, c, d = 0, e = 0, f = 0, p = 0, g = 0, j = 0, v = 0, n, H = 0; H < this.m_constraintCount; ++H) { var f = this.m_constraints[H], q = f.bodyA, u = f.bodyB, m = q.m_angularVelocity, z = u.m_angularVelocity, B = q.m_linearVelocity, C = u.m_linearVelocity, y = q.m_invMass, A = q.m_invI, E = u.m_invMass, I = u.m_invI, j = f.normal.x, G = v = f.normal.y; n = -j; g = f.friction; for (b = 0; b < f.pointCount; b++) c = f.points[b], d = C.x - z * c.rB.y - B.x + m * c.rA.y, e = C.y + z * c.rB.x - B.y - m * c.rA.x, d = d * G + e * n, d = c.tangentMass * -d, e = g * c.normalImpulse, e = X.Clamp(c.tangentImpulse + d, -e, e), d = e - c.tangentImpulse, p = d * G, d *= n, B.x -= y * p, B.y -= y * d, m -= A * (c.rA.x * d - c.rA.y * p), C.x += E * p, C.y += E * d, z += I * (c.rB.x * d - c.rB.y * p), c.tangentImpulse = e; parseInt(f.pointCount); if (1 == f.pointCount) c = f.points[0], d = C.x + -z * c.rB.y - B.x - -m * c.rA.y, e = C.y + z * c.rB.x - B.y - m * c.rA.x, f = d * j + e * v, d = -c.normalMass * (f - c.velocityBias), e = c.normalImpulse + d, e = 0 < e ? e : 0, d = e - c.normalImpulse, p = d * j, d *= v, B.x -= y * p, B.y -= y * d, m -= A * (c.rA.x * d - c.rA.y * p), C.x += E * p, C.y += E * d, z += I * (c.rB.x * d - c.rB.y * p), c.normalImpulse = e; else { c = f.points[0]; var b = f.points[1], d = c.normalImpulse, g = b.normalImpulse, L = (C.x - z * c.rB.y - B.x + m * c.rA.y) * j + (C.y + z * c.rB.x - B.y - m * c.rA.x) * v, K = (C.x - z * b.rB.y - B.x + m * b.rA.y) * j + (C.y + z * b.rB.x - B.y - m * b.rA.x) * v, e = L - c.velocityBias, p = K - b.velocityBias; n = f.K; e -= n.col1.x * d + n.col2.x * g; for (p -= n.col1.y * d + n.col2.y * g;;) { n = f.normalMass; G = -(n.col1.x * e + n.col2.x * p); n = -(n.col1.y * e + n.col2.y * p); if (0 <= G && 0 <= n) { d = G - d; g = n - g; f = d * j; d *= v; j *= g; v *= g; B.x -= y * (f + j); B.y -= y * (d + v); m -= A * (c.rA.x * d - c.rA.y * f + b.rA.x * v - b.rA.y * j); C.x += E * (f + j); C.y += E * (d + v); z += I * (c.rB.x * d - c.rB.y * f + b.rB.x * v - b.rB.y * j); c.normalImpulse = G; b.normalImpulse = n; break } G = -c.normalMass * e; n = 0; K = f.K.col1.y * G + p; if (0 <= G && 0 <= K) { d = G - d; g = n - g; f = d * j; d *= v; j *= g; v *= g; B.x -= y * (f + j); B.y -= y * (d + v); m -= A * (c.rA.x * d - c.rA.y * f + b.rA.x * v - b.rA.y * j); C.x += E * (f + j); C.y += E * (d + v); z += I * (c.rB.x * d - c.rB.y * f + b.rB.x * v - b.rB.y * j); c.normalImpulse = G; b.normalImpulse = n; break } G = 0; n = -b.normalMass * p; L = f.K.col2.x * n + e; if (0 <= n && 0 <= L) { d = G - d; g = n - g; f = d * j; d *= v; j *= g; v *= g; B.x -= y * (f + j); B.y -= y * (d + v); m -= A * (c.rA.x * d - c.rA.y * f + b.rA.x * v - b.rA.y * j); C.x += E * (f + j); C.y += E * (d + v); z += I * (c.rB.x * d - c.rB.y * f + b.rB.x * v - b.rB.y * j); c.normalImpulse = G; b.normalImpulse = n; break } n = G = 0; L = e; K = p; if (0 <= L && 0 <= K) { d = G - d; g = n - g; f = d * j; d *= v; j *= g; v *= g; B.x -= y * (f + j); B.y -= y * (d + v); m -= A * (c.rA.x * d - c.rA.y * f + b.rA.x * v - b.rA.y * j); C.x += E * (f + j); C.y += E * (d + v); z += I * (c.rB.x * d - c.rB.y * f + b.rB.x * v - b.rB.y * j); c.normalImpulse = G; b.normalImpulse = n; break } break } } q.m_angularVelocity = m; u.m_angularVelocity = z } }; B.prototype.FinalizeVelocityConstraints = function() { for (var b = 0; b < this.m_constraintCount; ++b) for (var c = this.m_constraints[b], d = c.manifold, e = 0; e < c.pointCount; ++e) { var f = d.m_points[e], p = c.points[e]; f.m_normalImpulse = p.normalImpulse; f.m_tangentImpulse = p.tangentImpulse } }; B.prototype.SolvePositionConstraints = function(b) { void 0 === b && (b = 0); for (var c = 0, d = 0; d < this.m_constraintCount; d++) { var e = this.m_constraints[d], f = e.bodyA, p = e.bodyB, g = f.m_mass * f.m_invMass, j = f.m_mass * f.m_invI, v = p.m_mass * p.m_invMass, n = p.m_mass * p.m_invI; B.s_psm.Initialize(e); for (var H = B.s_psm.m_normal, q = 0; q < e.pointCount; q++) { var u = e.points[q], m = B.s_psm.m_points[q], z = B.s_psm.m_separations[q], C = m.x - f.m_sweep.c.x, y = m.y - f.m_sweep.c.y, A = m.x - p.m_sweep.c.x, m = m.y - p.m_sweep.c.y, c = c < z ? c : z, z = X.Clamp(b * (z + R.b2_linearSlop), -R.b2_maxLinearCorrection, 0), z = -u.equalizedMass * z, u = z * H.x, z = z * H.y; f.m_sweep.c.x -= g * u; f.m_sweep.c.y -= g * z; f.m_sweep.a -= j * (C * z - y * u); f.SynchronizeTransform(); p.m_sweep.c.x += v * u; p.m_sweep.c.y += v * z; p.m_sweep.a += n * (A * z - m * u); p.SynchronizeTransform() } } return c > -1.5 * R.b2_linearSlop }; Box2D.postDefs.push(function() { Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold = new H; Box2D.Dynamics.Contacts.b2ContactSolver.s_psm = new E }); Box2D.inherit(C, Box2D.Dynamics.Contacts.b2Contact); C.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; C.b2EdgeAndCircleContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; C.Create = function() { return new C }; C.Destroy = function() {}; C.prototype.Reset = function(b, c) { this.__super.Reset.call(this, b, c) }; C.prototype.Evaluate = function() { var d = this.m_fixtureA.GetBody(), e = this.m_fixtureB.GetBody(); this.b2CollideEdgeAndCircle(this.m_manifold, this.m_fixtureA.GetShape() instanceof c ? this.m_fixtureA.GetShape() : null, d.m_xf, this.m_fixtureB.GetShape() instanceof b ? this.m_fixtureB.GetShape() : null, e.m_xf) }; C.prototype.b2CollideEdgeAndCircle = function() {}; Box2D.inherit(G, Box2D.Dynamics.Contacts.b2Contact); G.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; G.b2NullContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; G.prototype.b2NullContact = function() { this.__super.b2Contact.call(this) }; G.prototype.Evaluate = function() {}; Box2D.inherit(I, Box2D.Dynamics.Contacts.b2Contact); I.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; I.b2PolyAndCircleContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; I.Create = function() { return new I }; I.Destroy = function() {}; I.prototype.Reset = function(b, c) { this.__super.Reset.call(this, b, c); R.b2Assert(b.GetType() == e.e_polygonShape); R.b2Assert(c.GetType() == e.e_circleShape) }; I.prototype.Evaluate = function() { var c = this.m_fixtureA.m_body, e = this.m_fixtureB.m_body; S.CollidePolygonAndCircle(this.m_manifold, this.m_fixtureA.GetShape() instanceof d ? this.m_fixtureA.GetShape() : null, c.m_xf, this.m_fixtureB.GetShape() instanceof b ? this.m_fixtureB.GetShape() : null, e.m_xf) }; Box2D.inherit(u, Box2D.Dynamics.Contacts.b2Contact); u.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; u.b2PolyAndEdgeContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; u.Create = function() { return new u }; u.Destroy = function() {}; u.prototype.Reset = function(b, c) { this.__super.Reset.call(this, b, c); R.b2Assert(b.GetType() == e.e_polygonShape); R.b2Assert(c.GetType() == e.e_edgeShape) }; u.prototype.Evaluate = function() { var b = this.m_fixtureA.GetBody(), e = this.m_fixtureB.GetBody(); this.b2CollidePolyAndEdge(this.m_manifold, this.m_fixtureA.GetShape() instanceof d ? this.m_fixtureA.GetShape() : null, b.m_xf, this.m_fixtureB.GetShape() instanceof c ? this.m_fixtureB.GetShape() : null, e.m_xf) }; u.prototype.b2CollidePolyAndEdge = function() {}; Box2D.inherit(L, Box2D.Dynamics.Contacts.b2Contact); L.prototype.__super = Box2D.Dynamics.Contacts.b2Contact.prototype; L.b2PolygonContact = function() { Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this, arguments) }; L.Create = function() { return new L }; L.Destroy = function() {}; L.prototype.Reset = function(b, c) { this.__super.Reset.call(this, b, c) }; L.prototype.Evaluate = function() { var b = this.m_fixtureA.GetBody(), c = this.m_fixtureB.GetBody(); S.CollidePolygons(this.m_manifold, this.m_fixtureA.GetShape() instanceof d ? this.m_fixtureA.GetShape() : null, b.m_xf, this.m_fixtureB.GetShape() instanceof d ? this.m_fixtureB.GetShape() : null, c.m_xf) }; E.b2PositionSolverManifold = function() {}; E.prototype.b2PositionSolverManifold = function() { this.m_normal = new P; this.m_separations = new Vector_a2j_Number(R.b2_maxManifoldPoints); this.m_points = new Vector(R.b2_maxManifoldPoints); for (var b = 0; b < R.b2_maxManifoldPoints; b++) this.m_points[b] = new P }; E.prototype.Initialize = function(b) { R.b2Assert(0 < b.pointCount); var c = 0, d = 0, e = 0, f, p = 0, g = 0; switch (b.type) { case U.e_circles: f = b.bodyA.m_xf.R; e = b.localPoint; c = b.bodyA.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y); d = b.bodyA.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y); f = b.bodyB.m_xf.R; e = b.points[0].localPoint; p = b.bodyB.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y); f = b.bodyB.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y); var e = p - c, g = f - d, j = e * e + g * g; j > Number.MIN_VALUE * Number.MIN_VALUE ? (j = Math.sqrt(j), this.m_normal.x = e / j, this.m_normal.y = g / j) : (this.m_normal.x = 1, this.m_normal.y = 0); this.m_points[0].x = 0.5 * (c + p); this.m_points[0].y = 0.5 * (d + f); this.m_separations[0] = e * this.m_normal.x + g * this.m_normal.y - b.radius; break; case U.e_faceA: f = b.bodyA.m_xf.R; e = b.localPlaneNormal; this.m_normal.x = f.col1.x * e.x + f.col2.x * e.y; this.m_normal.y = f.col1.y * e.x + f.col2.y * e.y; f = b.bodyA.m_xf.R; e = b.localPoint; p = b.bodyA.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y); g = b.bodyA.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y); f = b.bodyB.m_xf.R; for (c = 0; c < b.pointCount; ++c) e = b.points[c].localPoint, d = b.bodyB.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y), e = b.bodyB.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y), this.m_separations[c] = (d - p) * this.m_normal.x + (e - g) * this.m_normal.y - b.radius, this.m_points[c].x = d, this.m_points[c].y = e; break; case U.e_faceB: f = b.bodyB.m_xf.R; e = b.localPlaneNormal; this.m_normal.x = f.col1.x * e.x + f.col2.x * e.y; this.m_normal.y = f.col1.y * e.x + f.col2.y * e.y; f = b.bodyB.m_xf.R; e = b.localPoint; p = b.bodyB.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y); g = b.bodyB.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y); f = b.bodyA.m_xf.R; for (c = 0; c < b.pointCount; ++c) e = b.points[c].localPoint, d = b.bodyA.m_xf.position.x + (f.col1.x * e.x + f.col2.x * e.y), e = b.bodyA.m_xf.position.y + (f.col1.y * e.x + f.col2.y * e.y), this.m_separations[c] = (d - p) * this.m_normal.x + (e - g) * this.m_normal.y - b.radius, this.m_points[c].Set(d, e); this.m_normal.x *= -1; this.m_normal.y *= -1 } }; Box2D.postDefs.push(function() { Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointA = new P; Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointB = new P }) })(); (function() { var b = Box2D.Common.Math.b2Mat22, c = Box2D.Common.Math.b2Math, d = Box2D.Common.Math.b2Vec2, e = Box2D.Common.b2Color, f = Box2D.Dynamics.Controllers.b2BuoyancyController, j = Box2D.Dynamics.Controllers.b2ConstantAccelController, q = Box2D.Dynamics.Controllers.b2ConstantForceController, n = Box2D.Dynamics.Controllers.b2Controller, g = Box2D.Dynamics.Controllers.b2ControllerEdge, y = Box2D.Dynamics.Controllers.b2GravityController, A = Box2D.Dynamics.Controllers.b2TensorDampingController; Box2D.inherit(f, Box2D.Dynamics.Controllers.b2Controller); f.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype; f.b2BuoyancyController = function() { Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments); this.normal = new d(0, -1); this.density = this.offset = 0; this.velocity = new d(0, 0); this.linearDrag = 2; this.angularDrag = 1; this.useDensity = !1; this.useWorldGravity = !0; this.gravity = null }; f.prototype.Step = function() { if (this.m_bodyList) { this.useWorldGravity && (this.gravity = this.GetWorld().GetGravity().Copy()); for (var b = this.m_bodyList; b; b = b.nextBody) { var c = b.body; if (!1 != c.IsAwake()) { for (var e = new d, f = new d, g = 0, j = 0, n = c.GetFixtureList(); n; n = n.GetNext()) { var q = new d, y = n.GetShape().ComputeSubmergedArea(this.normal, this.offset, c.GetTransform(), q), g = g + y; e.x += y * q.x; e.y += y * q.y; var A = 0, A = 1, j = j + y * A; f.x += y * q.x * A; f.y += y * q.y * A } e.x /= g; e.y /= g; f.x /= j; f.y /= j; g < Number.MIN_VALUE || (j = this.gravity.GetNegative(), j.Multiply(this.density * g), c.ApplyForce(j, f), f = c.GetLinearVelocityFromWorldPoint(e), f.Subtract(this.velocity), f.Multiply(-this.linearDrag * g), c.ApplyForce(f, e), c.ApplyTorque(-c.GetInertia() / c.GetMass() * g * c.GetAngularVelocity() * this.angularDrag)) } } } }; f.prototype.Draw = function(b) { var c = new d, f = new d; c.x = this.normal.x * this.offset + 1E3 * this.normal.y; c.y = this.normal.y * this.offset - 1E3 * this.normal.x; f.x = this.normal.x * this.offset - 1E3 * this.normal.y; f.y = this.normal.y * this.offset + 1E3 * this.normal.x; var g = new e(0, 0, 1); b.DrawSegment(c, f, g) }; Box2D.inherit(j, Box2D.Dynamics.Controllers.b2Controller); j.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype; j.b2ConstantAccelController = function() { Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments); this.A = new d(0, 0) }; j.prototype.Step = function(b) { b = new d(this.A.x * b.dt, this.A.y * b.dt); for (var c = this.m_bodyList; c; c = c.nextBody) { var e = c.body; e.IsAwake() && e.SetLinearVelocity(new d(e.GetLinearVelocity().x + b.x, e.GetLinearVelocity().y + b.y)) } }; Box2D.inherit(q, Box2D.Dynamics.Controllers.b2Controller); q.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype; q.b2ConstantForceController = function() { Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments); this.F = new d(0, 0) }; q.prototype.Step = function() { for (var b = this.m_bodyList; b; b = b.nextBody) { var c = b.body; c.IsAwake() && c.ApplyForce(this.F, c.GetWorldCenter()) } }; n.b2Controller = function() {}; n.prototype.Step = function() {}; n.prototype.Draw = function() {}; n.prototype.AddBody = function(b) { var c = new g; c.controller = this; c.body = b; c.nextBody = this.m_bodyList; c.prevBody = null; this.m_bodyList = c; c.nextBody && (c.nextBody.prevBody = c); this.m_bodyCount++; c.nextController = b.m_controllerList; c.prevController = null; b.m_controllerList = c; c.nextController && (c.nextController.prevController = c); b.m_controllerCount++ }; n.prototype.RemoveBody = function(b) { for (var c = b.m_controllerList; c && c.controller != this;) c = c.nextController; c.prevBody && (c.prevBody.nextBody = c.nextBody); c.nextBody && (c.nextBody.prevBody = c.prevBody); c.nextController && (c.nextController.prevController = c.prevController); c.prevController && (c.prevController.nextController = c.nextController); this.m_bodyList == c && (this.m_bodyList = c.nextBody); b.m_controllerList == c && (b.m_controllerList = c.nextController); b.m_controllerCount--; this.m_bodyCount-- }; n.prototype.Clear = function() { for (; this.m_bodyList;) this.RemoveBody(this.m_bodyList.body) }; n.prototype.GetNext = function() { return this.m_next }; n.prototype.GetWorld = function() { return this.m_world }; n.prototype.GetBodyList = function() { return this.m_bodyList }; g.b2ControllerEdge = function() {}; Box2D.inherit(y, Box2D.Dynamics.Controllers.b2Controller); y.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype; y.b2GravityController = function() { Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments); this.G = 1; this.invSqr = !0 }; y.prototype.Step = function() { var b = null, c = null, e = null, f = 0, g = null, j = null, n = null, q = 0, y = 0, A = 0; if (this.invSqr) for (b = this.m_bodyList; b; b = b.nextBody) { c = b.body; e = c.GetWorldCenter(); f = c.GetMass(); for (g = this.m_bodyList; g != b; g = g.nextBody) j = g.body, n = j.GetWorldCenter(), q = n.x - e.x, y = n.y - e.y, A = q * q + y * y, A < Number.MIN_VALUE || (q = new d(q, y), q.Multiply(this.G / A / Math.sqrt(A) * f * j.GetMass()), c.IsAwake() && c.ApplyForce(q, e), q.Multiply(-1), j.IsAwake() && j.ApplyForce(q, n)) } else for (b = this.m_bodyList; b; b = b.nextBody) { c = b.body; e = c.GetWorldCenter(); f = c.GetMass(); for (g = this.m_bodyList; g != b; g = g.nextBody) j = g.body, n = j.GetWorldCenter(), q = n.x - e.x, y = n.y - e.y, A = q * q + y * y, A < Number.MIN_VALUE || (q = new d(q, y), q.Multiply(this.G / A * f * j.GetMass()), c.IsAwake() && c.ApplyForce(q, e), q.Multiply(-1), j.IsAwake() && j.ApplyForce(q, n)) } }; Box2D.inherit(A, Box2D.Dynamics.Controllers.b2Controller); A.prototype.__super = Box2D.Dynamics.Controllers.b2Controller.prototype; A.b2TensorDampingController = function() { Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this, arguments); this.T = new b; this.maxTimestep = 0 }; A.prototype.SetAxisAligned = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.T.col1.x = -b; this.T.col1.y = 0; this.T.col2.x = 0; this.T.col2.y = -c; this.maxTimestep = 0 < b || 0 < c ? 1 / Math.max(b, c) : 0 }; A.prototype.Step = function(b) { b = b.dt; if (!(b <= Number.MIN_VALUE)) { b > this.maxTimestep && 0 < this.maxTimestep && (b = this.maxTimestep); for (var e = this.m_bodyList; e; e = e.nextBody) { var f = e.body; if (f.IsAwake()) { var g = f.GetWorldVector(c.MulMV(this.T, f.GetLocalVector(f.GetLinearVelocity()))); f.SetLinearVelocity(new d(f.GetLinearVelocity().x + g.x * b, f.GetLinearVelocity().y + g.y * b)) } } } } })(); (function() { var b = Box2D.Common.b2Settings, c = Box2D.Common.Math.b2Mat22, d = Box2D.Common.Math.b2Mat33, e = Box2D.Common.Math.b2Math, f = Box2D.Common.Math.b2Vec2, j = Box2D.Common.Math.b2Vec3, q = Box2D.Dynamics.Joints.b2DistanceJoint, n = Box2D.Dynamics.Joints.b2DistanceJointDef, g = Box2D.Dynamics.Joints.b2FrictionJoint, y = Box2D.Dynamics.Joints.b2FrictionJointDef, A = Box2D.Dynamics.Joints.b2GearJoint, z = Box2D.Dynamics.Joints.b2GearJointDef, B = Box2D.Dynamics.Joints.b2Jacobian, C = Box2D.Dynamics.Joints.b2Joint, G = Box2D.Dynamics.Joints.b2JointDef, I = Box2D.Dynamics.Joints.b2JointEdge, u = Box2D.Dynamics.Joints.b2LineJoint, L = Box2D.Dynamics.Joints.b2LineJointDef, E = Box2D.Dynamics.Joints.b2MouseJoint, Q = Box2D.Dynamics.Joints.b2MouseJointDef, M = Box2D.Dynamics.Joints.b2PrismaticJoint, R = Box2D.Dynamics.Joints.b2PrismaticJointDef, K = Box2D.Dynamics.Joints.b2PulleyJoint, X = Box2D.Dynamics.Joints.b2PulleyJointDef, P = Box2D.Dynamics.Joints.b2RevoluteJoint, S = Box2D.Dynamics.Joints.b2RevoluteJointDef, Z = Box2D.Dynamics.Joints.b2WeldJoint, U = Box2D.Dynamics.Joints.b2WeldJointDef; Box2D.inherit(q, Box2D.Dynamics.Joints.b2Joint); q.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; q.b2DistanceJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_u = new f }; q.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; q.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; q.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse * this.m_u.x, b * this.m_impulse * this.m_u.y) }; q.prototype.GetReactionTorque = function() { return 0 }; q.prototype.GetLength = function() { return this.m_length }; q.prototype.SetLength = function(b) { void 0 === b && (b = 0); this.m_length = b }; q.prototype.GetFrequency = function() { return this.m_frequencyHz }; q.prototype.SetFrequency = function(b) { void 0 === b && (b = 0); this.m_frequencyHz = b }; q.prototype.GetDampingRatio = function() { return this.m_dampingRatio }; q.prototype.SetDampingRatio = function(b) { void 0 === b && (b = 0); this.m_dampingRatio = b }; q.prototype.b2DistanceJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchor1.SetV(b.localAnchorA); this.m_localAnchor2.SetV(b.localAnchorB); this.m_length = b.length; this.m_frequencyHz = b.frequencyHz; this.m_dampingRatio = b.dampingRatio; this.m_bias = this.m_gamma = this.m_impulse = 0 }; q.prototype.InitVelocityConstraints = function(c) { var d, e = 0, f = this.m_bodyA, g = this.m_bodyB; d = f.m_xf.R; var j = this.m_localAnchor1.x - f.m_sweep.localCenter.x, n = this.m_localAnchor1.y - f.m_sweep.localCenter.y, e = d.col1.x * j + d.col2.x * n, n = d.col1.y * j + d.col2.y * n, j = e; d = g.m_xf.R; var l = this.m_localAnchor2.x - g.m_sweep.localCenter.x, r = this.m_localAnchor2.y - g.m_sweep.localCenter.y, e = d.col1.x * l + d.col2.x * r, r = d.col1.y * l + d.col2.y * r, l = e; this.m_u.x = g.m_sweep.c.x + l - f.m_sweep.c.x - j; this.m_u.y = g.m_sweep.c.y + r - f.m_sweep.c.y - n; e = Math.sqrt(this.m_u.x * this.m_u.x + this.m_u.y * this.m_u.y); e > b.b2_linearSlop ? this.m_u.Multiply(1 / e) : this.m_u.SetZero(); d = j * this.m_u.y - n * this.m_u.x; var q = l * this.m_u.y - r * this.m_u.x; d = f.m_invMass + f.m_invI * d * d + g.m_invMass + g.m_invI * q * q; this.m_mass = 0 != d ? 1 / d : 0; if (0 < this.m_frequencyHz) { var e = e - this.m_length, q = 2 * Math.PI * this.m_frequencyHz, s = this.m_mass * q * q; this.m_gamma = c.dt * (2 * this.m_mass * this.m_dampingRatio * q + c.dt * s); this.m_gamma = 0 != this.m_gamma ? 1 / this.m_gamma : 0; this.m_bias = e * c.dt * s * this.m_gamma; this.m_mass = d + this.m_gamma; this.m_mass = 0 != this.m_mass ? 1 / this.m_mass : 0 } c.warmStarting ? (this.m_impulse *= c.dtRatio, c = this.m_impulse * this.m_u.x, d = this.m_impulse * this.m_u.y, f.m_linearVelocity.x -= f.m_invMass * c, f.m_linearVelocity.y -= f.m_invMass * d, f.m_angularVelocity -= f.m_invI * (j * d - n * c), g.m_linearVelocity.x += g.m_invMass * c, g.m_linearVelocity.y += g.m_invMass * d, g.m_angularVelocity += g.m_invI * (l * d - r * c)) : this.m_impulse = 0 }; q.prototype.SolveVelocityConstraints = function() { var b, c = this.m_bodyA, d = this.m_bodyB; b = c.m_xf.R; var e = this.m_localAnchor1.x - c.m_sweep.localCenter.x, f = this.m_localAnchor1.y - c.m_sweep.localCenter.y, g = b.col1.x * e + b.col2.x * f, f = b.col1.y * e + b.col2.y * f, e = g; b = d.m_xf.R; var j = this.m_localAnchor2.x - d.m_sweep.localCenter.x, l = this.m_localAnchor2.y - d.m_sweep.localCenter.y, g = b.col1.x * j + b.col2.x * l, l = b.col1.y * j + b.col2.y * l, j = g, g = -this.m_mass * (this.m_u.x * (d.m_linearVelocity.x + -d.m_angularVelocity * l - (c.m_linearVelocity.x + -c.m_angularVelocity * f)) + this.m_u.y * (d.m_linearVelocity.y + d.m_angularVelocity * j - (c.m_linearVelocity.y + c.m_angularVelocity * e)) + this.m_bias + this.m_gamma * this.m_impulse); this.m_impulse += g; b = g * this.m_u.x; g *= this.m_u.y; c.m_linearVelocity.x -= c.m_invMass * b; c.m_linearVelocity.y -= c.m_invMass * g; c.m_angularVelocity -= c.m_invI * (e * g - f * b); d.m_linearVelocity.x += d.m_invMass * b; d.m_linearVelocity.y += d.m_invMass * g; d.m_angularVelocity += d.m_invI * (j * g - l * b) }; q.prototype.SolvePositionConstraints = function() { var c; if (0 < this.m_frequencyHz) return !0; var d = this.m_bodyA, f = this.m_bodyB; c = d.m_xf.R; var g = this.m_localAnchor1.x - d.m_sweep.localCenter.x, j = this.m_localAnchor1.y - d.m_sweep.localCenter.y, n = c.col1.x * g + c.col2.x * j, j = c.col1.y * g + c.col2.y * j, g = n; c = f.m_xf.R; var q = this.m_localAnchor2.x - f.m_sweep.localCenter.x, l = this.m_localAnchor2.y - f.m_sweep.localCenter.y, n = c.col1.x * q + c.col2.x * l, l = c.col1.y * q + c.col2.y * l, q = n, n = f.m_sweep.c.x + q - d.m_sweep.c.x - g, r = f.m_sweep.c.y + l - d.m_sweep.c.y - j; c = Math.sqrt(n * n + r * r); n /= c; r /= c; c -= this.m_length; c = e.Clamp(c, -b.b2_maxLinearCorrection, b.b2_maxLinearCorrection); var u = -this.m_mass * c; this.m_u.Set(n, r); n = u * this.m_u.x; r = u * this.m_u.y; d.m_sweep.c.x -= d.m_invMass * n; d.m_sweep.c.y -= d.m_invMass * r; d.m_sweep.a -= d.m_invI * (g * r - j * n); f.m_sweep.c.x += f.m_invMass * n; f.m_sweep.c.y += f.m_invMass * r; f.m_sweep.a += f.m_invI * (q * r - l * n); d.SynchronizeTransform(); f.SynchronizeTransform(); return e.Abs(c) < b.b2_linearSlop }; Box2D.inherit(n, Box2D.Dynamics.Joints.b2JointDef); n.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; n.b2DistanceJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f }; n.prototype.b2DistanceJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_distanceJoint; this.length = 1; this.dampingRatio = this.frequencyHz = 0 }; n.prototype.Initialize = function(b, c, d, e) { this.bodyA = b; this.bodyB = c; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(d)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(e)); b = e.x - d.x; d = e.y - d.y; this.length = Math.sqrt(b * b + d * d); this.dampingRatio = this.frequencyHz = 0 }; Box2D.inherit(g, Box2D.Dynamics.Joints.b2Joint); g.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; g.b2FrictionJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_localAnchorA = new f; this.m_localAnchorB = new f; this.m_linearMass = new c; this.m_linearImpulse = new f }; g.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA) }; g.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB) }; g.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_linearImpulse.x, b * this.m_linearImpulse.y) }; g.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); return b * this.m_angularImpulse }; g.prototype.SetMaxForce = function(b) { void 0 === b && (b = 0); this.m_maxForce = b }; g.prototype.GetMaxForce = function() { return this.m_maxForce }; g.prototype.SetMaxTorque = function(b) { void 0 === b && (b = 0); this.m_maxTorque = b }; g.prototype.GetMaxTorque = function() { return this.m_maxTorque }; g.prototype.b2FrictionJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchorA.SetV(b.localAnchorA); this.m_localAnchorB.SetV(b.localAnchorB); this.m_linearMass.SetZero(); this.m_angularMass = 0; this.m_linearImpulse.SetZero(); this.m_angularImpulse = 0; this.m_maxForce = b.maxForce; this.m_maxTorque = b.maxTorque }; g.prototype.InitVelocityConstraints = function(b) { var d, e = 0, f = this.m_bodyA, g = this.m_bodyB; d = f.m_xf.R; var j = this.m_localAnchorA.x - f.m_sweep.localCenter.x, n = this.m_localAnchorA.y - f.m_sweep.localCenter.y, e = d.col1.x * j + d.col2.x * n, n = d.col1.y * j + d.col2.y * n, j = e; d = g.m_xf.R; var l = this.m_localAnchorB.x - g.m_sweep.localCenter.x, r = this.m_localAnchorB.y - g.m_sweep.localCenter.y, e = d.col1.x * l + d.col2.x * r, r = d.col1.y * l + d.col2.y * r, l = e; d = f.m_invMass; var e = g.m_invMass, q = f.m_invI, s = g.m_invI, u = new c; u.col1.x = d + e; u.col2.x = 0; u.col1.y = 0; u.col2.y = d + e; u.col1.x += q * n * n; u.col2.x += -q * j * n; u.col1.y += -q * j * n; u.col2.y += q * j * j; u.col1.x += s * r * r; u.col2.x += -s * l * r; u.col1.y += -s * l * r; u.col2.y += s * l * l; u.GetInverse(this.m_linearMass); this.m_angularMass = q + s; 0 < this.m_angularMass && (this.m_angularMass = 1 / this.m_angularMass); b.warmStarting ? (this.m_linearImpulse.x *= b.dtRatio, this.m_linearImpulse.y *= b.dtRatio, this.m_angularImpulse *= b.dtRatio, b = this.m_linearImpulse, f.m_linearVelocity.x -= d * b.x, f.m_linearVelocity.y -= d * b.y, f.m_angularVelocity -= q * (j * b.y - n * b.x + this.m_angularImpulse), g.m_linearVelocity.x += e * b.x, g.m_linearVelocity.y += e * b.y, g.m_angularVelocity += s * (l * b.y - r * b.x + this.m_angularImpulse)) : (this.m_linearImpulse.SetZero(), this.m_angularImpulse = 0) }; g.prototype.SolveVelocityConstraints = function(b) { var c, d = 0, g = this.m_bodyA, j = this.m_bodyB, n = g.m_linearVelocity, q = g.m_angularVelocity, l = j.m_linearVelocity, r = j.m_angularVelocity, u = g.m_invMass, s = j.m_invMass, y = g.m_invI, z = j.m_invI; c = g.m_xf.R; var A = this.m_localAnchorA.x - g.m_sweep.localCenter.x, C = this.m_localAnchorA.y - g.m_sweep.localCenter.y, d = c.col1.x * A + c.col2.x * C, C = c.col1.y * A + c.col2.y * C, A = d; c = j.m_xf.R; var B = this.m_localAnchorB.x - j.m_sweep.localCenter.x, m = this.m_localAnchorB.y - j.m_sweep.localCenter.y, d = c.col1.x * B + c.col2.x * m, m = c.col1.y * B + c.col2.y * m, B = d, d = -this.m_angularMass * (r - q), E = this.m_angularImpulse; c = b.dt * this.m_maxTorque; this.m_angularImpulse = e.Clamp(this.m_angularImpulse + d, -c, c); d = this.m_angularImpulse - E; q -= y * d; r += z * d; c = e.MulMV(this.m_linearMass, new f(-(l.x - r * m - n.x + q * C), -(l.y + r * B - n.y - q * A))); d = this.m_linearImpulse.Copy(); this.m_linearImpulse.Add(c); c = b.dt * this.m_maxForce; this.m_linearImpulse.LengthSquared() > c * c && (this.m_linearImpulse.Normalize(), this.m_linearImpulse.Multiply(c)); c = e.SubtractVV(this.m_linearImpulse, d); n.x -= u * c.x; n.y -= u * c.y; q -= y * (A * c.y - C * c.x); l.x += s * c.x; l.y += s * c.y; r += z * (B * c.y - m * c.x); g.m_angularVelocity = q; j.m_angularVelocity = r }; g.prototype.SolvePositionConstraints = function() { return !0 }; Box2D.inherit(y, Box2D.Dynamics.Joints.b2JointDef); y.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; y.b2FrictionJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f }; y.prototype.b2FrictionJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_frictionJoint; this.maxTorque = this.maxForce = 0 }; y.prototype.Initialize = function(b, c, d) { this.bodyA = b; this.bodyB = c; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(d)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(d)) }; Box2D.inherit(A, Box2D.Dynamics.Joints.b2Joint); A.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; A.b2GearJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_groundAnchor1 = new f; this.m_groundAnchor2 = new f; this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_J = new B }; A.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; A.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; A.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse * this.m_J.linearB.x, b * this.m_impulse * this.m_J.linearB.y) }; A.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); var c = this.m_bodyB.m_xf.R, d = this.m_localAnchor1.x - this.m_bodyB.m_sweep.localCenter.x, e = this.m_localAnchor1.y - this.m_bodyB.m_sweep.localCenter.y, f = c.col1.x * d + c.col2.x * e, e = c.col1.y * d + c.col2.y * e; return b * (this.m_impulse * this.m_J.angularB - f * this.m_impulse * this.m_J.linearB.y + e * this.m_impulse * this.m_J.linearB.x) }; A.prototype.GetRatio = function() { return this.m_ratio }; A.prototype.SetRatio = function(b) { void 0 === b && (b = 0); this.m_ratio = b }; A.prototype.b2GearJoint = function(b) { this.__super.b2Joint.call(this, b); var c = parseInt(b.joint1.m_type), d = parseInt(b.joint2.m_type); this.m_prismatic2 = this.m_revolute2 = this.m_prismatic1 = this.m_revolute1 = null; var e = 0, f = 0; this.m_ground1 = b.joint1.GetBodyA(); this.m_bodyA = b.joint1.GetBodyB(); c == C.e_revoluteJoint ? (this.m_revolute1 = b.joint1 instanceof P ? b.joint1 : null, this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1), this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2), e = this.m_revolute1.GetJointAngle()) : (this.m_prismatic1 = b.joint1 instanceof M ? b.joint1 : null, this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1), this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2), e = this.m_prismatic1.GetJointTranslation()); this.m_ground2 = b.joint2.GetBodyA(); this.m_bodyB = b.joint2.GetBodyB(); d == C.e_revoluteJoint ? (this.m_revolute2 = b.joint2 instanceof P ? b.joint2 : null, this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1), this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2), f = this.m_revolute2.GetJointAngle()) : (this.m_prismatic2 = b.joint2 instanceof M ? b.joint2 : null, this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1), this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2), f = this.m_prismatic2.GetJointTranslation()); this.m_ratio = b.ratio; this.m_constant = e + this.m_ratio * f; this.m_impulse = 0 }; A.prototype.InitVelocityConstraints = function(b) { var c = this.m_ground1, d = this.m_ground2, e = this.m_bodyA, f = this.m_bodyB, g = 0, j = 0, l = 0, n = 0, q = 0, s = 0; this.m_J.SetZero(); this.m_revolute1 ? (this.m_J.angularA = -1, s += e.m_invI) : (c = c.m_xf.R, j = this.m_prismatic1.m_localXAxis1, g = c.col1.x * j.x + c.col2.x * j.y, j = c.col1.y * j.x + c.col2.y * j.y, c = e.m_xf.R, l = this.m_localAnchor1.x - e.m_sweep.localCenter.x, n = this.m_localAnchor1.y - e.m_sweep.localCenter.y, q = c.col1.x * l + c.col2.x * n, n = c.col1.y * l + c.col2.y * n, l = q * j - n * g, this.m_J.linearA.Set(-g, -j), this.m_J.angularA = -l, s += e.m_invMass + e.m_invI * l * l); this.m_revolute2 ? (this.m_J.angularB = -this.m_ratio, s += this.m_ratio * this.m_ratio * f.m_invI) : (c = d.m_xf.R, j = this.m_prismatic2.m_localXAxis1, g = c.col1.x * j.x + c.col2.x * j.y, j = c.col1.y * j.x + c.col2.y * j.y, c = f.m_xf.R, l = this.m_localAnchor2.x - f.m_sweep.localCenter.x, n = this.m_localAnchor2.y - f.m_sweep.localCenter.y, q = c.col1.x * l + c.col2.x * n, n = c.col1.y * l + c.col2.y * n, l = q * j - n * g, this.m_J.linearB.Set(-this.m_ratio * g, -this.m_ratio * j), this.m_J.angularB = -this.m_ratio * l, s += this.m_ratio * this.m_ratio * (f.m_invMass + f.m_invI * l * l)); this.m_mass = 0 < s ? 1 / s : 0; b.warmStarting ? (e.m_linearVelocity.x += e.m_invMass * this.m_impulse * this.m_J.linearA.x, e.m_linearVelocity.y += e.m_invMass * this.m_impulse * this.m_J.linearA.y, e.m_angularVelocity += e.m_invI * this.m_impulse * this.m_J.angularA, f.m_linearVelocity.x += f.m_invMass * this.m_impulse * this.m_J.linearB.x, f.m_linearVelocity.y += f.m_invMass * this.m_impulse * this.m_J.linearB.y, f.m_angularVelocity += f.m_invI * this.m_impulse * this.m_J.angularB) : this.m_impulse = 0 }; A.prototype.SolveVelocityConstraints = function() { var b = this.m_bodyA, c = this.m_bodyB, d = -this.m_mass * this.m_J.Compute(b.m_linearVelocity, b.m_angularVelocity, c.m_linearVelocity, c.m_angularVelocity); this.m_impulse += d; b.m_linearVelocity.x += b.m_invMass * d * this.m_J.linearA.x; b.m_linearVelocity.y += b.m_invMass * d * this.m_J.linearA.y; b.m_angularVelocity += b.m_invI * d * this.m_J.angularA; c.m_linearVelocity.x += c.m_invMass * d * this.m_J.linearB.x; c.m_linearVelocity.y += c.m_invMass * d * this.m_J.linearB.y; c.m_angularVelocity += c.m_invI * d * this.m_J.angularB }; A.prototype.SolvePositionConstraints = function() { var c = this.m_bodyA, d = this.m_bodyB, e = 0, f = 0, e = this.m_revolute1 ? this.m_revolute1.GetJointAngle() : this.m_prismatic1.GetJointTranslation(), f = this.m_revolute2 ? this.m_revolute2.GetJointAngle() : this.m_prismatic2.GetJointTranslation(), e = -this.m_mass * (this.m_constant - (e + this.m_ratio * f)); c.m_sweep.c.x += c.m_invMass * e * this.m_J.linearA.x; c.m_sweep.c.y += c.m_invMass * e * this.m_J.linearA.y; c.m_sweep.a += c.m_invI * e * this.m_J.angularA; d.m_sweep.c.x += d.m_invMass * e * this.m_J.linearB.x; d.m_sweep.c.y += d.m_invMass * e * this.m_J.linearB.y; d.m_sweep.a += d.m_invI * e * this.m_J.angularB; c.SynchronizeTransform(); d.SynchronizeTransform(); return 0 < b.b2_linearSlop }; Box2D.inherit(z, Box2D.Dynamics.Joints.b2JointDef); z.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; z.b2GearJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments) }; z.prototype.b2GearJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_gearJoint; this.joint2 = this.joint1 = null; this.ratio = 1 }; B.b2Jacobian = function() { this.linearA = new f; this.linearB = new f }; B.prototype.SetZero = function() { this.linearA.SetZero(); this.angularA = 0; this.linearB.SetZero(); this.angularB = 0 }; B.prototype.Set = function(b, c, d, e) { void 0 === c && (c = 0); void 0 === e && (e = 0); this.linearA.SetV(b); this.angularA = c; this.linearB.SetV(d); this.angularB = e }; B.prototype.Compute = function(b, c, d, e) { void 0 === c && (c = 0); void 0 === e && (e = 0); return this.linearA.x * b.x + this.linearA.y * b.y + this.angularA * c + (this.linearB.x * d.x + this.linearB.y * d.y) + this.angularB * e }; C.b2Joint = function() { this.m_edgeA = new I; this.m_edgeB = new I; this.m_localCenterA = new f; this.m_localCenterB = new f }; C.prototype.GetType = function() { return this.m_type }; C.prototype.GetAnchorA = function() { return null }; C.prototype.GetAnchorB = function() { return null }; C.prototype.GetReactionForce = function() { return null }; C.prototype.GetReactionTorque = function() { return 0 }; C.prototype.GetBodyA = function() { return this.m_bodyA }; C.prototype.GetBodyB = function() { return this.m_bodyB }; C.prototype.GetNext = function() { return this.m_next }; C.prototype.GetUserData = function() { return this.m_userData }; C.prototype.SetUserData = function(b) { this.m_userData = b }; C.prototype.IsActive = function() { return this.m_bodyA.IsActive() && this.m_bodyB.IsActive() }; C.Create = function(b) { var c = null; switch (b.type) { case C.e_distanceJoint: c = new q(b instanceof n ? b : null); break; case C.e_mouseJoint: c = new E(b instanceof Q ? b : null); break; case C.e_prismaticJoint: c = new M(b instanceof R ? b : null); break; case C.e_revoluteJoint: c = new P(b instanceof S ? b : null); break; case C.e_pulleyJoint: c = new K(b instanceof X ? b : null); break; case C.e_gearJoint: c = new A(b instanceof z ? b : null); break; case C.e_lineJoint: c = new u(b instanceof L ? b : null); break; case C.e_weldJoint: c = new Z(b instanceof U ? b : null); break; case C.e_frictionJoint: c = new g(b instanceof y ? b : null) } return c }; C.Destroy = function() {}; C.prototype.b2Joint = function(c) { b.b2Assert(c.bodyA != c.bodyB); this.m_type = c.type; this.m_next = this.m_prev = null; this.m_bodyA = c.bodyA; this.m_bodyB = c.bodyB; this.m_collideConnected = c.collideConnected; this.m_islandFlag = !1; this.m_userData = c.userData }; C.prototype.InitVelocityConstraints = function() {}; C.prototype.SolveVelocityConstraints = function() {}; C.prototype.FinalizeVelocityConstraints = function() {}; C.prototype.SolvePositionConstraints = function() { return !1 }; Box2D.postDefs.push(function() { Box2D.Dynamics.Joints.b2Joint.e_unknownJoint = 0; Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint = 1; Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint = 2; Box2D.Dynamics.Joints.b2Joint.e_distanceJoint = 3; Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint = 4; Box2D.Dynamics.Joints.b2Joint.e_mouseJoint = 5; Box2D.Dynamics.Joints.b2Joint.e_gearJoint = 6; Box2D.Dynamics.Joints.b2Joint.e_lineJoint = 7; Box2D.Dynamics.Joints.b2Joint.e_weldJoint = 8; Box2D.Dynamics.Joints.b2Joint.e_frictionJoint = 9; Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit = 0; Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit = 1; Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit = 2; Box2D.Dynamics.Joints.b2Joint.e_equalLimits = 3 }); G.b2JointDef = function() {}; G.prototype.b2JointDef = function() { this.type = C.e_unknownJoint; this.bodyB = this.bodyA = this.userData = null; this.collideConnected = !1 }; I.b2JointEdge = function() {}; Box2D.inherit(u, Box2D.Dynamics.Joints.b2Joint); u.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; u.b2LineJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_localXAxis1 = new f; this.m_localYAxis1 = new f; this.m_axis = new f; this.m_perp = new f; this.m_K = new c; this.m_impulse = new f }; u.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; u.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; u.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x), b * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y)) }; u.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); return b * this.m_impulse.y }; u.prototype.GetJointTranslation = function() { var b = this.m_bodyA, c = this.m_bodyB, d = b.GetWorldPoint(this.m_localAnchor1), e = c.GetWorldPoint(this.m_localAnchor2), c = e.x - d.x, d = e.y - d.y, b = b.GetWorldVector(this.m_localXAxis1); return b.x * c + b.y * d }; u.prototype.GetJointSpeed = function() { var b = this.m_bodyA, c = this.m_bodyB, d; d = b.m_xf.R; var e = this.m_localAnchor1.x - b.m_sweep.localCenter.x, f = this.m_localAnchor1.y - b.m_sweep.localCenter.y, g = d.col1.x * e + d.col2.x * f, f = d.col1.y * e + d.col2.y * f, e = g; d = c.m_xf.R; var j = this.m_localAnchor2.x - c.m_sweep.localCenter.x, l = this.m_localAnchor2.y - c.m_sweep.localCenter.y, g = d.col1.x * j + d.col2.x * l, l = d.col1.y * j + d.col2.y * l, j = g; d = c.m_sweep.c.x + j - (b.m_sweep.c.x + e); var g = c.m_sweep.c.y + l - (b.m_sweep.c.y + f), n = b.GetWorldVector(this.m_localXAxis1), q = b.m_linearVelocity, s = c.m_linearVelocity, b = b.m_angularVelocity, c = c.m_angularVelocity; return d * -b * n.y + g * b * n.x + (n.x * (s.x + -c * l - q.x - -b * f) + n.y * (s.y + c * j - q.y - b * e)) }; u.prototype.IsLimitEnabled = function() { return this.m_enableLimit }; u.prototype.EnableLimit = function(b) { this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_enableLimit = b }; u.prototype.GetLowerLimit = function() { return this.m_lowerTranslation }; u.prototype.GetUpperLimit = function() { return this.m_upperTranslation }; u.prototype.SetLimits = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_lowerTranslation = b; this.m_upperTranslation = c }; u.prototype.IsMotorEnabled = function() { return this.m_enableMotor }; u.prototype.EnableMotor = function(b) { this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_enableMotor = b }; u.prototype.SetMotorSpeed = function(b) { void 0 === b && (b = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_motorSpeed = b }; u.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }; u.prototype.SetMaxMotorForce = function(b) { void 0 === b && (b = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_maxMotorForce = b }; u.prototype.GetMaxMotorForce = function() { return this.m_maxMotorForce }; u.prototype.GetMotorForce = function() { return this.m_motorImpulse }; u.prototype.b2LineJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchor1.SetV(b.localAnchorA); this.m_localAnchor2.SetV(b.localAnchorB); this.m_localXAxis1.SetV(b.localAxisA); this.m_localYAxis1.x = -this.m_localXAxis1.y; this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_impulse.SetZero(); this.m_motorImpulse = this.m_motorMass = 0; this.m_lowerTranslation = b.lowerTranslation; this.m_upperTranslation = b.upperTranslation; this.m_maxMotorForce = b.maxMotorForce; this.m_motorSpeed = b.motorSpeed; this.m_enableLimit = b.enableLimit; this.m_enableMotor = b.enableMotor; this.m_limitState = C.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero() }; u.prototype.InitVelocityConstraints = function(c) { var d = this.m_bodyA, f = this.m_bodyB, g, j = 0; this.m_localCenterA.SetV(d.GetLocalCenter()); this.m_localCenterB.SetV(f.GetLocalCenter()); var n = d.GetTransform(); f.GetTransform(); g = d.m_xf.R; var q = this.m_localAnchor1.x - this.m_localCenterA.x, l = this.m_localAnchor1.y - this.m_localCenterA.y, j = g.col1.x * q + g.col2.x * l, l = g.col1.y * q + g.col2.y * l, q = j; g = f.m_xf.R; var r = this.m_localAnchor2.x - this.m_localCenterB.x, u = this.m_localAnchor2.y - this.m_localCenterB.y, j = g.col1.x * r + g.col2.x * u, u = g.col1.y * r + g.col2.y * u, r = j; g = f.m_sweep.c.x + r - d.m_sweep.c.x - q; j = f.m_sweep.c.y + u - d.m_sweep.c.y - l; this.m_invMassA = d.m_invMass; this.m_invMassB = f.m_invMass; this.m_invIA = d.m_invI; this.m_invIB = f.m_invI; this.m_axis.SetV(e.MulMV(n.R, this.m_localXAxis1)); this.m_a1 = (g + q) * this.m_axis.y - (j + l) * this.m_axis.x; this.m_a2 = r * this.m_axis.y - u * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; this.m_motorMass = this.m_motorMass > Number.MIN_VALUE ? 1 / this.m_motorMass : 0; this.m_perp.SetV(e.MulMV(n.R, this.m_localYAxis1)); this.m_s1 = (g + q) * this.m_perp.y - (j + l) * this.m_perp.x; this.m_s2 = r * this.m_perp.y - u * this.m_perp.x; n = this.m_invMassA; q = this.m_invMassB; l = this.m_invIA; r = this.m_invIB; this.m_K.col1.x = n + q + l * this.m_s1 * this.m_s1 + r * this.m_s2 * this.m_s2; this.m_K.col1.y = l * this.m_s1 * this.m_a1 + r * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = n + q + l * this.m_a1 * this.m_a1 + r * this.m_a2 * this.m_a2; this.m_enableLimit ? (g = this.m_axis.x * g + this.m_axis.y * j, e.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b.b2_linearSlop ? this.m_limitState = C.e_equalLimits : g <= this.m_lowerTranslation ? this.m_limitState != C.e_atLowerLimit && (this.m_limitState = C.e_atLowerLimit, this.m_impulse.y = 0) : g >= this.m_upperTranslation ? this.m_limitState != C.e_atUpperLimit && (this.m_limitState = C.e_atUpperLimit, this.m_impulse.y = 0) : (this.m_limitState = C.e_inactiveLimit, this.m_impulse.y = 0)) : this.m_limitState = C.e_inactiveLimit; !1 == this.m_enableMotor && (this.m_motorImpulse = 0); c.warmStarting ? (this.m_impulse.x *= c.dtRatio, this.m_impulse.y *= c.dtRatio, this.m_motorImpulse *= c.dtRatio, c = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.x, g = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.y) * this.m_axis.y, j = this.m_impulse.x * this.m_s1 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a1, n = this.m_impulse.x * this.m_s2 + (this.m_motorImpulse + this.m_impulse.y) * this.m_a2, d.m_linearVelocity.x -= this.m_invMassA * c, d.m_linearVelocity.y -= this.m_invMassA * g, d.m_angularVelocity -= this.m_invIA * j, f.m_linearVelocity.x += this.m_invMassB * c, f.m_linearVelocity.y += this.m_invMassB * g, f.m_angularVelocity += this.m_invIB * n) : (this.m_impulse.SetZero(), this.m_motorImpulse = 0) }; u.prototype.SolveVelocityConstraints = function(b) { var c = this.m_bodyA, d = this.m_bodyB, g = c.m_linearVelocity, j = c.m_angularVelocity, n = d.m_linearVelocity, q = d.m_angularVelocity, l = 0, r = 0, u = 0, s = 0; this.m_enableMotor && this.m_limitState != C.e_equalLimits && (s = this.m_motorMass * (this.m_motorSpeed - (this.m_axis.x * (n.x - g.x) + this.m_axis.y * (n.y - g.y) + this.m_a2 * q - this.m_a1 * j)), l = this.m_motorImpulse, r = b.dt * this.m_maxMotorForce, this.m_motorImpulse = e.Clamp(this.m_motorImpulse + s, -r, r), s = this.m_motorImpulse - l, l = s * this.m_axis.x, r = s * this.m_axis.y, u = s * this.m_a1, s *= this.m_a2, g.x -= this.m_invMassA * l, g.y -= this.m_invMassA * r, j -= this.m_invIA * u, n.x += this.m_invMassB * l, n.y += this.m_invMassB * r, q += this.m_invIB * s); r = this.m_perp.x * (n.x - g.x) + this.m_perp.y * (n.y - g.y) + this.m_s2 * q - this.m_s1 * j; this.m_enableLimit && this.m_limitState != C.e_inactiveLimit ? (u = this.m_axis.x * (n.x - g.x) + this.m_axis.y * (n.y - g.y) + this.m_a2 * q - this.m_a1 * j, l = this.m_impulse.Copy(), b = this.m_K.Solve(new f, -r, -u), this.m_impulse.Add(b), this.m_limitState == C.e_atLowerLimit ? this.m_impulse.y = e.Max(this.m_impulse.y, 0) : this.m_limitState == C.e_atUpperLimit && (this.m_impulse.y = e.Min(this.m_impulse.y, 0)), r = -r - (this.m_impulse.y - l.y) * this.m_K.col2.x, u = 0 != this.m_K.col1.x ? r / this.m_K.col1.x + l.x : l.x, this.m_impulse.x = u, b.x = this.m_impulse.x - l.x, b.y = this.m_impulse.y - l.y, l = b.x * this.m_perp.x + b.y * this.m_axis.x, r = b.x * this.m_perp.y + b.y * this.m_axis.y, u = b.x * this.m_s1 + b.y * this.m_a1, s = b.x * this.m_s2 + b.y * this.m_a2) : (b = 0 != this.m_K.col1.x ? -r / this.m_K.col1.x : 0, this.m_impulse.x += b, l = b * this.m_perp.x, r = b * this.m_perp.y, u = b * this.m_s1, s = b * this.m_s2); g.x -= this.m_invMassA * l; g.y -= this.m_invMassA * r; j -= this.m_invIA * u; n.x += this.m_invMassB * l; n.y += this.m_invMassB * r; q += this.m_invIB * s; c.m_linearVelocity.SetV(g); c.m_angularVelocity = j; d.m_linearVelocity.SetV(n); d.m_angularVelocity = q }; u.prototype.SolvePositionConstraints = function() { var d = this.m_bodyA, g = this.m_bodyB, j = d.m_sweep.c, n = d.m_sweep.a, q = g.m_sweep.c, u = g.m_sweep.a, y, l = 0, r = 0, z = 0, s = 0, A = 0, C = 0, r = !1, B = 0, E = c.FromAngle(n), z = c.FromAngle(u); y = E; var C = this.m_localAnchor1.x - this.m_localCenterA.x, G = this.m_localAnchor1.y - this.m_localCenterA.y, l = y.col1.x * C + y.col2.x * G, G = y.col1.y * C + y.col2.y * G, C = l; y = z; z = this.m_localAnchor2.x - this.m_localCenterB.x; s = this.m_localAnchor2.y - this.m_localCenterB.y; l = y.col1.x * z + y.col2.x * s; s = y.col1.y * z + y.col2.y * s; z = l; y = q.x + z - j.x - C; l = q.y + s - j.y - G; if (this.m_enableLimit) { this.m_axis = e.MulMV(E, this.m_localXAxis1); this.m_a1 = (y + C) * this.m_axis.y - (l + G) * this.m_axis.x; this.m_a2 = z * this.m_axis.y - s * this.m_axis.x; var m = this.m_axis.x * y + this.m_axis.y * l; e.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b.b2_linearSlop ? (B = e.Clamp(m, -b.b2_maxLinearCorrection, b.b2_maxLinearCorrection), A = e.Abs(m), r = !0) : m <= this.m_lowerTranslation ? (B = e.Clamp(m - this.m_lowerTranslation + b.b2_linearSlop, -b.b2_maxLinearCorrection, 0), A = this.m_lowerTranslation - m, r = !0) : m >= this.m_upperTranslation && (B = e.Clamp(m - this.m_upperTranslation + b.b2_linearSlop, 0, b.b2_maxLinearCorrection), A = m - this.m_upperTranslation, r = !0) } this.m_perp = e.MulMV(E, this.m_localYAxis1); this.m_s1 = (y + C) * this.m_perp.y - (l + G) * this.m_perp.x; this.m_s2 = z * this.m_perp.y - s * this.m_perp.x; E = new f; G = this.m_perp.x * y + this.m_perp.y * l; A = e.Max(A, e.Abs(G)); C = 0; r ? (r = this.m_invMassA, z = this.m_invMassB, s = this.m_invIA, y = this.m_invIB, this.m_K.col1.x = r + z + s * this.m_s1 * this.m_s1 + y * this.m_s2 * this.m_s2, this.m_K.col1.y = s * this.m_s1 * this.m_a1 + y * this.m_s2 * this.m_a2, this.m_K.col2.x = this.m_K.col1.y, this.m_K.col2.y = r + z + s * this.m_a1 * this.m_a1 + y * this.m_a2 * this.m_a2, this.m_K.Solve(E, -G, -B)) : (r = this.m_invMassA, z = this.m_invMassB, s = this.m_invIA, y = this.m_invIB, B = r + z + s * this.m_s1 * this.m_s1 + y * this.m_s2 * this.m_s2, E.x = 0 != B ? -G / B : 0, E.y = 0); B = E.x * this.m_perp.x + E.y * this.m_axis.x; r = E.x * this.m_perp.y + E.y * this.m_axis.y; G = E.x * this.m_s1 + E.y * this.m_a1; E = E.x * this.m_s2 + E.y * this.m_a2; j.x -= this.m_invMassA * B; j.y -= this.m_invMassA * r; n -= this.m_invIA * G; q.x += this.m_invMassB * B; q.y += this.m_invMassB * r; u += this.m_invIB * E; d.m_sweep.a = n; g.m_sweep.a = u; d.SynchronizeTransform(); g.SynchronizeTransform(); return A <= b.b2_linearSlop && C <= b.b2_angularSlop }; Box2D.inherit(L, Box2D.Dynamics.Joints.b2JointDef); L.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; L.b2LineJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f; this.localAxisA = new f }; L.prototype.b2LineJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_lineJoint; this.localAxisA.Set(1, 0); this.enableLimit = !1; this.upperTranslation = this.lowerTranslation = 0; this.enableMotor = !1; this.motorSpeed = this.maxMotorForce = 0 }; L.prototype.Initialize = function(b, c, d, e) { this.bodyA = b; this.bodyB = c; this.localAnchorA = this.bodyA.GetLocalPoint(d); this.localAnchorB = this.bodyB.GetLocalPoint(d); this.localAxisA = this.bodyA.GetLocalVector(e) }; Box2D.inherit(E, Box2D.Dynamics.Joints.b2Joint); E.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; E.b2MouseJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.K = new c; this.K1 = new c; this.K2 = new c; this.m_localAnchor = new f; this.m_target = new f; this.m_impulse = new f; this.m_mass = new c; this.m_C = new f }; E.prototype.GetAnchorA = function() { return this.m_target }; E.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor) }; E.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse.x, b * this.m_impulse.y) }; E.prototype.GetReactionTorque = function() { return 0 }; E.prototype.GetTarget = function() { return this.m_target }; E.prototype.SetTarget = function(b) { !1 == this.m_bodyB.IsAwake() && this.m_bodyB.SetAwake(!0); this.m_target = b }; E.prototype.GetMaxForce = function() { return this.m_maxForce }; E.prototype.SetMaxForce = function(b) { void 0 === b && (b = 0); this.m_maxForce = b }; E.prototype.GetFrequency = function() { return this.m_frequencyHz }; E.prototype.SetFrequency = function(b) { void 0 === b && (b = 0); this.m_frequencyHz = b }; E.prototype.GetDampingRatio = function() { return this.m_dampingRatio }; E.prototype.SetDampingRatio = function(b) { void 0 === b && (b = 0); this.m_dampingRatio = b }; E.prototype.b2MouseJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_target.SetV(b.target); var c = this.m_target.x - this.m_bodyB.m_xf.position.x, d = this.m_target.y - this.m_bodyB.m_xf.position.y, e = this.m_bodyB.m_xf.R; this.m_localAnchor.x = c * e.col1.x + d * e.col1.y; this.m_localAnchor.y = c * e.col2.x + d * e.col2.y; this.m_maxForce = b.maxForce; this.m_impulse.SetZero(); this.m_frequencyHz = b.frequencyHz; this.m_dampingRatio = b.dampingRatio; this.m_gamma = this.m_beta = 0 }; E.prototype.InitVelocityConstraints = function(b) { var c = this.m_bodyB, d = c.GetMass(), e = 2 * Math.PI * this.m_frequencyHz, f = d * e * e; this.m_gamma = b.dt * (2 * d * this.m_dampingRatio * e + b.dt * f); this.m_gamma = 0 != this.m_gamma ? 1 / this.m_gamma : 0; this.m_beta = b.dt * f * this.m_gamma; var f = c.m_xf.R, d = this.m_localAnchor.x - c.m_sweep.localCenter.x, e = this.m_localAnchor.y - c.m_sweep.localCenter.y, g = f.col1.x * d + f.col2.x * e, e = f.col1.y * d + f.col2.y * e, d = g, f = c.m_invMass, g = c.m_invI; this.K1.col1.x = f; this.K1.col2.x = 0; this.K1.col1.y = 0; this.K1.col2.y = f; this.K2.col1.x = g * e * e; this.K2.col2.x = -g * d * e; this.K2.col1.y = -g * d * e; this.K2.col2.y = g * d * d; this.K.SetM(this.K1); this.K.AddM(this.K2); this.K.col1.x += this.m_gamma; this.K.col2.y += this.m_gamma; this.K.GetInverse(this.m_mass); this.m_C.x = c.m_sweep.c.x + d - this.m_target.x; this.m_C.y = c.m_sweep.c.y + e - this.m_target.y; c.m_angularVelocity *= 0.98; this.m_impulse.x *= b.dtRatio; this.m_impulse.y *= b.dtRatio; c.m_linearVelocity.x += f * this.m_impulse.x; c.m_linearVelocity.y += f * this.m_impulse.y; c.m_angularVelocity += g * (d * this.m_impulse.y - e * this.m_impulse.x) }; E.prototype.SolveVelocityConstraints = function(b) { var c = this.m_bodyB, d, e = 0, f = 0; d = c.m_xf.R; var g = this.m_localAnchor.x - c.m_sweep.localCenter.x, j = this.m_localAnchor.y - c.m_sweep.localCenter.y, e = d.col1.x * g + d.col2.x * j, j = d.col1.y * g + d.col2.y * j, g = e, e = c.m_linearVelocity.x + -c.m_angularVelocity * j, l = c.m_linearVelocity.y + c.m_angularVelocity * g; d = this.m_mass; e = e + this.m_beta * this.m_C.x + this.m_gamma * this.m_impulse.x; f = l + this.m_beta * this.m_C.y + this.m_gamma * this.m_impulse.y; l = -(d.col1.x * e + d.col2.x * f); f = -(d.col1.y * e + d.col2.y * f); d = this.m_impulse.x; e = this.m_impulse.y; this.m_impulse.x += l; this.m_impulse.y += f; b = b.dt * this.m_maxForce; this.m_impulse.LengthSquared() > b * b && this.m_impulse.Multiply(b / this.m_impulse.Length()); l = this.m_impulse.x - d; f = this.m_impulse.y - e; c.m_linearVelocity.x += c.m_invMass * l; c.m_linearVelocity.y += c.m_invMass * f; c.m_angularVelocity += c.m_invI * (g * f - j * l) }; E.prototype.SolvePositionConstraints = function() { return !0 }; Box2D.inherit(Q, Box2D.Dynamics.Joints.b2JointDef); Q.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; Q.b2MouseJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.target = new f }; Q.prototype.b2MouseJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_mouseJoint; this.maxForce = 0; this.frequencyHz = 5; this.dampingRatio = 0.7 }; Box2D.inherit(M, Box2D.Dynamics.Joints.b2Joint); M.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; M.b2PrismaticJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_localXAxis1 = new f; this.m_localYAxis1 = new f; this.m_axis = new f; this.m_perp = new f; this.m_K = new d; this.m_impulse = new j }; M.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; M.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; M.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), b * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y)) }; M.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); return b * this.m_impulse.y }; M.prototype.GetJointTranslation = function() { var b = this.m_bodyA, c = this.m_bodyB, d = b.GetWorldPoint(this.m_localAnchor1), e = c.GetWorldPoint(this.m_localAnchor2), c = e.x - d.x, d = e.y - d.y, b = b.GetWorldVector(this.m_localXAxis1); return b.x * c + b.y * d }; M.prototype.GetJointSpeed = function() { var b = this.m_bodyA, c = this.m_bodyB, d; d = b.m_xf.R; var e = this.m_localAnchor1.x - b.m_sweep.localCenter.x, f = this.m_localAnchor1.y - b.m_sweep.localCenter.y, g = d.col1.x * e + d.col2.x * f, f = d.col1.y * e + d.col2.y * f, e = g; d = c.m_xf.R; var j = this.m_localAnchor2.x - c.m_sweep.localCenter.x, l = this.m_localAnchor2.y - c.m_sweep.localCenter.y, g = d.col1.x * j + d.col2.x * l, l = d.col1.y * j + d.col2.y * l, j = g; d = c.m_sweep.c.x + j - (b.m_sweep.c.x + e); var g = c.m_sweep.c.y + l - (b.m_sweep.c.y + f), n = b.GetWorldVector(this.m_localXAxis1), q = b.m_linearVelocity, s = c.m_linearVelocity, b = b.m_angularVelocity, c = c.m_angularVelocity; return d * -b * n.y + g * b * n.x + (n.x * (s.x + -c * l - q.x - -b * f) + n.y * (s.y + c * j - q.y - b * e)) }; M.prototype.IsLimitEnabled = function() { return this.m_enableLimit }; M.prototype.EnableLimit = function(b) { this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_enableLimit = b }; M.prototype.GetLowerLimit = function() { return this.m_lowerTranslation }; M.prototype.GetUpperLimit = function() { return this.m_upperTranslation }; M.prototype.SetLimits = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_lowerTranslation = b; this.m_upperTranslation = c }; M.prototype.IsMotorEnabled = function() { return this.m_enableMotor }; M.prototype.EnableMotor = function(b) { this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_enableMotor = b }; M.prototype.SetMotorSpeed = function(b) { void 0 === b && (b = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_motorSpeed = b }; M.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }; M.prototype.SetMaxMotorForce = function(b) { void 0 === b && (b = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_maxMotorForce = b }; M.prototype.GetMotorForce = function() { return this.m_motorImpulse }; M.prototype.b2PrismaticJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchor1.SetV(b.localAnchorA); this.m_localAnchor2.SetV(b.localAnchorB); this.m_localXAxis1.SetV(b.localAxisA); this.m_localYAxis1.x = -this.m_localXAxis1.y; this.m_localYAxis1.y = this.m_localXAxis1.x; this.m_refAngle = b.referenceAngle; this.m_impulse.SetZero(); this.m_motorImpulse = this.m_motorMass = 0; this.m_lowerTranslation = b.lowerTranslation; this.m_upperTranslation = b.upperTranslation; this.m_maxMotorForce = b.maxMotorForce; this.m_motorSpeed = b.motorSpeed; this.m_enableLimit = b.enableLimit; this.m_enableMotor = b.enableMotor; this.m_limitState = C.e_inactiveLimit; this.m_axis.SetZero(); this.m_perp.SetZero() }; M.prototype.InitVelocityConstraints = function(c) { var d = this.m_bodyA, f = this.m_bodyB, g, j = 0; this.m_localCenterA.SetV(d.GetLocalCenter()); this.m_localCenterB.SetV(f.GetLocalCenter()); var n = d.GetTransform(); f.GetTransform(); g = d.m_xf.R; var q = this.m_localAnchor1.x - this.m_localCenterA.x, l = this.m_localAnchor1.y - this.m_localCenterA.y, j = g.col1.x * q + g.col2.x * l, l = g.col1.y * q + g.col2.y * l, q = j; g = f.m_xf.R; var r = this.m_localAnchor2.x - this.m_localCenterB.x, u = this.m_localAnchor2.y - this.m_localCenterB.y, j = g.col1.x * r + g.col2.x * u, u = g.col1.y * r + g.col2.y * u, r = j; g = f.m_sweep.c.x + r - d.m_sweep.c.x - q; j = f.m_sweep.c.y + u - d.m_sweep.c.y - l; this.m_invMassA = d.m_invMass; this.m_invMassB = f.m_invMass; this.m_invIA = d.m_invI; this.m_invIB = f.m_invI; this.m_axis.SetV(e.MulMV(n.R, this.m_localXAxis1)); this.m_a1 = (g + q) * this.m_axis.y - (j + l) * this.m_axis.x; this.m_a2 = r * this.m_axis.y - u * this.m_axis.x; this.m_motorMass = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_a1 * this.m_a1 + this.m_invIB * this.m_a2 * this.m_a2; this.m_motorMass > Number.MIN_VALUE && (this.m_motorMass = 1 / this.m_motorMass); this.m_perp.SetV(e.MulMV(n.R, this.m_localYAxis1)); this.m_s1 = (g + q) * this.m_perp.y - (j + l) * this.m_perp.x; this.m_s2 = r * this.m_perp.y - u * this.m_perp.x; n = this.m_invMassA; q = this.m_invMassB; l = this.m_invIA; r = this.m_invIB; this.m_K.col1.x = n + q + l * this.m_s1 * this.m_s1 + r * this.m_s2 * this.m_s2; this.m_K.col1.y = l * this.m_s1 + r * this.m_s2; this.m_K.col1.z = l * this.m_s1 * this.m_a1 + r * this.m_s2 * this.m_a2; this.m_K.col2.x = this.m_K.col1.y; this.m_K.col2.y = l + r; this.m_K.col2.z = l * this.m_a1 + r * this.m_a2; this.m_K.col3.x = this.m_K.col1.z; this.m_K.col3.y = this.m_K.col2.z; this.m_K.col3.z = n + q + l * this.m_a1 * this.m_a1 + r * this.m_a2 * this.m_a2; this.m_enableLimit ? (g = this.m_axis.x * g + this.m_axis.y * j, e.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b.b2_linearSlop ? this.m_limitState = C.e_equalLimits : g <= this.m_lowerTranslation ? this.m_limitState != C.e_atLowerLimit && (this.m_limitState = C.e_atLowerLimit, this.m_impulse.z = 0) : g >= this.m_upperTranslation ? this.m_limitState != C.e_atUpperLimit && (this.m_limitState = C.e_atUpperLimit, this.m_impulse.z = 0) : (this.m_limitState = C.e_inactiveLimit, this.m_impulse.z = 0)) : this.m_limitState = C.e_inactiveLimit; !1 == this.m_enableMotor && (this.m_motorImpulse = 0); c.warmStarting ? (this.m_impulse.x *= c.dtRatio, this.m_impulse.y *= c.dtRatio, this.m_motorImpulse *= c.dtRatio, c = this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x, g = this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y, j = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1, n = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2, d.m_linearVelocity.x -= this.m_invMassA * c, d.m_linearVelocity.y -= this.m_invMassA * g, d.m_angularVelocity -= this.m_invIA * j, f.m_linearVelocity.x += this.m_invMassB * c, f.m_linearVelocity.y += this.m_invMassB * g, f.m_angularVelocity += this.m_invIB * n) : (this.m_impulse.SetZero(), this.m_motorImpulse = 0) }; M.prototype.SolveVelocityConstraints = function(b) { var c = this.m_bodyA, d = this.m_bodyB, g = c.m_linearVelocity, n = c.m_angularVelocity, q = d.m_linearVelocity, u = d.m_angularVelocity, l = 0, r = 0, y = 0, s = 0; this.m_enableMotor && this.m_limitState != C.e_equalLimits && (s = this.m_motorMass * (this.m_motorSpeed - (this.m_axis.x * (q.x - g.x) + this.m_axis.y * (q.y - g.y) + this.m_a2 * u - this.m_a1 * n)), l = this.m_motorImpulse, b = b.dt * this.m_maxMotorForce, this.m_motorImpulse = e.Clamp(this.m_motorImpulse + s, -b, b), s = this.m_motorImpulse - l, l = s * this.m_axis.x, r = s * this.m_axis.y, y = s * this.m_a1, s *= this.m_a2, g.x -= this.m_invMassA * l, g.y -= this.m_invMassA * r, n -= this.m_invIA * y, q.x += this.m_invMassB * l, q.y += this.m_invMassB * r, u += this.m_invIB * s); y = this.m_perp.x * (q.x - g.x) + this.m_perp.y * (q.y - g.y) + this.m_s2 * u - this.m_s1 * n; r = u - n; this.m_enableLimit && this.m_limitState != C.e_inactiveLimit ? (b = this.m_axis.x * (q.x - g.x) + this.m_axis.y * (q.y - g.y) + this.m_a2 * u - this.m_a1 * n, l = this.m_impulse.Copy(), b = this.m_K.Solve33(new j, -y, -r, -b), this.m_impulse.Add(b), this.m_limitState == C.e_atLowerLimit ? this.m_impulse.z = e.Max(this.m_impulse.z, 0) : this.m_limitState == C.e_atUpperLimit && (this.m_impulse.z = e.Min(this.m_impulse.z, 0)), y = -y - (this.m_impulse.z - l.z) * this.m_K.col3.x, r = -r - (this.m_impulse.z - l.z) * this.m_K.col3.y, r = this.m_K.Solve22(new f, y, r), r.x += l.x, r.y += l.y, this.m_impulse.x = r.x, this.m_impulse.y = r.y, b.x = this.m_impulse.x - l.x, b.y = this.m_impulse.y - l.y, b.z = this.m_impulse.z - l.z, l = b.x * this.m_perp.x + b.z * this.m_axis.x, r = b.x * this.m_perp.y + b.z * this.m_axis.y, y = b.x * this.m_s1 + b.y + b.z * this.m_a1, s = b.x * this.m_s2 + b.y + b.z * this.m_a2) : (b = this.m_K.Solve22(new f, -y, -r), this.m_impulse.x += b.x, this.m_impulse.y += b.y, l = b.x * this.m_perp.x, r = b.x * this.m_perp.y, y = b.x * this.m_s1 + b.y, s = b.x * this.m_s2 + b.y); g.x -= this.m_invMassA * l; g.y -= this.m_invMassA * r; n -= this.m_invIA * y; q.x += this.m_invMassB * l; q.y += this.m_invMassB * r; u += this.m_invIB * s; c.m_linearVelocity.SetV(g); c.m_angularVelocity = n; d.m_linearVelocity.SetV(q); d.m_angularVelocity = u }; M.prototype.SolvePositionConstraints = function() { var d = this.m_bodyA, g = this.m_bodyB, n = d.m_sweep.c, q = d.m_sweep.a, u = g.m_sweep.c, y = g.m_sweep.a, z, l = 0, r = 0, A = 0, s = 0, C = 0, r = !1, B = 0, E = c.FromAngle(q), G = c.FromAngle(y); z = E; var C = this.m_localAnchor1.x - this.m_localCenterA.x, I = this.m_localAnchor1.y - this.m_localCenterA.y, l = z.col1.x * C + z.col2.x * I, I = z.col1.y * C + z.col2.y * I, C = l; z = G; G = this.m_localAnchor2.x - this.m_localCenterB.x; A = this.m_localAnchor2.y - this.m_localCenterB.y; l = z.col1.x * G + z.col2.x * A; A = z.col1.y * G + z.col2.y * A; G = l; z = u.x + G - n.x - C; l = u.y + A - n.y - I; if (this.m_enableLimit) { this.m_axis = e.MulMV(E, this.m_localXAxis1); this.m_a1 = (z + C) * this.m_axis.y - (l + I) * this.m_axis.x; this.m_a2 = G * this.m_axis.y - A * this.m_axis.x; var m = this.m_axis.x * z + this.m_axis.y * l; e.Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b.b2_linearSlop ? (B = e.Clamp(m, -b.b2_maxLinearCorrection, b.b2_maxLinearCorrection), s = e.Abs(m), r = !0) : m <= this.m_lowerTranslation ? (B = e.Clamp(m - this.m_lowerTranslation + b.b2_linearSlop, -b.b2_maxLinearCorrection, 0), s = this.m_lowerTranslation - m, r = !0) : m >= this.m_upperTranslation && (B = e.Clamp(m - this.m_upperTranslation + b.b2_linearSlop, 0, b.b2_maxLinearCorrection), s = m - this.m_upperTranslation, r = !0) } this.m_perp = e.MulMV(E, this.m_localYAxis1); this.m_s1 = (z + C) * this.m_perp.y - (l + I) * this.m_perp.x; this.m_s2 = G * this.m_perp.y - A * this.m_perp.x; E = new j; I = this.m_perp.x * z + this.m_perp.y * l; G = y - q - this.m_refAngle; s = e.Max(s, e.Abs(I)); C = e.Abs(G); r ? (r = this.m_invMassA, A = this.m_invMassB, z = this.m_invIA, l = this.m_invIB, this.m_K.col1.x = r + A + z * this.m_s1 * this.m_s1 + l * this.m_s2 * this.m_s2, this.m_K.col1.y = z * this.m_s1 + l * this.m_s2, this.m_K.col1.z = z * this.m_s1 * this.m_a1 + l * this.m_s2 * this.m_a2, this.m_K.col2.x = this.m_K.col1.y, this.m_K.col2.y = z + l, this.m_K.col2.z = z * this.m_a1 + l * this.m_a2, this.m_K.col3.x = this.m_K.col1.z, this.m_K.col3.y = this.m_K.col2.z, this.m_K.col3.z = r + A + z * this.m_a1 * this.m_a1 + l * this.m_a2 * this.m_a2, this.m_K.Solve33(E, -I, -G, -B)) : (r = this.m_invMassA, A = this.m_invMassB, z = this.m_invIA, l = this.m_invIB, B = z * this.m_s1 + l * this.m_s2, m = z + l, this.m_K.col1.Set(r + A + z * this.m_s1 * this.m_s1 + l * this.m_s2 * this.m_s2, B, 0), this.m_K.col2.Set(B, m, 0), B = this.m_K.Solve22(new f, -I, -G), E.x = B.x, E.y = B.y, E.z = 0); B = E.x * this.m_perp.x + E.z * this.m_axis.x; r = E.x * this.m_perp.y + E.z * this.m_axis.y; I = E.x * this.m_s1 + E.y + E.z * this.m_a1; E = E.x * this.m_s2 + E.y + E.z * this.m_a2; n.x -= this.m_invMassA * B; n.y -= this.m_invMassA * r; q -= this.m_invIA * I; u.x += this.m_invMassB * B; u.y += this.m_invMassB * r; y += this.m_invIB * E; d.m_sweep.a = q; g.m_sweep.a = y; d.SynchronizeTransform(); g.SynchronizeTransform(); return s <= b.b2_linearSlop && C <= b.b2_angularSlop }; Box2D.inherit(R, Box2D.Dynamics.Joints.b2JointDef); R.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; R.b2PrismaticJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f; this.localAxisA = new f }; R.prototype.b2PrismaticJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_prismaticJoint; this.localAxisA.Set(1, 0); this.referenceAngle = 0; this.enableLimit = !1; this.upperTranslation = this.lowerTranslation = 0; this.enableMotor = !1; this.motorSpeed = this.maxMotorForce = 0 }; R.prototype.Initialize = function(b, c, d, e) { this.bodyA = b; this.bodyB = c; this.localAnchorA = this.bodyA.GetLocalPoint(d); this.localAnchorB = this.bodyB.GetLocalPoint(d); this.localAxisA = this.bodyA.GetLocalVector(e); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle() }; Box2D.inherit(K, Box2D.Dynamics.Joints.b2Joint); K.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; K.b2PulleyJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_groundAnchor1 = new f; this.m_groundAnchor2 = new f; this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_u1 = new f; this.m_u2 = new f }; K.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; K.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; K.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse * this.m_u2.x, b * this.m_impulse * this.m_u2.y) }; K.prototype.GetReactionTorque = function() { return 0 }; K.prototype.GetGroundAnchorA = function() { var b = this.m_ground.m_xf.position.Copy(); b.Add(this.m_groundAnchor1); return b }; K.prototype.GetGroundAnchorB = function() { var b = this.m_ground.m_xf.position.Copy(); b.Add(this.m_groundAnchor2); return b }; K.prototype.GetLength1 = function() { var b = this.m_bodyA.GetWorldPoint(this.m_localAnchor1), c = b.x - (this.m_ground.m_xf.position.x + this.m_groundAnchor1.x), b = b.y - (this.m_ground.m_xf.position.y + this.m_groundAnchor1.y); return Math.sqrt(c * c + b * b) }; K.prototype.GetLength2 = function() { var b = this.m_bodyB.GetWorldPoint(this.m_localAnchor2), c = b.x - (this.m_ground.m_xf.position.x + this.m_groundAnchor2.x), b = b.y - (this.m_ground.m_xf.position.y + this.m_groundAnchor2.y); return Math.sqrt(c * c + b * b) }; K.prototype.GetRatio = function() { return this.m_ratio }; K.prototype.b2PulleyJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_ground = this.m_bodyA.m_world.m_groundBody; this.m_groundAnchor1.x = b.groundAnchorA.x - this.m_ground.m_xf.position.x; this.m_groundAnchor1.y = b.groundAnchorA.y - this.m_ground.m_xf.position.y; this.m_groundAnchor2.x = b.groundAnchorB.x - this.m_ground.m_xf.position.x; this.m_groundAnchor2.y = b.groundAnchorB.y - this.m_ground.m_xf.position.y; this.m_localAnchor1.SetV(b.localAnchorA); this.m_localAnchor2.SetV(b.localAnchorB); this.m_ratio = b.ratio; this.m_constant = b.lengthA + this.m_ratio * b.lengthB; this.m_maxLength1 = e.Min(b.maxLengthA, this.m_constant - this.m_ratio * K.b2_minPulleyLength); this.m_maxLength2 = e.Min(b.maxLengthB, (this.m_constant - K.b2_minPulleyLength) / this.m_ratio); this.m_limitImpulse2 = this.m_limitImpulse1 = this.m_impulse = 0 }; K.prototype.InitVelocityConstraints = function(c) { var d = this.m_bodyA, e = this.m_bodyB, f; f = d.m_xf.R; var g = this.m_localAnchor1.x - d.m_sweep.localCenter.x, j = this.m_localAnchor1.y - d.m_sweep.localCenter.y, n = f.col1.x * g + f.col2.x * j, j = f.col1.y * g + f.col2.y * j, g = n; f = e.m_xf.R; var l = this.m_localAnchor2.x - e.m_sweep.localCenter.x, r = this.m_localAnchor2.y - e.m_sweep.localCenter.y, n = f.col1.x * l + f.col2.x * r, r = f.col1.y * l + f.col2.y * r, l = n; f = e.m_sweep.c.x + l; var n = e.m_sweep.c.y + r, q = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x, s = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y; this.m_u1.Set(d.m_sweep.c.x + g - (this.m_ground.m_xf.position.x + this.m_groundAnchor1.x), d.m_sweep.c.y + j - (this.m_ground.m_xf.position.y + this.m_groundAnchor1.y)); this.m_u2.Set(f - q, n - s); f = this.m_u1.Length(); n = this.m_u2.Length(); f > b.b2_linearSlop ? this.m_u1.Multiply(1 / f) : this.m_u1.SetZero(); n > b.b2_linearSlop ? this.m_u2.Multiply(1 / n) : this.m_u2.SetZero(); 0 < this.m_constant - f - this.m_ratio * n ? (this.m_state = C.e_inactiveLimit, this.m_impulse = 0) : this.m_state = C.e_atUpperLimit; f < this.m_maxLength1 ? (this.m_limitState1 = C.e_inactiveLimit, this.m_limitImpulse1 = 0) : this.m_limitState1 = C.e_atUpperLimit; n < this.m_maxLength2 ? (this.m_limitState2 = C.e_inactiveLimit, this.m_limitImpulse2 = 0) : this.m_limitState2 = C.e_atUpperLimit; f = g * this.m_u1.y - j * this.m_u1.x; n = l * this.m_u2.y - r * this.m_u2.x; this.m_limitMass1 = d.m_invMass + d.m_invI * f * f; this.m_limitMass2 = e.m_invMass + e.m_invI * n * n; this.m_pulleyMass = this.m_limitMass1 + this.m_ratio * this.m_ratio * this.m_limitMass2; this.m_limitMass1 = 1 / this.m_limitMass1; this.m_limitMass2 = 1 / this.m_limitMass2; this.m_pulleyMass = 1 / this.m_pulleyMass; c.warmStarting ? (this.m_impulse *= c.dtRatio, this.m_limitImpulse1 *= c.dtRatio, this.m_limitImpulse2 *= c.dtRatio, c = (-this.m_impulse - this.m_limitImpulse1) * this.m_u1.x, f = (-this.m_impulse - this.m_limitImpulse1) * this.m_u1.y, n = (-this.m_ratio * this.m_impulse - this.m_limitImpulse2) * this.m_u2.x, q = (-this.m_ratio * this.m_impulse - this.m_limitImpulse2) * this.m_u2.y, d.m_linearVelocity.x += d.m_invMass * c, d.m_linearVelocity.y += d.m_invMass * f, d.m_angularVelocity += d.m_invI * (g * f - j * c), e.m_linearVelocity.x += e.m_invMass * n, e.m_linearVelocity.y += e.m_invMass * q, e.m_angularVelocity += e.m_invI * (l * q - r * n)) : this.m_limitImpulse2 = this.m_limitImpulse1 = this.m_impulse = 0 }; K.prototype.SolveVelocityConstraints = function() { var b = this.m_bodyA, c = this.m_bodyB, d; d = b.m_xf.R; var f = this.m_localAnchor1.x - b.m_sweep.localCenter.x, g = this.m_localAnchor1.y - b.m_sweep.localCenter.y, j = d.col1.x * f + d.col2.x * g, g = d.col1.y * f + d.col2.y * g, f = j; d = c.m_xf.R; var n = this.m_localAnchor2.x - c.m_sweep.localCenter.x, l = this.m_localAnchor2.y - c.m_sweep.localCenter.y, j = d.col1.x * n + d.col2.x * l, l = d.col1.y * n + d.col2.y * l, n = j, r = 0, q = 0; this.m_state == C.e_atUpperLimit && (d = b.m_linearVelocity.x + -b.m_angularVelocity * g, j = b.m_linearVelocity.y + b.m_angularVelocity * f, r = c.m_linearVelocity.x + -c.m_angularVelocity * l, q = c.m_linearVelocity.y + c.m_angularVelocity * n, d = -(this.m_u1.x * d + this.m_u1.y * j) - this.m_ratio * (this.m_u2.x * r + this.m_u2.y * q), q = this.m_pulleyMass * -d, d = this.m_impulse, this.m_impulse = e.Max(0, this.m_impulse + q), q = this.m_impulse - d, d = -q * this.m_u1.x, j = -q * this.m_u1.y, r = -this.m_ratio * q * this.m_u2.x, q = -this.m_ratio * q * this.m_u2.y, b.m_linearVelocity.x += b.m_invMass * d, b.m_linearVelocity.y += b.m_invMass * j, b.m_angularVelocity += b.m_invI * (f * j - g * d), c.m_linearVelocity.x += c.m_invMass * r, c.m_linearVelocity.y += c.m_invMass * q, c.m_angularVelocity += c.m_invI * (n * q - l * r)); this.m_limitState1 == C.e_atUpperLimit && (d = b.m_linearVelocity.x + -b.m_angularVelocity * g, j = b.m_linearVelocity.y + b.m_angularVelocity * f, d = -(this.m_u1.x * d + this.m_u1.y * j), q = -this.m_limitMass1 * d, d = this.m_limitImpulse1, this.m_limitImpulse1 = e.Max(0, this.m_limitImpulse1 + q), q = this.m_limitImpulse1 - d, d = -q * this.m_u1.x, j = -q * this.m_u1.y, b.m_linearVelocity.x += b.m_invMass * d, b.m_linearVelocity.y += b.m_invMass * j, b.m_angularVelocity += b.m_invI * (f * j - g * d)); this.m_limitState2 == C.e_atUpperLimit && (r = c.m_linearVelocity.x + -c.m_angularVelocity * l, q = c.m_linearVelocity.y + c.m_angularVelocity * n, d = -(this.m_u2.x * r + this.m_u2.y * q), q = -this.m_limitMass2 * d, d = this.m_limitImpulse2, this.m_limitImpulse2 = e.Max(0, this.m_limitImpulse2 + q), q = this.m_limitImpulse2 - d, r = -q * this.m_u2.x, q = -q * this.m_u2.y, c.m_linearVelocity.x += c.m_invMass * r, c.m_linearVelocity.y += c.m_invMass * q, c.m_angularVelocity += c.m_invI * (n * q - l * r)) }; K.prototype.SolvePositionConstraints = function() { var c = this.m_bodyA, d = this.m_bodyB, f, g = this.m_ground.m_xf.position.x + this.m_groundAnchor1.x, j = this.m_ground.m_xf.position.y + this.m_groundAnchor1.y, n = this.m_ground.m_xf.position.x + this.m_groundAnchor2.x, q = this.m_ground.m_xf.position.y + this.m_groundAnchor2.y, l = 0, r = 0, u = 0, s = 0, y = 0, z = 0, A = 0, B = 0; this.m_state == C.e_atUpperLimit && (f = c.m_xf.R, l = this.m_localAnchor1.x - c.m_sweep.localCenter.x, r = this.m_localAnchor1.y - c.m_sweep.localCenter.y, y = f.col1.x * l + f.col2.x * r, r = f.col1.y * l + f.col2.y * r, l = y, f = d.m_xf.R, u = this.m_localAnchor2.x - d.m_sweep.localCenter.x, s = this.m_localAnchor2.y - d.m_sweep.localCenter.y, y = f.col1.x * u + f.col2.x * s, s = f.col1.y * u + f.col2.y * s, u = y, f = c.m_sweep.c.x + l, y = c.m_sweep.c.y + r, z = d.m_sweep.c.x + u, A = d.m_sweep.c.y + s, this.m_u1.Set(f - g, y - j), this.m_u2.Set(z - n, A - q), f = this.m_u1.Length(), y = this.m_u2.Length(), f > b.b2_linearSlop ? this.m_u1.Multiply(1 / f) : this.m_u1.SetZero(), y > b.b2_linearSlop ? this.m_u2.Multiply(1 / y) : this.m_u2.SetZero(), f = this.m_constant - f - this.m_ratio * y, B = e.Max(B, -f), f = e.Clamp(f + b.b2_linearSlop, -b.b2_maxLinearCorrection, 0), A = -this.m_pulleyMass * f, f = -A * this.m_u1.x, y = -A * this.m_u1.y, z = -this.m_ratio * A * this.m_u2.x, A = -this.m_ratio * A * this.m_u2.y, c.m_sweep.c.x += c.m_invMass * f, c.m_sweep.c.y += c.m_invMass * y, c.m_sweep.a += c.m_invI * (l * y - r * f), d.m_sweep.c.x += d.m_invMass * z, d.m_sweep.c.y += d.m_invMass * A, d.m_sweep.a += d.m_invI * (u * A - s * z), c.SynchronizeTransform(), d.SynchronizeTransform()); this.m_limitState1 == C.e_atUpperLimit && (f = c.m_xf.R, l = this.m_localAnchor1.x - c.m_sweep.localCenter.x, r = this.m_localAnchor1.y - c.m_sweep.localCenter.y, y = f.col1.x * l + f.col2.x * r, r = f.col1.y * l + f.col2.y * r, l = y, f = c.m_sweep.c.x + l, y = c.m_sweep.c.y + r, this.m_u1.Set(f - g, y - j), f = this.m_u1.Length(), f > b.b2_linearSlop ? (this.m_u1.x *= 1 / f, this.m_u1.y *= 1 / f) : this.m_u1.SetZero(), f = this.m_maxLength1 - f, B = e.Max(B, -f), f = e.Clamp(f + b.b2_linearSlop, -b.b2_maxLinearCorrection, 0), A = -this.m_limitMass1 * f, f = -A * this.m_u1.x, y = -A * this.m_u1.y, c.m_sweep.c.x += c.m_invMass * f, c.m_sweep.c.y += c.m_invMass * y, c.m_sweep.a += c.m_invI * (l * y - r * f), c.SynchronizeTransform()); this.m_limitState2 == C.e_atUpperLimit && (f = d.m_xf.R, u = this.m_localAnchor2.x - d.m_sweep.localCenter.x, s = this.m_localAnchor2.y - d.m_sweep.localCenter.y, y = f.col1.x * u + f.col2.x * s, s = f.col1.y * u + f.col2.y * s, u = y, z = d.m_sweep.c.x + u, A = d.m_sweep.c.y + s, this.m_u2.Set(z - n, A - q), y = this.m_u2.Length(), y > b.b2_linearSlop ? (this.m_u2.x *= 1 / y, this.m_u2.y *= 1 / y) : this.m_u2.SetZero(), f = this.m_maxLength2 - y, B = e.Max(B, -f), f = e.Clamp(f + b.b2_linearSlop, -b.b2_maxLinearCorrection, 0), A = -this.m_limitMass2 * f, z = -A * this.m_u2.x, A = -A * this.m_u2.y, d.m_sweep.c.x += d.m_invMass * z, d.m_sweep.c.y += d.m_invMass * A, d.m_sweep.a += d.m_invI * (u * A - s * z), d.SynchronizeTransform()); return B < b.b2_linearSlop }; Box2D.postDefs.push(function() { Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength = 2 }); Box2D.inherit(X, Box2D.Dynamics.Joints.b2JointDef); X.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; X.b2PulleyJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.groundAnchorA = new f; this.groundAnchorB = new f; this.localAnchorA = new f; this.localAnchorB = new f }; X.prototype.b2PulleyJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_pulleyJoint; this.groundAnchorA.Set(-1, 1); this.groundAnchorB.Set(1, 1); this.localAnchorA.Set(-1, 0); this.localAnchorB.Set(1, 0); this.maxLengthB = this.lengthB = this.maxLengthA = this.lengthA = 0; this.ratio = 1; this.collideConnected = !0 }; X.prototype.Initialize = function(b, c, d, e, f, g, j) { void 0 === j && (j = 0); this.bodyA = b; this.bodyB = c; this.groundAnchorA.SetV(d); this.groundAnchorB.SetV(e); this.localAnchorA = this.bodyA.GetLocalPoint(f); this.localAnchorB = this.bodyB.GetLocalPoint(g); b = f.x - d.x; d = f.y - d.y; this.lengthA = Math.sqrt(b * b + d * d); d = g.x - e.x; e = g.y - e.y; this.lengthB = Math.sqrt(d * d + e * e); this.ratio = j; j = this.lengthA + this.ratio * this.lengthB; this.maxLengthA = j - this.ratio * K.b2_minPulleyLength; this.maxLengthB = (j - K.b2_minPulleyLength) / this.ratio }; Box2D.inherit(P, Box2D.Dynamics.Joints.b2Joint); P.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; P.b2RevoluteJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.K = new c; this.K1 = new c; this.K2 = new c; this.K3 = new c; this.impulse3 = new j; this.impulse2 = new f; this.reduced = new f; this.m_localAnchor1 = new f; this.m_localAnchor2 = new f; this.m_impulse = new j; this.m_mass = new d }; P.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchor1) }; P.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchor2) }; P.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse.x, b * this.m_impulse.y) }; P.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); return b * this.m_impulse.z }; P.prototype.GetJointAngle = function() { return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle }; P.prototype.GetJointSpeed = function() { return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity }; P.prototype.IsLimitEnabled = function() { return this.m_enableLimit }; P.prototype.EnableLimit = function(b) { this.m_enableLimit = b }; P.prototype.GetLowerLimit = function() { return this.m_lowerAngle }; P.prototype.GetUpperLimit = function() { return this.m_upperAngle }; P.prototype.SetLimits = function(b, c) { void 0 === b && (b = 0); void 0 === c && (c = 0); this.m_lowerAngle = b; this.m_upperAngle = c }; P.prototype.IsMotorEnabled = function() { this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); return this.m_enableMotor }; P.prototype.EnableMotor = function(b) { this.m_enableMotor = b }; P.prototype.SetMotorSpeed = function(b) { void 0 === b && (b = 0); this.m_bodyA.SetAwake(!0); this.m_bodyB.SetAwake(!0); this.m_motorSpeed = b }; P.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }; P.prototype.SetMaxMotorTorque = function(b) { void 0 === b && (b = 0); this.m_maxMotorTorque = b }; P.prototype.GetMotorTorque = function() { return this.m_maxMotorTorque }; P.prototype.b2RevoluteJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchor1.SetV(b.localAnchorA); this.m_localAnchor2.SetV(b.localAnchorB); this.m_referenceAngle = b.referenceAngle; this.m_impulse.SetZero(); this.m_motorImpulse = 0; this.m_lowerAngle = b.lowerAngle; this.m_upperAngle = b.upperAngle; this.m_maxMotorTorque = b.maxMotorTorque; this.m_motorSpeed = b.motorSpeed; this.m_enableLimit = b.enableLimit; this.m_enableMotor = b.enableMotor; this.m_limitState = C.e_inactiveLimit }; P.prototype.InitVelocityConstraints = function(c) { var d = this.m_bodyA, f = this.m_bodyB, g, j = 0; g = d.m_xf.R; var n = this.m_localAnchor1.x - d.m_sweep.localCenter.x, q = this.m_localAnchor1.y - d.m_sweep.localCenter.y, j = g.col1.x * n + g.col2.x * q, q = g.col1.y * n + g.col2.y * q, n = j; g = f.m_xf.R; var l = this.m_localAnchor2.x - f.m_sweep.localCenter.x, r = this.m_localAnchor2.y - f.m_sweep.localCenter.y, j = g.col1.x * l + g.col2.x * r, r = g.col1.y * l + g.col2.y * r, l = j; g = d.m_invMass; var j = f.m_invMass, u = d.m_invI, s = f.m_invI; this.m_mass.col1.x = g + j + q * q * u + r * r * s; this.m_mass.col2.x = -q * n * u - r * l * s; this.m_mass.col3.x = -q * u - r * s; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = g + j + n * n * u + l * l * s; this.m_mass.col3.y = n * u + l * s; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = u + s; this.m_motorMass = 1 / (u + s); !1 == this.m_enableMotor && (this.m_motorImpulse = 0); if (this.m_enableLimit) { var y = f.m_sweep.a - d.m_sweep.a - this.m_referenceAngle; e.Abs(this.m_upperAngle - this.m_lowerAngle) < 2 * b.b2_angularSlop ? this.m_limitState = C.e_equalLimits : y <= this.m_lowerAngle ? (this.m_limitState != C.e_atLowerLimit && (this.m_impulse.z = 0), this.m_limitState = C.e_atLowerLimit) : y >= this.m_upperAngle ? (this.m_limitState != C.e_atUpperLimit && (this.m_impulse.z = 0), this.m_limitState = C.e_atUpperLimit) : (this.m_limitState = C.e_inactiveLimit, this.m_impulse.z = 0) } else this.m_limitState = C.e_inactiveLimit; c.warmStarting ? (this.m_impulse.x *= c.dtRatio, this.m_impulse.y *= c.dtRatio, this.m_motorImpulse *= c.dtRatio, c = this.m_impulse.x, y = this.m_impulse.y, d.m_linearVelocity.x -= g * c, d.m_linearVelocity.y -= g * y, d.m_angularVelocity -= u * (n * y - q * c + this.m_motorImpulse + this.m_impulse.z), f.m_linearVelocity.x += j * c, f.m_linearVelocity.y += j * y, f.m_angularVelocity += s * (l * y - r * c + this.m_motorImpulse + this.m_impulse.z)) : (this.m_impulse.SetZero(), this.m_motorImpulse = 0) }; P.prototype.SolveVelocityConstraints = function(b) { var c = this.m_bodyA, d = this.m_bodyB, f = 0, g = 0, j = 0, n = 0, l = 0, q = c.m_linearVelocity, u = c.m_angularVelocity, s = d.m_linearVelocity, y = d.m_angularVelocity, z = c.m_invMass, A = d.m_invMass, B = c.m_invI, E = d.m_invI; this.m_enableMotor && this.m_limitState != C.e_equalLimits && (g = this.m_motorMass * -(y - u - this.m_motorSpeed), j = this.m_motorImpulse, n = b.dt * this.m_maxMotorTorque, this.m_motorImpulse = e.Clamp(this.m_motorImpulse + g, -n, n), g = this.m_motorImpulse - j, u -= B * g, y += E * g); if (this.m_enableLimit && this.m_limitState != C.e_inactiveLimit) { b = c.m_xf.R; g = this.m_localAnchor1.x - c.m_sweep.localCenter.x; j = this.m_localAnchor1.y - c.m_sweep.localCenter.y; f = b.col1.x * g + b.col2.x * j; j = b.col1.y * g + b.col2.y * j; g = f; b = d.m_xf.R; n = this.m_localAnchor2.x - d.m_sweep.localCenter.x; l = this.m_localAnchor2.y - d.m_sweep.localCenter.y; f = b.col1.x * n + b.col2.x * l; l = b.col1.y * n + b.col2.y * l; n = f; b = s.x + -y * l - q.x - -u * j; var m = s.y + y * n - q.y - u * g; this.m_mass.Solve33(this.impulse3, -b, -m, -(y - u)); this.m_limitState == C.e_equalLimits ? this.m_impulse.Add(this.impulse3) : this.m_limitState == C.e_atLowerLimit ? (f = this.m_impulse.z + this.impulse3.z, 0 > f && (this.m_mass.Solve22(this.reduced, -b, -m), this.impulse3.x = this.reduced.x, this.impulse3.y = this.reduced.y, this.impulse3.z = -this.m_impulse.z, this.m_impulse.x += this.reduced.x, this.m_impulse.y += this.reduced.y, this.m_impulse.z = 0)) : this.m_limitState == C.e_atUpperLimit && (f = this.m_impulse.z + this.impulse3.z, 0 < f && (this.m_mass.Solve22(this.reduced, -b, -m), this.impulse3.x = this.reduced.x, this.impulse3.y = this.reduced.y, this.impulse3.z = -this.m_impulse.z, this.m_impulse.x += this.reduced.x, this.m_impulse.y += this.reduced.y, this.m_impulse.z = 0)); q.x -= z * this.impulse3.x; q.y -= z * this.impulse3.y; u -= B * (g * this.impulse3.y - j * this.impulse3.x + this.impulse3.z); s.x += A * this.impulse3.x; s.y += A * this.impulse3.y; y += E * (n * this.impulse3.y - l * this.impulse3.x + this.impulse3.z) } else b = c.m_xf.R, g = this.m_localAnchor1.x - c.m_sweep.localCenter.x, j = this.m_localAnchor1.y - c.m_sweep.localCenter.y, f = b.col1.x * g + b.col2.x * j, j = b.col1.y * g + b.col2.y * j, g = f, b = d.m_xf.R, n = this.m_localAnchor2.x - d.m_sweep.localCenter.x, l = this.m_localAnchor2.y - d.m_sweep.localCenter.y, f = b.col1.x * n + b.col2.x * l, l = b.col1.y * n + b.col2.y * l, n = f, this.m_mass.Solve22(this.impulse2, -(s.x + -y * l - q.x - -u * j), -(s.y + y * n - q.y - u * g)), this.m_impulse.x += this.impulse2.x, this.m_impulse.y += this.impulse2.y, q.x -= z * this.impulse2.x, q.y -= z * this.impulse2.y, u -= B * (g * this.impulse2.y - j * this.impulse2.x), s.x += A * this.impulse2.x, s.y += A * this.impulse2.y, y += E * (n * this.impulse2.y - l * this.impulse2.x); c.m_linearVelocity.SetV(q); c.m_angularVelocity = u; d.m_linearVelocity.SetV(s); d.m_angularVelocity = y }; P.prototype.SolvePositionConstraints = function() { var c = 0, d, f = this.m_bodyA, g = this.m_bodyB, j = 0, n = 0, q = 0, l = 0; if (this.m_enableLimit && this.m_limitState != C.e_inactiveLimit) { var c = g.m_sweep.a - f.m_sweep.a - this.m_referenceAngle, r = 0; this.m_limitState == C.e_equalLimits ? (c = e.Clamp(c - this.m_lowerAngle, -b.b2_maxAngularCorrection, b.b2_maxAngularCorrection), r = -this.m_motorMass * c, j = e.Abs(c)) : this.m_limitState == C.e_atLowerLimit ? (c -= this.m_lowerAngle, j = -c, c = e.Clamp(c + b.b2_angularSlop, -b.b2_maxAngularCorrection, 0), r = -this.m_motorMass * c) : this.m_limitState == C.e_atUpperLimit && (j = c -= this.m_upperAngle, c = e.Clamp(c - b.b2_angularSlop, 0, b.b2_maxAngularCorrection), r = -this.m_motorMass * c); f.m_sweep.a -= f.m_invI * r; g.m_sweep.a += g.m_invI * r; f.SynchronizeTransform(); g.SynchronizeTransform() } d = f.m_xf.R; r = this.m_localAnchor1.x - f.m_sweep.localCenter.x; c = this.m_localAnchor1.y - f.m_sweep.localCenter.y; n = d.col1.x * r + d.col2.x * c; c = d.col1.y * r + d.col2.y * c; r = n; d = g.m_xf.R; var u = this.m_localAnchor2.x - g.m_sweep.localCenter.x, s = this.m_localAnchor2.y - g.m_sweep.localCenter.y, n = d.col1.x * u + d.col2.x * s, s = d.col1.y * u + d.col2.y * s, u = n, q = g.m_sweep.c.x + u - f.m_sweep.c.x - r, l = g.m_sweep.c.y + s - f.m_sweep.c.y - c, y = q * q + l * l; d = Math.sqrt(y); var n = f.m_invMass, z = g.m_invMass, A = f.m_invI, B = g.m_invI, E = 10 * b.b2_linearSlop; y > E * E && (y = 1 / (n + z), q = y * -q, l = y * -l, f.m_sweep.c.x -= 0.5 * n * q, f.m_sweep.c.y -= 0.5 * n * l, g.m_sweep.c.x += 0.5 * z * q, g.m_sweep.c.y += 0.5 * z * l, q = g.m_sweep.c.x + u - f.m_sweep.c.x - r, l = g.m_sweep.c.y + s - f.m_sweep.c.y - c); this.K1.col1.x = n + z; this.K1.col2.x = 0; this.K1.col1.y = 0; this.K1.col2.y = n + z; this.K2.col1.x = A * c * c; this.K2.col2.x = -A * r * c; this.K2.col1.y = -A * r * c; this.K2.col2.y = A * r * r; this.K3.col1.x = B * s * s; this.K3.col2.x = -B * u * s; this.K3.col1.y = -B * u * s; this.K3.col2.y = B * u * u; this.K.SetM(this.K1); this.K.AddM(this.K2); this.K.AddM(this.K3); this.K.Solve(P.tImpulse, -q, -l); q = P.tImpulse.x; l = P.tImpulse.y; f.m_sweep.c.x -= f.m_invMass * q; f.m_sweep.c.y -= f.m_invMass * l; f.m_sweep.a -= f.m_invI * (r * l - c * q); g.m_sweep.c.x += g.m_invMass * q; g.m_sweep.c.y += g.m_invMass * l; g.m_sweep.a += g.m_invI * (u * l - s * q); f.SynchronizeTransform(); g.SynchronizeTransform(); return d <= b.b2_linearSlop && j <= b.b2_angularSlop }; Box2D.postDefs.push(function() { Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse = new f }); Box2D.inherit(S, Box2D.Dynamics.Joints.b2JointDef); S.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; S.b2RevoluteJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f }; S.prototype.b2RevoluteJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_revoluteJoint; this.localAnchorA.Set(0, 0); this.localAnchorB.Set(0, 0); this.motorSpeed = this.maxMotorTorque = this.upperAngle = this.lowerAngle = this.referenceAngle = 0; this.enableMotor = this.enableLimit = !1 }; S.prototype.Initialize = function(b, c, d) { this.bodyA = b; this.bodyB = c; this.localAnchorA = this.bodyA.GetLocalPoint(d); this.localAnchorB = this.bodyB.GetLocalPoint(d); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle() }; Box2D.inherit(Z, Box2D.Dynamics.Joints.b2Joint); Z.prototype.__super = Box2D.Dynamics.Joints.b2Joint.prototype; Z.b2WeldJoint = function() { Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this, arguments); this.m_localAnchorA = new f; this.m_localAnchorB = new f; this.m_impulse = new j; this.m_mass = new d }; Z.prototype.GetAnchorA = function() { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA) }; Z.prototype.GetAnchorB = function() { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB) }; Z.prototype.GetReactionForce = function(b) { void 0 === b && (b = 0); return new f(b * this.m_impulse.x, b * this.m_impulse.y) }; Z.prototype.GetReactionTorque = function(b) { void 0 === b && (b = 0); return b * this.m_impulse.z }; Z.prototype.b2WeldJoint = function(b) { this.__super.b2Joint.call(this, b); this.m_localAnchorA.SetV(b.localAnchorA); this.m_localAnchorB.SetV(b.localAnchorB); this.m_referenceAngle = b.referenceAngle; this.m_impulse.SetZero(); this.m_mass = new d }; Z.prototype.InitVelocityConstraints = function(b) { var c, d = 0, e = this.m_bodyA, f = this.m_bodyB; c = e.m_xf.R; var g = this.m_localAnchorA.x - e.m_sweep.localCenter.x, j = this.m_localAnchorA.y - e.m_sweep.localCenter.y, d = c.col1.x * g + c.col2.x * j, j = c.col1.y * g + c.col2.y * j, g = d; c = f.m_xf.R; var l = this.m_localAnchorB.x - f.m_sweep.localCenter.x, n = this.m_localAnchorB.y - f.m_sweep.localCenter.y, d = c.col1.x * l + c.col2.x * n, n = c.col1.y * l + c.col2.y * n, l = d; c = e.m_invMass; var d = f.m_invMass, q = e.m_invI, s = f.m_invI; this.m_mass.col1.x = c + d + j * j * q + n * n * s; this.m_mass.col2.x = -j * g * q - n * l * s; this.m_mass.col3.x = -j * q - n * s; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = c + d + g * g * q + l * l * s; this.m_mass.col3.y = g * q + l * s; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = q + s; b.warmStarting ? (this.m_impulse.x *= b.dtRatio, this.m_impulse.y *= b.dtRatio, this.m_impulse.z *= b.dtRatio, e.m_linearVelocity.x -= c * this.m_impulse.x, e.m_linearVelocity.y -= c * this.m_impulse.y, e.m_angularVelocity -= q * (g * this.m_impulse.y - j * this.m_impulse.x + this.m_impulse.z), f.m_linearVelocity.x += d * this.m_impulse.x, f.m_linearVelocity.y += d * this.m_impulse.y, f.m_angularVelocity += s * (l * this.m_impulse.y - n * this.m_impulse.x + this.m_impulse.z)) : this.m_impulse.SetZero() }; Z.prototype.SolveVelocityConstraints = function() { var b, c = 0, d = this.m_bodyA, e = this.m_bodyB, f = d.m_linearVelocity, g = d.m_angularVelocity, n = e.m_linearVelocity, l = e.m_angularVelocity, q = d.m_invMass, u = e.m_invMass, s = d.m_invI, y = e.m_invI; b = d.m_xf.R; var z = this.m_localAnchorA.x - d.m_sweep.localCenter.x, A = this.m_localAnchorA.y - d.m_sweep.localCenter.y, c = b.col1.x * z + b.col2.x * A, A = b.col1.y * z + b.col2.y * A, z = c; b = e.m_xf.R; var B = this.m_localAnchorB.x - e.m_sweep.localCenter.x, C = this.m_localAnchorB.y - e.m_sweep.localCenter.y, c = b.col1.x * B + b.col2.x * C, C = b.col1.y * B + b.col2.y * C, B = c; b = n.x - l * C - f.x + g * A; var c = n.y + l * B - f.y - g * z, m = l - g, E = new j; this.m_mass.Solve33(E, -b, -c, -m); this.m_impulse.Add(E); f.x -= q * E.x; f.y -= q * E.y; g -= s * (z * E.y - A * E.x + E.z); n.x += u * E.x; n.y += u * E.y; l += y * (B * E.y - C * E.x + E.z); d.m_angularVelocity = g; e.m_angularVelocity = l }; Z.prototype.SolvePositionConstraints = function() { var c, d = 0, f = this.m_bodyA, g = this.m_bodyB; c = f.m_xf.R; var n = this.m_localAnchorA.x - f.m_sweep.localCenter.x, q = this.m_localAnchorA.y - f.m_sweep.localCenter.y, d = c.col1.x * n + c.col2.x * q, q = c.col1.y * n + c.col2.y * q, n = d; c = g.m_xf.R; var u = this.m_localAnchorB.x - g.m_sweep.localCenter.x, l = this.m_localAnchorB.y - g.m_sweep.localCenter.y, d = c.col1.x * u + c.col2.x * l, l = c.col1.y * u + c.col2.y * l, u = d; c = f.m_invMass; var d = g.m_invMass, r = f.m_invI, y = g.m_invI, s = g.m_sweep.c.x + u - f.m_sweep.c.x - n, z = g.m_sweep.c.y + l - f.m_sweep.c.y - q, A = g.m_sweep.a - f.m_sweep.a - this.m_referenceAngle, B = 10 * b.b2_linearSlop, C = Math.sqrt(s * s + z * z), E = e.Abs(A); C > B && (r *= 1, y *= 1); this.m_mass.col1.x = c + d + q * q * r + l * l * y; this.m_mass.col2.x = -q * n * r - l * u * y; this.m_mass.col3.x = -q * r - l * y; this.m_mass.col1.y = this.m_mass.col2.x; this.m_mass.col2.y = c + d + n * n * r + u * u * y; this.m_mass.col3.y = n * r + u * y; this.m_mass.col1.z = this.m_mass.col3.x; this.m_mass.col2.z = this.m_mass.col3.y; this.m_mass.col3.z = r + y; B = new j; this.m_mass.Solve33(B, -s, -z, -A); f.m_sweep.c.x -= c * B.x; f.m_sweep.c.y -= c * B.y; f.m_sweep.a -= r * (n * B.y - q * B.x + B.z); g.m_sweep.c.x += d * B.x; g.m_sweep.c.y += d * B.y; g.m_sweep.a += y * (u * B.y - l * B.x + B.z); f.SynchronizeTransform(); g.SynchronizeTransform(); return C <= b.b2_linearSlop && E <= b.b2_angularSlop }; Box2D.inherit(U, Box2D.Dynamics.Joints.b2JointDef); U.prototype.__super = Box2D.Dynamics.Joints.b2JointDef.prototype; U.b2WeldJointDef = function() { Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this, arguments); this.localAnchorA = new f; this.localAnchorB = new f }; U.prototype.b2WeldJointDef = function() { this.__super.b2JointDef.call(this); this.type = C.e_weldJoint; this.referenceAngle = 0 }; U.prototype.Initialize = function(b, c, d) { this.bodyA = b; this.bodyB = c; this.localAnchorA.SetV(this.bodyA.GetLocalPoint(d)); this.localAnchorB.SetV(this.bodyB.GetLocalPoint(d)); this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle() } })(); (function() { var b = Box2D.Dynamics.b2DebugDraw; b.b2DebugDraw = function() { this.m_xformScale = this.m_fillAlpha = this.m_alpha = this.m_lineThickness = this.m_drawScale = 1; var b = this; this.m_sprite = { graphics: { clear: function() { b.m_ctx.clearRect(0, 0, b.m_ctx.canvas.width, b.m_ctx.canvas.height) } } } }; b.prototype._color = function(b, d) { return "rgba(" + ((b & 16711680) >> 16) + "," + ((b & 65280) >> 8) + "," + (b & 255) + "," + d + ")" }; b.prototype.b2DebugDraw = function() { this.m_drawFlags = 0 }; b.prototype.SetFlags = function(b) { void 0 === b && (b = 0); this.m_drawFlags = b }; b.prototype.GetFlags = function() { return this.m_drawFlags }; b.prototype.AppendFlags = function(b) { void 0 === b && (b = 0); this.m_drawFlags |= b }; b.prototype.ClearFlags = function(b) { void 0 === b && (b = 0); this.m_drawFlags &= ~b }; b.prototype.SetSprite = function(b) { this.m_ctx = b }; b.prototype.GetSprite = function() { return this.m_ctx }; b.prototype.SetDrawScale = function(b) { void 0 === b && (b = 0); this.m_drawScale = b }; b.prototype.GetDrawScale = function() { return this.m_drawScale }; b.prototype.SetLineThickness = function(b) { void 0 === b && (b = 0); this.m_lineThickness = b; this.m_ctx.strokeWidth = b }; b.prototype.GetLineThickness = function() { return this.m_lineThickness }; b.prototype.SetAlpha = function(b) { void 0 === b && (b = 0); this.m_alpha = b }; b.prototype.GetAlpha = function() { return this.m_alpha }; b.prototype.SetFillAlpha = function(b) { void 0 === b && (b = 0); this.m_fillAlpha = b }; b.prototype.GetFillAlpha = function() { return this.m_fillAlpha }; b.prototype.SetXFormScale = function(b) { void 0 === b && (b = 0); this.m_xformScale = b }; b.prototype.GetXFormScale = function() { return this.m_xformScale }; b.prototype.DrawPolygon = function(b, d, e) { if (d) { var f = this.m_ctx, j = this.m_drawScale; f.beginPath(); f.strokeStyle = this._color(e.color, this.m_alpha); f.moveTo(b[0].x * j, b[0].y * j); for (e = 1; e < d; e++) f.lineTo(b[e].x * j, b[e].y * j); f.lineTo(b[0].x * j, b[0].y * j); f.closePath(); f.stroke() } }; b.prototype.DrawSolidPolygon = function(b, d, e) { if (d) { var f = this.m_ctx, j = this.m_drawScale; f.beginPath(); f.strokeStyle = this._color(e.color, this.m_alpha); f.fillStyle = this._color(e.color, this.m_fillAlpha); f.moveTo(b[0].x * j, b[0].y * j); for (e = 1; e < d; e++) f.lineTo(b[e].x * j, b[e].y * j); f.lineTo(b[0].x * j, b[0].y * j); f.closePath(); f.fill(); f.stroke() } }; b.prototype.DrawCircle = function(b, d, e) { if (d) { var f = this.m_ctx, j = this.m_drawScale; f.beginPath(); f.strokeStyle = this._color(e.color, this.m_alpha); f.arc(b.x * j, b.y * j, d * j, 0, 2 * Math.PI, !0); f.closePath(); f.stroke() } }; b.prototype.DrawSolidCircle = function(b, d, e, f) { if (d) { var j = this.m_ctx, q = this.m_drawScale, n = b.x * q, g = b.y * q; j.moveTo(0, 0); j.beginPath(); j.strokeStyle = this._color(f.color, this.m_alpha); j.fillStyle = this._color(f.color, this.m_fillAlpha); j.arc(n, g, d * q, 0, 2 * Math.PI, !0); j.moveTo(n, g); j.lineTo((b.x + e.x * d) * q, (b.y + e.y * d) * q); j.closePath(); j.fill(); j.stroke() } }; b.prototype.DrawSegment = function(b, d, e) { var f = this.m_ctx, j = this.m_drawScale; f.strokeStyle = this._color(e.color, this.m_alpha); f.beginPath(); f.moveTo(b.x * j, b.y * j); f.lineTo(d.x * j, d.y * j); f.closePath(); f.stroke() }; b.prototype.DrawTransform = function(b) { var d = this.m_ctx, e = this.m_drawScale; d.beginPath(); d.strokeStyle = this._color(16711680, this.m_alpha); d.moveTo(b.position.x * e, b.position.y * e); d.lineTo((b.position.x + this.m_xformScale * b.R.col1.x) * e, (b.position.y + this.m_xformScale * b.R.col1.y) * e); d.strokeStyle = this._color(65280, this.m_alpha); d.moveTo(b.position.x * e, b.position.y * e); d.lineTo((b.position.x + this.m_xformScale * b.R.col2.x) * e, (b.position.y + this.m_xformScale * b.R.col2.y) * e); d.closePath(); d.stroke() } })(); var i; for (i = 0; i < Box2D.postDefs.length; ++i) Box2D.postDefs[i](); delete Box2D.postDefs; "undefined" != typeof global && (global.Box2D = Box2D); ig.baked = !0; ig.module("plugins.box2d.lib").defines(function() {}); ig.baked = !0; ig.module("plugins.box2d.game").requires("plugins.box2d.lib", "impact.game").defines(function() { ig.Box2DGame = ig.Game.extend({ collisionRects: [], debugCollisionRects: !1, worldVelocityIterations: 6, worldPositionIterations: 6, updateTimestep: 1 / 60, updateTimestepAccumulator: 0, updateTimestepAccumulatorRatio: 0, lastUpdateTime: -1, nWorldSteps: 0, bodyDestroyQueue: [], defaultTileSegmentsDef: {}, defaultTileVerticesDef: {}, loadLevel: function(b) { this.collisionMap = ig.CollisionMap.staticNoCollision; for (var c = 0; c < b.layer.length; c++) { var d = b.layer[c]; "collision" == d.name && (this.collisionMap = new ig.CollisionMap(d.tilesize, d.data)) } this.mergedShape = this.mergeRectangles(this.collisionMap); ig.world = this.createWorldFromCollisionMap(this.collisionMap, this.mergedShape); this.setupContactListener(); this.parent(b) }, createWorldFromMap: function(b, c, d, e) { var f = new Box2D.Collision.b2AABB; f.lowerBound.Set(0, 0); f.upperBound.Set((c + 1) * e * Box2D.SCALE, (d + 1) * e * Box2D.SCALE); f = new Box2D.Common.Math.b2Vec2(0, ig.game.gravity * Box2D.SCALE); world = new Box2D.Dynamics.b2World(f, !0); b = ig.copy(b); this.collisionRects = []; for (f = 0; f < d; f++) for (var j = 0; j < c; j++) if (b[f][j]) { var q = this._extractRectFromMap(b, c, d, j, f); this.collisionRects.push(q) } for (c = 0; c < this.collisionRects.length; c++) d = this.collisionRects[c], b = new Box2D.Dynamics.b2BodyDef, b.position.Set(d.x * e * Box2D.SCALE + d.width * e / 2 * Box2D.SCALE, d.y * e * Box2D.SCALE + d.height * e / 2 * Box2D.SCALE), b = world.CreateBody(b), f = new Box2D.Collision.Shapes.b2PolygonShape, f.SetAsBox(d.width * e / 2 * Box2D.SCALE, d.height * e / 2 * Box2D.SCALE), b.CreateFixture2(f); return world }, _extractRectFromMap: function(b, c, d, e, f) { for (var j = { x: e, y: f, width: 1, height: 1 }, q = e + 1; q < c && b[f][q]; q++) j.width++, b[f][q] = 0; for (c = f + 1; c < d; c++) { f = 0; for (q = e; q < e + j.width && b[c][q]; q++) f++; if (f == j.width) { j.height++; for (q = e; q < e + j.width; q++) b[c][q] = 0 } else break } return j }, update: function() { if (!ig.game.box2dPaused && ig.world) { var b = ig.system.clock.delta() - this.lastUpdateTime; this.lastUpdateTime = ig.system.clock.delta(); this.updateTimestepAccumulator += b; this.nWorldSteps = Math.floor(this.updateTimestepAccumulator / this.updateTimestep); 0 < this.nWorldSteps && (this.updateTimestepAccumulator -= this.nWorldSteps * this.updateTimestep); this.updateTimestepAccumulatorRatio = this.updateTimestepAccumulator / this.updateTimestep; for (var b = Math.min(this.nWorldSteps, 5), c = 0; c < b; c++) { this.resetSmoothStates(); ig.world.Step(this.updateTimestep, this.worldVelocityIterations, this.worldPositionIterations); for (var d = ig.world.GetBodyList(); d; d = d.m_next) if (d.IsAwake()) { var e = d.GetFixtureList(); if (!e || !e.IsSensor()) { var e = 0.6 > Math.abs(d.GetAngularVelocity()), f = 0.6 > Math.abs(d.GetLinearVelocity().Length()); e && f ? 30 < d.slowTime ? (d.slowTime = 0, d.SetAwake(!1)) : d.slowTime += 1 : d.slowTime = 0 } } } ig.world.ClearForces(); this.smoothStates() } this.parent(); if (0 < this.bodyDestroyQueue.length) { for (c = 0; c < this.bodyDestroyQueue.length; c++) ig.world.DestroyBody(this.bodyDestroyQueue[c]); this.bodyDestroyQueue = [] } }, smoothStates: function() { for (var b = 1 - this.updateTimestepAccumulatorRatio, c = 0; c < this.entities.length; c++) { var d = this.entities[c]; null != d.body && d.dynamicType != Box2D.Dynamics.b2Body.b2_staticBody && (d.pos.x = this.updateTimestepAccumulatorRatio * d.body.GetPosition().x + b * d.previousBodyPosition.x, d.pos.y = this.updateTimestepAccumulatorRatio * d.body.GetPosition().y + b * d.previousBodyPosition.y, d.angle = this.updateTimestepAccumulatorRatio * d.body.GetAngle() + b * d.previousBodyAngle, d.currentAnim && (d.currentAnim.update(), d.currentAnim.angle = d.angle)) } }, resetSmoothStates: function() { for (var b = 0; b < this.entities.length; b++) { var c = this.entities[b]; null != c.body && c.dynamicType != Box2D.Dynamics.b2Body.b2_staticBody && (c.pos.x = c.body.GetPosition().x, c.previousBodyPosition.x = c.pos.x, c.pos.y = c.body.GetPosition().y, c.previousBodyPosition.y = c.pos.y, c.angle = c.body.GetAngle(), c.previousBodyAngle = c.body.GetAngle(), c.currentAnim && (c.currentAnim.update(), c.currentAnim.angle = c.angle)) } }, draw: function() { this.parent(); if (this.debugCollisionRects) for (var b = this.collisionMap.tilesize, c = 0; c < this.collisionRects.length; c++) { var d = this.collisionRects[c]; ig.system.context.strokeStyle = "#00ff00"; ig.system.context.strokeRect(ig.system.getDrawPos(d.x * b - this.screen.x), ig.system.getDrawPos(d.y * b - this.screen.y), ig.system.getDrawPos(d.width * b), ig.system.getDrawPos(d.height * b)) } }, queueDestroyBody: function(b) { this.bodyDestroyQueue.push(b) }, mergeRectangles: function(b) { if (void 0 != b.data) { for (var c = ig.copy(b.data), d = [], e = 0; e < c.length; e++) { void 0 == d[e] && (d[e] = []); for (var f = 0; f < c[0].length; f++) d[e].push(0) } c = this._shapesFromCollisionMap(b); b = []; f = []; for (e = 0; e < c.length; e++) 1 == c[e].id ? (f.push(c[e]), d[c[e].tile.y][c[e].tile.x] = f[f.length - 1]) : b.push(c[e]); for (e = f.length - 1; 0 <= e; e--) 1 == f[e].id && (f[e].neighbours = this.checkNeighbour(d, f[e].tile.x, f[e].tile.y)); d = this.linkSquares(f, d); return b.concat(d) } }, sideAbleCheck: function(b, c, d, e) { return b ? b[d] ? b[d][c] ? b[d][c].neighbours ? -1 < b[d][c].neighbours.indexOf(e) ? !0 : !1 : !1 : !1 : !1 : !1 }, linkSquares: function(b, c) { for (var d = [], e = [], f = 0; f < b.length; f++) { var j = b[f], q = j.tile.x, n = j.tile.y; if (!(-1 < d.indexOf(j))) if (d.push(j), -1 < j.neighbours.indexOf("right")) { for (var g = 1; !0 == this.sideAbleCheck(c, j.tile.x + g, j.tile.y, "right");) j.tile.x + g < q && (q = j.tile.x + g), d.push(c[j.tile.y][j.tile.x + g]), g++; c[j.tile.y][q].settings.size.x *= g + 1; for (var y = c[j.tile.y][q].settings.vertices, A = 0; A < y.length; A++) y[A].x *= g + 1; d.push(c[j.tile.y][j.tile.x + g + 1]); e.push(c[j.tile.y][q]) } else if (-1 < j.neighbours.indexOf("down") && -1 == j.neighbours.indexOf("right") && -1 == j.neighbours.indexOf("left")) { j.tile.y + g < n && (n = j.tile.y + g); y = 0; for (q = 1; !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "down") && !1 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "right") && !1 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "left");) y = 1, d.push(c[j.tile.y + q][j.tile.x]), q++; !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "up") && !1 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "right") && !1 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "left") ? y = 1 : !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "up") && !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "right") ? (d.splice(d.indexOf(c[j.tile.y + q][j.tile.x]), 1), q--) : !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "up") && !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y + q, "left") && (d.splice(d.indexOf(c[j.tile.y + q][j.tile.x]), 1), q--); if (1 == y) { c[n][j.tile.x].settings.size.y *= q + 1; y = c[n][j.tile.x].settings.vertices; for (A = 0; A < y.length; A++) y[A].y *= q + 1; c[j.tile.y + q] && d.push(c[j.tile.y + q][j.tile.x]) } e.push(c[n][j.tile.x]) } else if (!(-1 < j.neighbours.indexOf("left"))) if (-1 < j.neighbours.indexOf("up")) { if (!0 == this.sideAbleCheck(c, j.tile.x, j.tile.y - 1, "down") && (!0 == this.sideAbleCheck(c, j.tile.x, j.tile.y - 1, "right") || !0 == this.sideAbleCheck(c, j.tile.x, j.tile.y - 1, "left"))) d.push(c[j.tile.y][j.tile.x]), e.push(c[j.tile.y][j.tile.x]) } else d.push(c[j.tile.y][j.tile.x]), e.push(c[j.tile.y][j.tile.x]) } return e }, getNeighbourTiles: function(b, c, d, e) { switch (e) { case "left": return [{ x: c - 1, y: d }]; case "right": return [{ x: c + 1, y: d }]; case "up": return [{ x: c, y: d - 1 }]; case "down": return [{ x: c, y: d + 1 }]; case "topL": return [{ x: c, y: d - 1 }, { x: c - 1, y: d }, { x: c - 1, y: d - 1 }]; case "topR": return [{ x: c, y: d - 1 }, { x: c + 1, y: d }, { x: c + 1, y: d - 1 }]; case "bottomL": return [{ x: c, y: d + 1 }, { x: c - 1, y: d }, { x: c - 1, y: d + 1 }]; case "bottomR": return [{ x: c, y: d + 1 }, { x: c + 1, y: d }, { x: c + 1, y: d + 1 }] } }, checkNeighbour: function(b, c, d) { var e = []; 0 != this.checkArr(b, c - 1, d) && e.push("left"); 0 != this.checkArr(b, c, d + 1) && e.push("down"); 0 != this.checkArr(b, c + 1, d) && e.push("right"); 0 != this.checkArr(b, c, d - 1) && e.push("up"); return e }, checkArr: function(b, c, d) { return void 0 == b[d] ? 0 : void 0 == b[d][c] ? 0 : b[d][c] }, createWorldFromCollisionMap: function(b, c) { var d = new Box2D.Common.Math.b2Vec2(0, 0), d = new Box2D.Common.Math.b2Vec2(0, ig.game.gravity * Box2D.SCALE); world = new Box2D.Dynamics.b2World(d, !0); for (var d = void 0 != c ? c : this._shapesFromCollisionMap(this.collisionMap), e = 0; e < d.length; e++) { var f = d[e], j = f.settings.size.x, q = f.settings.size.y, n = f.settings.vertices, g = new Box2D.Dynamics.b2BodyDef; g.position.Set(f.x * Box2D.SCALE + j / 2 * Box2D.SCALE, f.y * Box2D.SCALE + q / 2 * Box2D.SCALE); j = world.CreateBody(g); f = new Box2D.Collision.Shapes.b2PolygonShape; f.SetAsArray(n, n.length); j.CreateFixture2(f) } return world }, setupContactListener: function() { var b = function(b, c, f) { var j = c.GetFixtureA().GetBody().entity, q = c.GetFixtureB().GetBody().entity; if (j && q) j[b](q, c, f), q[b](j, c, f); else if (j && !q) j[b](null, c, f); else if (q && !j) q[b](null, c, f) }, c = new Box2D.Dynamics.b2ContactListener; c.BeginContact = function(c) { b("beginContact", c) }; c.EndContact = function(c) { b("endContact", c) }; c.PostSolve = function(c, e) { b("postSolve", c, e) }; c.PreSolve = function(c, e) { b("preSolve", c, e) }; ig.world.SetContactListener(c) }, _shapesFromCollisionMap: function(b) { var c = []; if (b instanceof ig.CollisionMap) { var d = ig.copy(b.data), e = b.tilesize, f = b.width, j = b.height, q, n, g, y, A, z, B, C, G, I; for (z = 0; z < j; z++) for (A = 0; A < f; A++) { I = this._shapeFromTile(b, A, z); G = { id: b.data[z][A], ix: A, iy: z, x: A * e, y: z * e, width: e, height: e, shape: I }; if (0 < I.vertices.length) { n = []; q = I.vertices; g = I.segments; B = 0; for (C = g.length; B < C; B++) { y = g[B]; var u = q[y.a], L = G.width / 20, E = G.height / 20; n[y.a] = { x: u.x.map(0, 1, -L, L), y: u.y.map(0, 1, -E, E) } } I.vertices = n; I.vertices[I.vertices.length - 1].x === I.vertices[0].x && I.vertices[I.vertices.length - 1].y === I.vertices[0].y && I.vertices.pop(); q = { id: G.id, settings: { size: { x: G.width, y: G.height }, vertices: ig.copy(I.vertices) }, x: G.x, y: G.y, tile: { x: A, y: z } }; c.push(q) } d[z][A] = G } } return c }, _shapeFromTile: function(b, c, d) { var e; e = b.data[d][c]; b = this._verticesFromTile(b, c, d); var f; if (b) if (this.defaultTileSegmentsDef[e]) f = this.defaultTileSegmentsDef[e]; else { this.defaultTileSegmentsDef[e] = f = []; e = 0; for (c = b.length; e < c; e++) { var j = b[e]; d = e === c - 1 ? 0 : e + 1; var q = b[d], n = q.x - j.x, j = q.y - j.y, q = Math.sqrt(n * n + j * j); f.push({ a: e, b: d, normal: { x: j / q, y: -n / q } }) } } return { vertices: b, segments: f || [] } }, _verticesFromTile: function(b, c, d) { c = b.data[d][c]; if (this.defaultTileVerticesDef[c]) d = this.defaultTileVerticesDef[c]; else if (1 === c) d = [{ x: 0, y: 0 }, { x: 1, y: 0 }, { x: 1, y: 1 }, { x: 0, y: 1 }]; else { d = []; if (b = b.tiledef[c]) { var e = d[0] = { x: b[0], y: b[1] }, f = d[1] = { x: b[2], y: b[3] }; b = e.x; var e = e.y, j = f.x, f = f.y, q = j - b, n = f - e, g = d[2] = { x: 0 > n ? 1 : 0, y: 0 < q ? 1 : 0 }, y = g.x, g = g.y, A; A = !1; if (1 > Math.abs(q) && 1 > Math.abs(n)) { var q = _utv2.pointQuadrant(b, e, 0.5, 0.5), n = _utv2.pointQuadrant(j, f, 0.5, 0.5), z = _utv2.pointQuadrant(y, g, 0.5, 0.5); !(q & z) && !(n & z) && (A = !0) }!0 === A ? (y !== g ? (A = y, n = g, 1 == y ? (g = 1, q = 0) : (g = 0, q = 1)) : (q = y, n = 1 == y ? A = 0 : A = 1), d[3] = { x: A, y: g }, d[4] = { x: q, y: n }) : (y !== g ? (A = y, n = g, 1 == y ? (g = Math.max(e, f), q = Math.min(b, j)) : (g = Math.min(e, f), q = Math.max(b, j))) : (q = y, 1 == y ? (A = Math.min(b, j), n = Math.min(e, f)) : (A = Math.max(b, j), n = Math.max(e, f))), A === b && g === e || A === j && g === f ? q === b && n === e || q === j && n === f || (d[3] = { x: q, y: n }) : d[3] = { x: A, y: g }); d = this._pointsToConvexHull(d) } this.defaultTileVerticesDef[c] = d } return d }, _pointsToConvexHull: function(b) { if (3 > b.length) return b; var c, d, e = 0, f = b[e], j; c = 1; for (d = b.length; c < d; c++) j = b[c], j.y === f.y ? j.x < f.x && (e = c, f = j) : j.y < f.y && (e = c, f = j); var q = [], n; c = 0; for (d = b.length; c < d; c++) c !== e && (j = b[c], n = { x: j.x, y: j.y }, n.angle = Math.atan((j.y - f.y) / (j.x - f.x)), 0 > n.angle && (n.angle += Math.PI), n.distance = (j.x - f.x) * (j.x - f.x) + (j.y - f.y) * (j.y - f.y), n.index = c, q.push(n)); q.sort(function(b, c) { return b.angle < c.angle ? -1 : b.angle > c.angle ? 1 : b.distance < c.distance ? -1 : b.distance > c.distance ? 1 : 0 }); q.unshift(q[q.length - 1], { x: f.x, y: f.y, index: e }); e = 2; c = 3; for (d = b.length; c <= d; c++) { for (; 0 >= this._pointsCW(q[e - 1], q[e], q[c]);) e--; e++; f = q[c]; q[c] = q[e]; q[e] = f } d = []; for (c = 0; c <= e; c++) d[c] = b[q[c].index]; return d }, _pointsCW: function(b, c, d) { return (c.x - b.x) * (d.y - b.y) - (c.y - b.y) * (d.x - b.x) } }); Box2D.Common.b2Settings.b2_maxTranslation = 10; Box2D.Common.b2Settings.b2_maxTranslationSquared = 100; Box2D.Common.b2Settings.b2_velocityThreshold = 1 }); ig.baked = !0; ig.module("plugins.camera").requires("impact.entity").defines(function() { Camera = ig.Class.extend({ trap: { pos: { x: 0, y: 0 }, size: { x: 16, y: 16 } }, max: { x: 0, y: 0 }, offset: { x: 0, y: 0 }, pos: { x: 0, y: 0 }, damping: 5, lookAhead: { x: 0, y: 0 }, currentLookAhead: { x: 0, y: 0 }, debug: !0, init: function(b, c, d) { this.offset.x = b; this.offset.y = c; this.damping = d ? d : this.damping }, set: function(b) { this.pos.x = b.pos.x - this.offset.x; this.pos.y = b.pos.y - this.offset.y; this.trap.pos.x = b.pos.x - this.trap.size.x / 2; this.trap.pos.y = b.pos.y - this.trap.size.y }, follow: function(b) { isNaN(b.pos.x) && (b.pos.x = 0); isNaN(b.pos.y) && (b.pos.y = 0); isNaN(b.size.x) && (b.size.x = 0); isNaN(b.size.y) && (b.size.y = 0); this.pos.x = this.move("x", b.pos.x, b.size.x); this.pos.y = this.move("y", b.pos.y, b.size.y); if (isNaN(this.pos.x) || isNaN(this.pos.y)) console.log(this.pos.x + " | " + this.trap.pos.x + " | " + this.offset.x + " | " + this.currentLookAhead.x), this.pos.x = 10, this.pos.y = 10; ig.game.screen.x = this.pos.x; ig.game.screen.y = this.pos.y }, move: function(b, c, d) { isNaN(c) && (c = 10); isNaN(d) && (d = 0); isNaN(this.currentLookAhead[b]) && (this.currentLookAhead[b] = 0); return !isNaN(c) && !isNaN(d) ? (c < this.trap.pos[b] ? (this.trap.pos[b] = c, this.currentLookAhead[b] = this.lookAhead[b]) : c + d > this.trap.pos[b] + this.trap.size[b] && (this.trap.pos[b] = c + d - this.trap.size[b], this.currentLookAhead[b] = -this.lookAhead[b]), (this.pos[b] - (this.pos[b] - this.trap.pos[b] + this.offset[b] + this.currentLookAhead[b]) * ig.system.tick * this.damping).limit(10, this.max[b])) : 0 }, draw: function() { this.debug && (ig.system.context.fillStyle = "rgba(255,0,255,0)", ig.system.context.fillRect((this.trap.pos.x - this.pos.x) * ig.system.scale, (this.trap.pos.y - this.pos.y) * ig.system.scale, this.trap.size.x * ig.system.scale, this.trap.size.y * ig.system.scale)) } }) }); ig.baked = !0; ig.module("plugins.curve-level").defines(function() { CurveLevel = ig.Class.extend({ level1: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 329.41535956539553, y: 450.3066278710067 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 329.41535956539553, y: 450.3066278710067 }, p3: { x: 453.41013909589236, y: 421.3015526205514 }, p1: { x: 368.7141543019781, y: 478.2609525613615 }, p2: { x: 412.8793066087622, y: 478.3967932987995 } }, { p0: { x: 453.41013909589236, y: 421.3015526205514 }, p3: { x: 558.4760603353126, y: 322.209912229989 }, p1: { x: 473.849416913595, y: 381.92083807727204 }, p2: { x: 508.8505807536656, y: 327.7691701266621 } }, { p0: { x: 558.4760603353126, y: 322.209912229989 }, p3: { x: 699.7876476687082, y: 390.8803279550112 }, p1: { x: 627.3970673253797, y: 318.1600882955798 }, p2: { x: 636.6779839175908, y: 365.48778052241556 } }, { p0: { x: 699.7876476687082, y: 390.8803279550112 }, p3: { x: 812.3454038997211, y: 356.5236768802228 }, p1: { x: 747.6100278551529, y: 402.65181058495807 }, p2: { x: 788.6128133704738, y: 388.3899721448468 } }, { p0: { x: 812.3454038997211, y: 356.5236768802228 }, p3: { x: 873.2924791086352, y: 296.57938718662956 }, p1: { x: 838.5292479108635, y: 329.5598885793872 }, p2: { x: 854.5738161559888, y: 306.3844011142061 } }, { p0: { x: 873.2924791086352, y: 296.57938718662956 }, p3: { x: 979.3649025069639, y: 295.6880222841225 }, p1: { x: 919.6434540389972, y: 294.79665738161555 }, p2: { x: 950.841225626741, y: 296.8022284122562 } }, { p0: { x: 979.3649025069639, y: 295.6880222841225 }, p3: { x: 1005.6601671309197, y: 295.91086350974945 }, p1: { x: 977.136490250696, y: 340.47910863509776 }, p2: { x: 1006.5515320334267, y: 341.37047353760465 } }, { p0: { x: 1005.6601671309197, y: 295.91086350974945 }, p3: { x: 1133.9610027855158, y: 164.88022284122567 }, p1: { x: 1093.0139275766019, y: 299.4763231197771 }, p2: { x: 1110.7855153203345, y: 276.3008356545963 } }, { p0: { x: 1133.9610027855158, y: 164.88022284122567 }, p3: { x: 1217.1922005571032, y: 187.16434540389972 }, p1: { x: 1151.2869080779938, y: 72.40111420612811 }, p2: { x: 1193.2367688022282, y: 36.4122562674093 } }, { p0: { x: 1217.1922005571032, y: 187.16434540389972 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level2: [ [{ p0: { x: -23.821552586704087, y: 142.16290068008564 }, p3: { x: 19.836292617491203, y: 214.72321205065722 }, p1: { x: 8.869775868086975, y: 102.41232393474556 }, p2: { x: 8.764781723521672, y: 159.831891999248 } }, { p0: { x: 19.836292617491203, y: 214.72321205065722 }, p3: { x: 112.00343154772487, y: 277.92668513487433 }, p1: { x: 31.84252088733537, y: 266.59912420679825 }, p2: { x: 41.167443903902495, y: 276.181489687791 } }, { p0: { x: 112.00343154772487, y: 277.92668513487433 }, p3: { x: 258.7727637885207, y: 314.83856305726613 }, p1: { x: 196.12543742161773, y: 278.8960075274436 }, p2: { x: 239.97571308819042, y: 269.1599084584772 } }, { p0: { x: 258.7727637885207, y: 314.83856305726613 }, p3: { x: 363.0021185953792, y: 281.6905589589427 }, p1: { x: 289.5748031496063, y: 367.83179954854637 }, p2: { x: 327.17439850220063, y: 363.5965906946196 } }, { p0: { x: 363.0021185953792, y: 281.6905589589427 }, p3: { x: 464.3735810679646, y: 301.2360468364273 }, p1: { x: 396.9422807233358, y: 200.3526157863776 }, p2: { x: 438.6542601059616, y: 202.0948187585414 } }, { p0: { x: 464.3735810679646, y: 301.2360468364273 }, p3: { x: 576.3568094962696, y: 352.88766603196814 }, p1: { x: 496.4461156253062, y: 403.12997231279434 }, p2: { x: 542.2938225444176, y: 404.63880013142295 } }, { p0: { x: 576.3568094962696, y: 352.88766603196814 }, p3: { x: 682.4617134556745, y: 381.41336556142005 }, p1: { x: 612.1361342051312, y: 303.0530014967615 }, p2: { x: 650.1639443796512, y: 307.90412272291474 } }, { p0: { x: 682.4617134556745, y: 381.41336556142005 }, p3: { x: 790.9170133171427, y: 388.23829057924104 }, p1: { x: 722.8257781142343, y: 456.0027360569653 }, p2: { x: 755.5385670670198, y: 455.1238161846224 } }, { p0: { x: 790.9170133171427, y: 388.23829057924104 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 814.5700720712758, y: 344.68794924460605 }, p2: { x: 848.0935331833372, y: 295.8419542824864 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1014.558005752637, y: 358.77660594439106 }, p1: { x: 974.0594439117931, y: 398.3547459252156 }, p2: { x: 1032.0460210930012, y: 399.275167785235 } }, { p0: { x: 1014.558005752637, y: 358.77660594439106 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level3: [ [{ p0: { x: -23.821552586704087, y: 142.16290068008564 }, p3: { x: 19.836292617491203, y: 212.79936435526642 }, p1: { x: 8.869775868086975, y: 102.41232393474556 }, p2: { x: 8.764781723521672, y: 159.831891999248 } }, { p0: { x: 19.836292617491203, y: 212.79936435526642 }, p3: { x: 80.7090883070729, y: 277.92668513487433 }, p1: { x: 31.84252088733537, y: 266.59912420679825 }, p2: { x: 41.167443903902495, y: 276.181489687791 } }, { p0: { x: 80.7090883070729, y: 277.92668513487433 }, p3: { x: 260.7700457058332, y: 308.6592344312516 }, p1: { x: 194.20158972622696, y: 279.73342541211036 }, p2: { x: 237.08994154510427, y: 267.23606076308647 } }, { p0: { x: 260.7700457058332, y: 308.6592344312516 }, p3: { x: 354.37949266949977, y: 418.66270591473733 }, p1: { x: 296.19837658850764, y: 363.2552575223399 }, p2: { x: 327.3461528501835, y: 399.421908481401 } }, { p0: { x: 354.37949266949977, y: 418.66270591473733 }, p3: { x: 455.0650943019607, y: 436.68778392745054 }, p1: { x: 387.0738373550893, y: 438.46414229613373 }, p2: { x: 420.20146114832085, y: 445.97954694645057 } }, { p0: { x: 455.0650943019607, y: 436.68778392745054 }, p3: { x: 542.5084866585717, y: 364.14770567330805 }, p1: { x: 490.11772693316004, y: 424.94058701636095 }, p2: { x: 519.2972030102327, y: 400.5217203135847 } }, { p0: { x: 542.5084866585717, y: 364.14770567330805 }, p3: { x: 664.3022881813483, y: 367.6900416364849 }, p1: { x: 578.988154517057, y: 298.9407313477459 }, p2: { x: 635.4081176094601, y: 302.3815915627997 } }, { p0: { x: 664.3022881813483, y: 367.6900416364849 }, p3: { x: 778.1629913710452, y: 418.4314477468841 }, p1: { x: 705.2962607861937, y: 446.04410354745926 }, p2: { x: 740.2722914669222, y: 458.93000958772774 } }, { p0: { x: 778.1629913710452, y: 418.4314477468841 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 799.1792905081497, y: 389.89837008628945 }, p2: { x: 841.1657027392038, y: 294.3295497891731 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1014.558005752637, y: 358.77660594439106 }, p1: { x: 974.0594439117931, y: 398.3547459252156 }, p2: { x: 1032.0460210930012, y: 399.275167785235 } }, { p0: { x: 1014.558005752637, y: 358.77660594439106 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level4: [ [{ p0: { x: -115.65363008939516, y: 162.15049011844437 }, p3: { x: 12.521659552209115, y: 197.94311960463676 }, p1: { x: -80.93000884666006, y: 95.35096763765188 }, p2: { x: 11.384676613662798, y: 60.592988687654184 } }, { p0: { x: 12.521659552209115, y: 197.94311960463676 }, p3: { x: 117.93342425809152, y: 280.7666490164015 }, p1: { x: 17.89352056510465, y: 300.5274382258871 }, p2: { x: -10.262382209866608, y: 276.12240045236007 } }, { p0: { x: 117.93342425809152, y: 280.7666490164015 }, p3: { x: 140.937769545572, y: 281.0267927775008 }, p1: { x: 103.3678802237503, y: 325.59336216032193 }, p2: { x: 150.7775243192764, y: 326.5400029531618 } }, { p0: { x: 140.937769545572, y: 281.0267927775008 }, p3: { x: 256.76377246325006, y: 302.49182716161624 }, p1: { x: 235.209082074312, y: 279.26477850192606 }, p2: { x: 256.49037148114934, y: 280.5269698147743 } }, { p0: { x: 256.76377246325006, y: 302.49182716161624 }, p3: { x: 297.7347216473643, y: 411.0460962222872 }, p1: { x: 262.9189429583823, y: 395.14111380169646 }, p2: { x: 239.28432061959444, y: 411.1315745482255 } }, { p0: { x: 297.7347216473643, y: 411.0460962222872 }, p3: { x: 502.09358360073225, y: 411.0497617734247 }, p1: { x: 356.7330741128121, y: 411.34432097221946 }, p2: { x: 431.5321173845027, y: 411.2963637468274 } }, { p0: { x: 502.09358360073225, y: 411.0497617734247 }, p3: { x: 580.4902863531049, y: 350.82092760355044 }, p1: { x: 548.7254799006181, y: 409.4223803416678 }, p2: { x: 552.6467637208882, y: 386.75644719024643 } }, { p0: { x: 580.4902863531049, y: 350.82092760355044 }, p3: { x: 691.3932654090715, y: 374.54855203644064 }, p1: { x: 612.1361342051312, y: 303.0530014967615 }, p2: { x: 651.19731359386, y: 303.77064586607946 } }, { p0: { x: 691.3932654090715, y: 374.54855203644064 }, p3: { x: 788.8502748887252, y: 377.9045984371528 }, p1: { x: 723.8591473284431, y: 420.8681827738652 }, p2: { x: 756.5719362812287, y: 422.05600132994 } }, { p0: { x: 788.8502748887252, y: 377.9045984371528 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 814.5700720712758, y: 344.68794924460605 }, p2: { x: 848.0935331833372, y: 295.8419542824864 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1088.9605891756723, y: 357.7432367301822 }, p1: { x: 1022.6277969796079, y: 358.05334657107136 }, p2: { x: 1053.7467745913866, y: 357.9403992168818 } }, { p0: { x: 1088.9605891756723, y: 357.7432367301822 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level5: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 335.11268894225014, y: 456.9535121440037 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 335.11268894225014, y: 456.9535121440037 }, p3: { x: 460.53633209695283, y: 531.2485303511983 }, p1: { x: 366.8331696296621, y: 498.6396291129315 }, p2: { x: 389.5512702578272, y: 531.5396450472757 } }, { p0: { x: 460.53633209695283, y: 531.2485303511983 }, p3: { x: 1292.9794289014458, y: 531.3943132986161 }, p1: { x: 595.8989400278431, y: 532.5889186711215 }, p2: { x: 672.7580545336027, y: 532.5296573651302 } }, { p0: { x: 1292.9794289014458, y: 531.3943132986161 }, p3: { x: 1292.391691394658, y: 306.16023738872406 }, p1: { x: 1293.3412462908016, y: 457.139465875371 }, p2: { x: 1294.290801186944, y: 349.83976261127583 } }, { p0: { x: 1292.391691394658, y: 306.16023738872406 }, p3: { x: 1118.6231454005929, y: 304.26112759643917 }, p1: { x: 1219.275964391691, y: 304.26112759643917 }, p2: { x: 1175.5964391691396, y: 305.2106824925814 } }, { p0: { x: 1118.6231454005929, y: 304.26112759643917 }, p3: { x: 904.973293768546, y: 305.2106824925816 }, p1: { x: 1045.5074183976265, y: 304.26112759643917 }, p2: { x: 976.1899109792283, y: 304.2611275964392 } }, { p0: { x: 904.973293768546, y: 305.2106824925816 }, p3: { x: 795.7744807121666, y: 198.8605341246291 }, p1: { x: 902.1246290801188, y: 252.9851632047479 }, p2: { x: 801.4718100890206, y: 252.98516320474766 } }, { p0: { x: 795.7744807121666, y: 198.8605341246291 }, p3: { x: 991.3827893175078, y: 198.86053412462908 }, p1: { x: 884.0830860534123, y: 198.86053412462908 }, p2: { x: 938.2077151335308, y: 198.86053412462903 } }, { p0: { x: 991.3827893175078, y: 198.86053412462908 }, p3: { x: 1019.8694362017804, y: 198.86053412462903 }, p1: { x: 989.4836795252226, y: 252.0356083086054 }, p2: { x: 1019.8694362017807, y: 252.03560830860533 } }, { p0: { x: 1019.8694362017804, y: 198.86053412462903 }, p3: { x: 1149.2462908011867, y: 199.98813056379814 }, p1: { x: 1105.566765578635, y: 199.9881305637982 }, p2: { x: 1120.7596439169142, y: 199.98813056379817 } }, { p0: { x: 1149.2462908011867, y: 199.98813056379814 }, p3: { x: 1151.857566765579, y: 99.15727002967353 }, p1: { x: 1175.59643916914, y: 177.02077151335314 }, p2: { x: 1177.495548961424, y: 124.79525222551933 } }, { p0: { x: 1151.857566765579, y: 99.15727002967353 }, p3: { x: 1369.2462908011867, y: 286.2195845697329 }, p1: { x: 1333.1632047477747, y: 98.20771513353111 }, p2: { x: 1360.7002967359053, y: 138.08902077151336 } }, { p0: { x: 1369.2462908011867, y: 286.2195845697329 } }] ], level6: [ [{ p0: { x: -47.26581021517704, y: 240.71028627379977 }, p3: { x: 32.24429918847303, y: 240.34676659594825 }, p1: { x: -23.148336032830287, y: 240.22324767498623 }, p2: { x: 4.671625291965711, y: 240.74414583221235 } }, { p0: { x: 32.24429918847303, y: 240.34676659594825 }, p3: { x: 36.37945300000024, y: 409.31418787152893 }, p1: { x: 5.178073816369327, y: 287.88393717811556 }, p2: { x: 5.861222932052492, y: 358.73979569235223 } }, { p0: { x: 36.37945300000024, y: 409.31418787152893 }, p3: { x: 250.32170208728533, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 250.32170208728533, y: 408.4159540597435 }, p3: { x: 355.408672028931, y: 157.58776161546248 }, p1: { x: 275.41673227018765, y: 272.4188991030994 }, p2: { x: 325.3289292648472, y: 272.44697725544086 } }, { p0: { x: 355.408672028931, y: 157.58776161546248 }, p3: { x: 438.2107507016041, y: 156.78764240193814 }, p1: { x: 381.04035779033865, y: 154.6227157936926 }, p2: { x: 409.8472533445079, y: 155.04915878934773 } }, { p0: { x: 438.2107507016041, y: 156.78764240193814 }, p3: { x: 353.2754119881266, y: 576.0454760893139 }, p1: { x: 423.38308379105655, y: 293.0963182482885 }, p2: { x: 307.43035897334903, y: 315.36263833764593 } }, { p0: { x: 353.2754119881266, y: 576.0454760893139 }, p3: { x: 515.6897886462439, y: 579.0989266064831 }, p1: { x: 411.48078117452275, y: 577.9005652411217 }, p2: { x: 463.1702937873668, y: 579.1843714907683 } }, { p0: { x: 515.6897886462439, y: 579.0989266064831 }, p3: { x: 531.0544350411851, y: 308.32032421377534 }, p1: { x: 475.4281842648411, y: 509.2505567719149 }, p2: { x: 476.39982183298764, y: 395.52780722831085 } }, { p0: { x: 531.0544350411851, y: 308.32032421377534 }, p3: { x: 683.7470781237258, y: 309.2698791099178 }, p1: { x: 579.7146065583031, y: 306.29072590510725 }, p2: { x: 635.2173951229917, y: 307.3055250594414 } }, { p0: { x: 683.7470781237258, y: 309.2698791099178 }, p3: { x: 685.1613728897564, y: 582.4546144628955 }, p1: { x: 636.2472506446009, y: 399.1162414288495 }, p2: { x: 642.1483428585765, y: 515.8181441772635 } }, { p0: { x: 685.1613728897564, y: 582.4546144628955 }, p3: { x: 786.3933601420322, y: 583.4694136172293 }, p1: { x: 719.6856230512981, y: 582.4546144628957 }, p2: { x: 749.4550724273998, y: 582.4546144628954 } }, { p0: { x: 786.3933601420322, y: 583.4694136172293 }, p3: { x: 846.33878081066, y: 178.5645510379483 }, p1: { x: 717.5175061637003, y: 347.426728816005 }, p2: { x: 826.0427977239794, y: 299.7311685623052 } }, { p0: { x: 846.33878081066, y: 178.5645510379483 }, p3: { x: 944.2568616257106, y: 180.70694663145147 }, p1: { x: 883.3257507794813, y: 176.64775001411533 }, p2: { x: 909.6814198154342, y: 176.6477500141154 } }, { p0: { x: 944.2568616257106, y: 180.70694663145147 }, p3: { x: 882.9357908670587, y: 398.5230205582148 }, p1: { x: 943.2074328266458, y: 267.3378962490826 }, p2: { x: 874.0706018155465, y: 324.71068562932487 } }, { p0: { x: 882.9357908670587, y: 398.5230205582148 }, p3: { x: 962.311829913237, y: 399.8770898551452 }, p1: { x: 917.095551470819, y: 399.6030639707403 }, p2: { x: 943.6178443046158, y: 398.89240343536113 } }, { p0: { x: 962.311829913237, y: 399.8770898551452 }, p3: { x: 989.3953488372092, y: 401.1501057082452 }, p1: { x: 946.7737843551799, y: 461.0232558139534 }, p2: { x: 1004.6173361522201, y: 460.00845665961947 } }, { p0: { x: 989.3953488372092, y: 401.1501057082452 }, p3: { x: 1071.5940803382668, y: 402.1649048625793 }, p1: { x: 1018.8245243128964, y: 402.16490486257925 }, p2: { x: 1052.3128964059194, y: 402.16490486257925 } }, { p0: { x: 1071.5940803382668, y: 402.1649048625793 }, p3: { x: 1141.6152219873147, y: 95.69556025369978 }, p1: { x: 1131.4672304439748, y: 319.9661733615222 }, p2: { x: 1175.103594080338, y: 192.1014799154334 } }, { p0: { x: 1141.6152219873147, y: 95.69556025369978 }, p3: { x: 1381.107822410148, y: 287.492600422833 }, p1: { x: 1349.6490486257928, y: 93.66596194503171 }, p2: { x: 1376.0338266384776, y: 180.938689217759 } }, { p0: { x: 1381.107822410148, y: 287.492600422833 } }] ], level7: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 329.41535956539553, y: 450.3066278710067 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 329.41535956539553, y: 450.3066278710067 }, p3: { x: 453.41013909589236, y: 421.3015526205514 }, p1: { x: 368.7141543019781, y: 478.2609525613615 }, p2: { x: 412.8793066087622, y: 478.3967932987995 } }, { p0: { x: 453.41013909589236, y: 421.3015526205514 }, p3: { x: 560.5056586439805, y: 262.3367621242808 }, p1: { x: 473.849416913595, y: 381.92083807727204 }, p2: { x: 507.76493524735747, y: 262.44484226271715 } }, { p0: { x: 560.5056586439805, y: 262.3367621242808 }, p3: { x: 774.882785089427, y: 401.02831949835155 }, p1: { x: 634.8069970403106, y: 253.42548147412387 }, p2: { x: 644.5858337682272, y: 393.3124358012794 } }, { p0: { x: 774.882785089427, y: 401.02831949835155 }, p3: { x: 961.520879586825, y: 401.1748396709205 }, p1: { x: 862.2823322948992, y: 401.6370114306241 }, p2: { x: 895.1667245755477, y: 402.5971603055234 } }, { p0: { x: 961.520879586825, y: 401.1748396709205 }, p3: { x: 988.9795827027153, y: 401.1037000830355 }, p1: { x: 954.2163515049438, y: 459.45418033414404 }, p2: { x: 995.6308986084199, y: 459.61907341864594 } }, { p0: { x: 988.9795827027153, y: 401.1037000830355 }, p3: { x: 1097.0816044097123, y: 398.18273687186036 }, p1: { x: 1053.59694241109, y: 400.3357694323554 }, p2: { x: 1075.9152213984112, y: 400.01575906764737 } }, { p0: { x: 1097.0816044097123, y: 398.18273687186036 }, p3: { x: 1095.9772918666488, y: 246.18570494738162 }, p1: { x: 1095.8679913077785, y: 341.4939077894318 }, p2: { x: 1095.8538576148221, y: 288.6009175122347 } }, { p0: { x: 1095.9772918666488, y: 246.18570494738162 }, p3: { x: 680.5413566430872, y: 241.34439117614914 }, p1: { x: 947.8976485068342, y: 245.69196794007306 }, p2: { x: 870.2781157431675, y: 246.87166017890917 } }, { p0: { x: 680.5413566430872, y: 241.34439117614914 }, p3: { x: 561.4962411690266, y: 155.1198419208287 }, p1: { x: 666.1710031967048, y: 190.16770790604156 }, p2: { x: 560.057975310613, y: 203.8561124044123 } }, { p0: { x: 561.4962411690266, y: 155.1198419208287 }, p3: { x: 754.4246914504167, y: 157.71031575271127 }, p1: { x: 624.0584232944798, y: 155.46431177384042 }, p2: { x: 681.5627108707989, y: 157.08978652547285 } }, { p0: { x: 754.4246914504167, y: 157.71031575271127 }, p3: { x: 1067.5771670190281, y: 160.7272727272727 }, p1: { x: 832.143763213531, y: 159.71247357293865 }, p2: { x: 966.0972515856238, y: 161.74207188160685 } }, { p0: { x: 1067.5771670190281, y: 160.7272727272727 }, p3: { x: 1246.816067653277, y: 160.8599849077313 }, p1: { x: 1157.4199454932116, y: 159.37420718816065 }, p2: { x: 1207.3097469862237, y: 160.97872738498384 } }, { p0: { x: 1246.816067653277, y: 160.8599849077313 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level8: [ [{ p0: { x: -31.29167764460125, y: 621.1216778917576 }, p3: { x: 25.435195843117945, y: 627.8100174353964 }, p1: { x: -5.218227837332208, y: 558.8532688166354 }, p2: { x: 13.526245364095907, y: 572.0412481826661 } }, { p0: { x: 25.435195843117945, y: 627.8100174353964 }, p3: { x: 100.60629045802789, y: 682.7259525774114 }, p1: { x: 40.32793079933167, y: 679.7904164717357 }, p2: { x: 50.675549508349064, y: 682.8178954311908 } }, { p0: { x: 100.60629045802789, y: 682.7259525774114 }, p3: { x: 245.54219705059833, y: 684.6512481773907 }, p1: { x: 146.2245931674175, y: 684.557152884392 }, p2: { x: 197.4049021750255, y: 684.2698727130636 } }, { p0: { x: 245.54219705059833, y: 684.6512481773907 }, p3: { x: 363.29771250657205, y: 728.4242749298304 }, p1: { x: 325.0941355782338, y: 677.9754219236439 }, p2: { x: 321.9004999650089, y: 731.3879050007464 } }, { p0: { x: 363.29771250657205, y: 728.4242749298304 }, p3: { x: 427.99837439001004, y: 645.7721408558456 }, p1: { x: 396.9494484196252, y: 728.1433055025378 }, p2: { x: 416.6440124911151, y: 681.2203227105641 } }, { p0: { x: 427.99837439001004, y: 645.7721408558456 }, p3: { x: 466.2407662176655, y: 562.9157945829302 }, p1: { x: 436.67294632535976, y: 623.3326027831545 }, p2: { x: 446.73293369484213, y: 587.0632877737208 } }, { p0: { x: 466.2407662176655, y: 562.9157945829302 }, p3: { x: 561.4347064922375, y: 540.0567985432465 }, p1: { x: 493.7500085018504, y: 528.5130294720506 }, p2: { x: 536.9132780352379, y: 542.8995452282978 } }, { p0: { x: 561.4347064922375, y: 540.0567985432465 }, p3: { x: 675.8748156644265, y: 465.2295592331639 }, p1: { x: 597.9629690316232, y: 543.1223988202527 }, p2: { x: 651.2010486645913, y: 540.3899721448468 } }, { p0: { x: 675.8748156644265, y: 465.2295592331639 }, p3: { x: 773.5277732262824, y: 410.93232836310017 }, p1: { x: 696.4116008520404, y: 412.85400622644596 }, p2: { x: 732.2208749795183, y: 322.8549893495002 } }, { p0: { x: 773.5277732262824, y: 410.93232836310017 }, p3: { x: 889.011961330493, y: 375.21743404882835 }, p1: { x: 854.702277568409, y: 412.9143044404391 }, p2: { x: 876.4882844502708, y: 413.97869900049153 } }, { p0: { x: 889.011961330493, y: 375.21743404882835 }, p3: { x: 1016.0131083073903, y: 267.2049811568083 }, p1: { x: 925.371784368343, y: 275.0673439292153 }, p2: { x: 918.0809437981326, y: 262.782238243487 } }, { p0: { x: 1016.0131083073903, y: 267.2049811568083 }, p3: { x: 1038.9021792561039, y: 266.9978699000492 }, p1: { x: 1002.6609864001313, y: 312.1822054727183 }, p2: { x: 1047.7266917909228, y: 312.5361297722434 } }, { p0: { x: 1038.9021792561039, y: 266.9978699000492 }, p3: { x: 1160.7216123218093, y: 265.5172865803703 }, p1: { x: 1100.463378666229, y: 265.8128789120105 }, p2: { x: 1149.0014746845816, y: 264.6475503850564 } }, { p0: { x: 1160.7216123218093, y: 265.5172865803703 }, p3: { x: 1265.8823529411768, y: 420.235294117647 }, p1: { x: 1245.1764705882363, y: 266.82352941176475 }, p2: { x: 1260.2352941176473, y: 353.4117647058824 } }, { p0: { x: 1265.8823529411768, y: 420.235294117647 }, p3: { x: 1306.3529411764703, y: 487.0588235294118 }, p1: { x: 1274.3529411764707, y: 457.88235294117646 }, p2: { x: 1294.1176470588234, y: 469.1764705882353 } }, { p0: { x: 1306.3529411764703, y: 487.0588235294118 } }], [{ p0: { x: 1377.2415383587436, y: 588.764723813528 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level9: [ [{ p0: { x: -31.29167764460125, y: 621.1216778917576 }, p3: { x: 25.435195843117945, y: 627.8100174353964 }, p1: { x: -5.218227837332208, y: 558.8532688166354 }, p2: { x: 13.526245364095907, y: 572.0412481826661 } }, { p0: { x: 25.435195843117945, y: 627.8100174353964 }, p3: { x: 100.60629045802789, y: 682.7259525774114 }, p1: { x: 40.32793079933167, y: 679.7904164717357 }, p2: { x: 50.675549508349064, y: 682.8178954311908 } }, { p0: { x: 100.60629045802789, y: 682.7259525774114 }, p3: { x: 245.54219705059833, y: 684.6512481773907 }, p1: { x: 146.2245931674175, y: 684.557152884392 }, p2: { x: 197.4049021750255, y: 684.2698727130636 } }, { p0: { x: 245.54219705059833, y: 684.6512481773907 }, p3: { x: 363.29771250657205, y: 728.4242749298304 }, p1: { x: 325.0941355782338, y: 677.9754219236439 }, p2: { x: 321.9004999650089, y: 731.3879050007464 } }, { p0: { x: 363.29771250657205, y: 728.4242749298304 }, p3: { x: 421.29178756366275, y: 662.0595660055461 }, p1: { x: 396.9494484196252, y: 728.1433055025378 }, p2: { x: 404.1889226707558, y: 699.4239155249353 } }, { p0: { x: 421.29178756366275, y: 662.0595660055461 }, p3: { x: 455.7018440619769, y: 573.4547167386188 }, p1: { x: 429.00827566667715, y: 636.745776435849 }, p2: { x: 438.11017920382415, y: 607.1830482527628 } }, { p0: { x: 455.7018440619769, y: 573.4547167386188 }, p3: { x: 532.6921915221776, y: 572.6316488426476 }, p1: { x: 478.4206671844851, y: 531.3872809690565 }, p2: { x: 512.0030983945194, y: 520.8636170845853 } }, { p0: { x: 532.6921915221776, y: 572.6316488426476 }, p3: { x: 665.3358935087382, y: 525.5888406702896 }, p1: { x: 621.9150648400063, y: 576.6553329519891 }, p2: { x: 643.5363780059085, y: 578.7133254382601 } }, { p0: { x: 665.3358935087382, y: 525.5888406702896 }, p3: { x: 773.5277732262824, y: 442.54909483016604 }, p1: { x: 682.0403433670103, y: 481.83604215458973 }, p2: { x: 723.5981204885004, y: 347.7651689902188 } }, { p0: { x: 773.5277732262824, y: 442.54909483016604 }, p3: { x: 935.9580691149243, y: 403.95994901888815 }, p1: { x: 860.4507805624211, y: 446.4472385721756 }, p2: { x: 916.7278054083548, y: 449.42780079689874 } }, { p0: { x: 935.9580691149243, y: 403.95994901888815 }, p3: { x: 1065.833467588827, y: 435.8277356478263 }, p1: { x: 971.3598083204388, y: 313.3906972226285 }, p2: { x: 1012.9312431993302, y: 314.5187651895948 } }, { p0: { x: 1065.833467588827, y: 435.8277356478263 }, p3: { x: 1227.6446942261637, y: 564.9619417563366 }, p1: { x: 1081.1041001725864, y: 475.53549888589197 }, p2: { x: 1118.6248953837373, y: 556.8475070177524 } }, { p0: { x: 1227.6446942261637, y: 564.9619417563366 }, p3: { x: 1296.6497560343842, y: 625.7568075384542 }, p1: { x: 1265.2537978279056, y: 574.3158729239865 }, p2: { x: 1291.755965702546, y: 595.186472540745 } }, { p0: { x: 1296.6497560343842, y: 625.7568075384542 }, p3: { x: 1320.4931313842906, y: 708.6185276505811 }, p1: { x: 1306.4938358576974, y: 644.3085593518844 }, p2: { x: 1311.971821063755, y: 669.579429376541 } }, { p0: { x: 1320.4931313842906, y: 708.6185276505811 }, p3: { x: 1347.5505459668893, y: 818.5558295174359 }, p1: { x: 1328.9637196195847, y: 752.0140894681225 }, p2: { x: 1338.1895033462486, y: 780.5537160972173 } }, { p0: { x: 1347.5505459668893, y: 818.5558295174359 }, p3: { x: 1369.0778443113775, y: 916.3832335329344 }, p1: { x: 1354.7065868263471, y: 851.2335329341319 }, p2: { x: 1375.7844311377248, y: 892.4311377245509 } }, { p0: { x: 1369.0778443113775, y: 916.3832335329344 } }], [{ p0: { x: 1377.2415383587436, y: 588.764723813528 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level10: [ [{ p0: { x: -272.02085615059957, y: 924.0853371075856 }, p3: { x: -200.7063759857968, y: 924.8138007497503 }, p1: { x: -255.30315790885163, y: 927.4141463148483 }, p2: { x: -228.3784033468505, y: 924.8772927350382 } }, { p0: { x: -200.7063759857968, y: 924.8138007497503 }, p3: { x: -102.8760525434879, y: 927.0845167360463 }, p1: { x: -168.7994705503939, y: 929.7870631024913 }, p2: { x: -132.51312258499004, y: 921.4925880140579 } }, { p0: { x: -102.8760525434879, y: 927.0845167360463 }, p3: { x: -14.837156416915661, y: 925.291353488261 }, p1: { x: -68.16222836460112, y: 923.5795418246853 }, p2: { x: -40.65386758595568, y: 927.3692230913651 } }, { p0: { x: -14.837156416915661, y: 925.291353488261 }, p3: { x: 65.33238055801806, y: 916.5885695110733 }, p1: { x: 19.13800606246599, y: 918.0012049579973 }, p2: { x: 40.41929546930331, y: 923.0541169026321 } }, { p0: { x: 65.33238055801806, y: 916.5885695110733 }, p3: { x: 138.5244551123199, y: 914.2642600919811 }, p1: { x: 99.36514236608218, y: 915.4570071876788 }, p2: { x: 115.1382199285776, y: 916.2450987338128 } }, { p0: { x: 138.5244551123199, y: 914.2642600919811 }, p3: { x: 235.7954592177116, y: 915.2156058010654 }, p1: { x: 174.77848378704704, y: 918.3532054737002 }, p2: { x: 213.56568105676337, y: 918.3052482483082 } }, { p0: { x: 235.7954592177116, y: 915.2156058010654 }, p3: { x: 361.5761698674189, y: 861.620532736818 }, p1: { x: 270.1075134642903, y: 917.3789450010953 }, p2: { x: 330.8896067613619, y: 894.7130118496739 } }, { p0: { x: 361.5761698674189, y: 861.620532736818 }, p3: { x: 481.9559505028523, y: 857.8654325892542 }, p1: { x: 411.22794072043234, y: 882.0855780021908 }, p2: { x: 456.92288121478794, y: 886.5939430032956 } }, { p0: { x: 481.9559505028523, y: 857.8654325892542 }, p3: { x: 690.291538462269, y: 654.6272045575872 }, p1: { x: 539.061516528838, y: 823.6322499012099 }, p2: { x: 643.7979974855723, y: 766.0638986645896 } }, { p0: { x: 690.291538462269, y: 654.6272045575872 }, p3: { x: 842.2419495740417, y: 677.9994983716008 }, p1: { x: 760.5523030683144, y: 532.3286205180511 }, p2: { x: 767.5407197578684, y: 679.6524182508971 } }, { p0: { x: 842.2419495740417, y: 677.9994983716008 }, p3: { x: 985.8613783044771, y: 676.0768797577798 }, p1: { x: 867.3931810717623, y: 677.999498371601 }, p2: { x: 887.6088434247403, y: 677.9994983716006 } }, { p0: { x: 985.8613783044771, y: 676.0768797577798 }, p3: { x: 1090.855949491566, y: 674.2684094843777 }, p1: { x: 1025.4708374534478, y: 674.5785193252668 }, p2: { x: 1052.79909443344, y: 674.4655719710772 } }, { p0: { x: 1090.855949491566, y: 674.2684094843777 }, p3: { x: 1165.616223987492, y: 559.7184179965338 }, p1: { x: 1135.2695609047864, y: 672.4587382247469 }, p2: { x: 1152.7575762451504, y: 645.0032719422201 } }, { p0: { x: 1165.616223987492, y: 559.7184179965338 }, p3: { x: 1249.6408359589948, y: 581.3769529198084 }, p1: { x: 1175.7890207740402, y: 524.2226624353207 }, p2: { x: 1201.1519583856652, y: 465.90898567898245 } }, { p0: { x: 1249.6408359589948, y: 581.3769529198084 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], level11: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 247.1616515363032, y: 410.5612054563915 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 247.1616515363032, y: 410.5612054563915 }, p3: { x: 361.5941305151162, y: 410.61947703301786 }, p1: { x: 292.00047800347215, y: 411.6776894228225 }, p2: { x: 326.5432866886369, y: 411.50620930570835 } }, { p0: { x: 361.5941305151162, y: 410.61947703301786 }, p3: { x: 478.08053015734487, y: 411.64792133563515 }, p1: { x: 400.89292525169884, y: 411.7581592652721 }, p2: { x: 441.84020046351077, y: 410.82137430438604 } }, { p0: { x: 478.08053015734487, y: 411.64792133563515 }, p3: { x: 585.291702793413, y: 411.2378451908829 }, p1: { x: 513.5365677515839, y: 411.9543576303446 }, p2: { x: 543.1746031000343, y: 412.50660029425995 } }, { p0: { x: 585.291702793413, y: 411.2378451908829 }, p3: { x: 705.1507761603283, y: 409.11496482651955 }, p1: { x: 627.3970673253797, y: 412.5511497480938 }, p2: { x: 668.8567548673117, y: 410.5380598520245 } }, { p0: { x: 705.1507761603283, y: 409.11496482651955 }, p3: { x: 812.3454038997211, y: 356.5236768802228 }, p1: { x: 752.973156346773, y: 402.65181058495807 }, p2: { x: 787.5401876721497, y: 384.0994693515507 } }, { p0: { x: 812.3454038997211, y: 356.5236768802228 }, p3: { x: 873.2924791086352, y: 296.57938718662956 }, p1: { x: 838.5292479108635, y: 329.5598885793872 }, p2: { x: 854.5738161559888, y: 306.3844011142061 } }, { p0: { x: 873.2924791086352, y: 296.57938718662956 }, p3: { x: 979.3649025069639, y: 295.6880222841225 }, p1: { x: 919.6434540389972, y: 294.79665738161555 }, p2: { x: 950.841225626741, y: 296.8022284122562 } }, { p0: { x: 979.3649025069639, y: 295.6880222841225 }, p3: { x: 1005.6601671309197, y: 295.91086350974945 }, p1: { x: 977.136490250696, y: 340.47910863509776 }, p2: { x: 1006.5515320334267, y: 341.37047353760465 } }, { p0: { x: 1005.6601671309197, y: 295.91086350974945 }, p3: { x: 1133.9610027855158, y: 164.88022284122567 }, p1: { x: 1093.0139275766019, y: 299.4763231197771 }, p2: { x: 1110.7855153203345, y: 276.3008356545963 } }, { p0: { x: 1133.9610027855158, y: 164.88022284122567 }, p3: { x: 1217.1922005571032, y: 187.16434540389972 }, p1: { x: 1151.2869080779938, y: 72.40111420612811 }, p2: { x: 1193.2367688022282, y: 36.4122562674093 } }, { p0: { x: 1217.1922005571032, y: 187.16434540389972 }, p3: { x: 1237.2290502793296, y: 281.6983240223463 }, p1: { x: 1227.486033519553, y: 222.70391061452514 }, p2: { x: 1230.7039106145253, y: 250.59217877094972 } }, { p0: { x: 1237.2290502793296, y: 281.6983240223463 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], init: function() {}, getLevel: function(b) { return this["level" + b] ? this["level" + b] : [] }, loadLand: function() { ig.game.landpoints = this.getLevel(ig.game.levelNow); JSON.stringify(ig.game.landpoints) } }) }); this.START_BRANDING_SPLASH; ig.baked = !0; ig.module("plugins.branding.splash").requires("impact.impact", "impact.entity").defines(function() { ig.BrandingSplash = ig.Class.extend({ init: function() { ig.game.spawnEntity(EntityBranding, 0, 0); console.log("spawn branding") } }); EntityBranding = ig.Entity.extend({ gravityFactor: 0, size: { x: 32, y: 32 }, splash: new ig.Image("branding/splash1.png"), init: function(b, c, d) { this.parent(b, c, d); 320 >= ig.system.width ? (this.size.x = 320, this.size.y = 200) : (this.size.x = 480, this.size.y = 240); this.pos.x = (ig.system.width - this.size.x) / 2; this.pos.y = -this.size.y - 200; this.endPosY = (ig.system.height - this.size.y) / 2; b = this.tween({ pos: { y: this.endPosY } }, 0.5, { easing: ig.Tween.Easing.Bounce.EaseIn }); c = this.tween({}, 2.5, { onComplete: function() { ig.game.director.loadLevel(ig.game.director.currentLevel) } }); b.chain(c); b.start(); this.currentAnim = this.anims.idle }, createClickableLayer: function() { console.log("Build clickable layer"); this.checkClickableLayer("branding-splash", _SETTINGS.Branding.Logo.Link, _SETTINGS.Branding.Logo.NewWindow) }, doesClickableLayerExist: function(b) { for (k in dynamicClickableEntityDivs) if (k == b) return !0; return !1 }, checkClickableLayer: function(b, c, d) { "undefined" == typeof wm && (this.doesClickableLayerExist(b) ? (ig.game.showOverlay([b]), $("#" + b).find("[href]").attr("href", c)) : this.createClickableOutboundLayer(b, c, "media/graphics/misc/invisible.png", d)) }, createClickableOutboundLayer: function(b, c, d, e) { var f = ig.$new("div"); f.id = b; document.body.appendChild(f); f = $("#" + f.id); f.css("float", "left"); f.css("position", "absolute"); if (ig.ua.mobile) { var j = window.innerHeight / mobileHeight, q = window.innerWidth / mobileWidth; f.css("left", this.pos.x * q); f.css("top", this.pos.y * j); f.css("width", this.size.x * q); f.css("height", this.size.y * j) } else j = w / 2 - destW / 2, q = h / 2 - destH / 2, console.log(j, q), f.css("left", j + this.pos.x * multiplier), f.css("top", q + this.pos.y * multiplier), f.css("width", this.size.x * multiplier), f.css("height", this.size.y * multiplier); e ? f.html("") : f.html(""); dynamicClickableEntityDivs[b] = {}; dynamicClickableEntityDivs[b].width = this.size.x * multiplier; dynamicClickableEntityDivs[b].height = this.size.y * multiplier; dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x; dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y }, draw: function() { ig.system.context.fillStyle = "#ffffff"; ig.system.context.fillRect(0, 0, ig.system.width, ig.system.height); ig.system.context.fillStyle = "#000"; ig.system.context.font = "12px Arial"; ig.system.context.textAlign = "left"; 320 >= ig.system.width ? ig.system.context.fillText("powered by mobiltr.com", ig.system.width - 150, ig.system.height - 15) : ig.system.context.fillText("powered by mobiltr.com", ig.system.width - 160, ig.system.height - 15); this.parent(); this.splash && ig.system.context.drawImage(this.splash.data, 0, 0, this.splash.data.width, this.splash.data.height, this.pos.x, this.pos.y, this.size.x, this.size.y) } }) }); this.END_BRANDING_SPLASH; ig.baked = !0; ig.module("game.entities.buttons.button").requires("impact.entity", "plugins.data.vector").defines(function() { EntityButton = ig.Entity.extend({ collides: ig.Entity.COLLIDES.NEVER, type: ig.Entity.TYPE.A, size: new Vector2(48, 48), fillColor: null, zIndex: 95E3, init: function(b, c, d) { this.parent(b, c, d); !ig.global.wm && !isNaN(d.zIndex) && (this.zIndex = d.zIndex); b = Math.floor(256 * Math.random()); c = Math.floor(256 * Math.random()); d = Math.floor(256 * Math.random()); this.fillColor = "rgba(" + b + "," + d + "," + c + ",1)" }, clicked: function() { throw "no implementation on clicked()"; }, clicking: function() { throw "no implementation on clicking()"; }, released: function() { throw "no implementation on released()"; } }) }); ig.baked = !0; ig.module("plugins.clickable-div-layer").requires("plugins.data.vector").defines(function() { ClickableDivLayer = ig.Class.extend({ pos: new Vector2(0, 0), size: new Vector2(0, 0), identifier: null, invisImagePath: "media/graphics/misc/invisible.png", init: function(b) { this.pos = new Vector2(b.pos.x, b.pos.y); this.size = new Vector2(b.size.x, b.size.y); var c = "more-games", d = "www.google.com", e = !1; b.div_layer_name && (c = b.div_layer_name); b.link && (d = b.link); b.newWindow && (e = b.newWindow); this.createClickableLayer(c, d, e) }, createClickableLayer: function(b, c, d) { this.identifier = b; var e = ig.domHandler.getElementById("#" + b); e ? (ig.domHandler.show(e), ig.domHandler.attr(e, "href", c)) : this.createClickableOutboundLayer(b, c, this.invisImagePath, d) }, update: function(b, c) { this.pos.x === b && this.pos.y === c || (ig.sizeHandler.dynamicClickableEntityDivs[this.identifier] = {}, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].width = this.size.x, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].height = this.size.y, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].entity_pos_x = this.pos.x, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].entity_pos_y = this.pos.y) }, createClickableOutboundLayer: function(b, c, d, e) { var f = ig.domHandler.create("div"); ig.domHandler.attr(f, "id", b); var j = ig.domHandler.create("a"); e ? (ig.domHandler.attr(j, "href", c), ig.domHandler.attr(j, "target", "_blank")) : ig.domHandler.attr(j, "href", c); c = ig.domHandler.create("img"); ig.domHandler.css(c, { width: "100%", height: "100%" }); ig.domHandler.attr(c, "src", d); d = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y); if (ig.ua.mobile) { e = Math.floor(this.pos.x * ig.sizeHandler.scaleRatioMultiplier.x) + "px"; var q = Math.floor(this.pos.y * ig.sizeHandler.scaleRatioMultiplier.y) + "px", n = Math.floor(this.size.x * ig.sizeHandler.scaleRatioMultiplier.x) + "px"; d = Math.floor(this.size.y * ig.sizeHandler.scaleRatioMultiplier.y) + "px" } else e = ig.domHandler.getElementById("#canvas"), e = ig.domHandler.getOffsets(e), q = e.top, e = Math.floor(e.left + this.pos.x * d) + "px", q = Math.floor(q + this.pos.y * d) + "px", n = Math.floor(this.size.x * d) + "px", d = Math.floor(this.size.y * d) + "px"; ig.domHandler.css(f, { "float": "left", position: "absolute", left: e, top: q, width: n, height: d, "z-index": 3 }); ig.domHandler.addEvent(f, "mousemove", ig.input.mousemove.bind(ig.input), !1); ig.domHandler.appendChild(j, c); ig.domHandler.appendChild(f, j); ig.domHandler.appendToBody(f); ig.sizeHandler.dynamicClickableEntityDivs[b] = {}; ig.sizeHandler.dynamicClickableEntityDivs[b].width = this.size.x; ig.sizeHandler.dynamicClickableEntityDivs[b].height = this.size.y; ig.sizeHandler.dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x; ig.sizeHandler.dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y } }) }); ig.baked = !0; ig.module("game.entities.buttons.button-branding-logo").requires("game.entities.buttons.button", "plugins.clickable-div-layer").defines(function() { EntityButtonBrandingLogo = EntityButton.extend({ type: ig.Entity.TYPE.A, gravityFactor: 0, logo: new ig.AnimationSheet("branding/logo.png", _SETTINGS.Branding.Logo.Width, _SETTINGS.Branding.Logo.Height), zIndex: 10001, size: { x: 64, y: 66 }, clickableLayer: null, link: null, newWindow: !1, div_layer_name: "branding-logo", name: "brandinglogo", init: function(b, c, d) { this.parent(b, c, d); if (!ig.global.wm) { if ("undefined" == typeof wm) if (_SETTINGS.Branding.Logo.Enabled) this.size.x = _SETTINGS.Branding.Logo.Width, this.size.y = _SETTINGS.Branding.Logo.Height, this.anims.idle = new ig.Animation(this.logo, 0, [0], !0), this.currentAnim = this.anims.idle, d && d.centralize && (this.pos.x = ig.system.width / 2 - this.size.x / 2, console.log("centralize true ... centering branded logo ...")), _SETTINGS.Branding.Logo.LinkEnabled && (this.link = _SETTINGS.Branding.Logo.Link, this.newWindow = _SETTINGS.Branding.Logo.NewWindow, this.clickableLayer = new ClickableDivLayer(this)); else { this.kill(); return } this.div_layer_name = d.div_layer_name ? d.div_layer_name : "branding-logo" } }, show: function() { var b = ig.domHandler.getElementById("#" + this.div_layer_name); ig.domHandler.show(b) }, hide: function() { var b = ig.domHandler.getElementById("#" + this.div_layer_name); ig.domHandler.hide(b) }, clicked: function() {}, clicking: function() {}, released: function() {} }) }); ig.baked = !0; ig.module("game.entities.branding-logo-placeholder").requires("impact.entity", "game.entities.buttons.button-branding-logo").defines(function() { EntityBrandingLogoPlaceholder = ig.Entity.extend({ gravityFactor: 0, size: { x: 32, y: 32 }, _wmDrawBox: !0, _wmBoxColor: "rgba(0, 0, 255, 0.7)", init: function(b, c, d) { this.parent(b, c, d); if (d) switch (console.log("settings found ... using that div layer name"), b = d.div_layer_name, console.log("settings.centralize:", d.centralize), d.centralize) { case "true": console.log("centralize true"); centralize = !0; break; case "false": console.log("centralize false"); centralize = !1; break; default: console.log("default ... centralize false"), centralize = !1 } else b = "branding-logo", centralize = !1; if ("undefined" == typeof wm) { if (_SETTINGS.Branding.Logo.Enabled) try { ig.game.spawnEntity(EntityButtonBrandingLogo, this.pos.x, this.pos.y, { div_layer_name: b, centralize: centralize }) } catch (e) { console.log(e) } this.kill() } } }) }); ig.baked = !0; ig.module("game.entities.buttons.button-more-games").requires("game.entities.buttons.button", "plugins.clickable-div-layer").defines(function() { EntityButtonMoreGames = EntityButton.extend({ type: ig.Entity.TYPE.A, gravityFactor: 0, logo: new ig.AnimationSheet("media/graphics/menu/btmoregames.png", 123, 74), size: { x: 123, y: 74 }, clickableLayer: null, link: null, newWindow: !1, div_layer_name: "more-games", name: "moregames", init: function(b, c, d) { this.parent(b, c, d); this.animSheet = this.logo; this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; ig.global.wm || (this.div_layer_name = d.div_layer_name ? d.div_layer_name : "more-games", _SETTINGS.MoreGames.Disabled ? (this.anims.idle = new ig.Animation(this.logo, 0, [0], !0), this.currentAnim = this.anims.idle, _SETTINGS.MoreGames.Link && (this.link = _SETTINGS.MoreGames.Link), _SETTINGS.MoreGames.NewWindow && (this.newWindow = _SETTINGS.MoreGames.NewWindow), this.clickableLayer = new ClickableDivLayer(this)) : this.kill()) }, ready: function() { this.pos.x = -200; this.posChange() }, show: function() { var b = ig.domHandler.getElementById("#" + this.div_layer_name); ig.domHandler.show(b) }, hide: function() { var b = ig.domHandler.getElementById("#" + this.div_layer_name); ig.domHandler.hide(b) }, clicked: function() {}, clicking: function() {}, released: function() {}, posChange: function() { this.tween({ pos: { x: -4, y: this.pos.y } }, 0.8, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endPosChange() }.bind(this) }).start() }, endPosChange: function() { this.show() } }) }); ig.baked = !0; ig.module("game.entities.opening-shield").requires("impact.entity").defines(function() { EntityOpeningShield = ig.Entity.extend({ size: { x: 48, y: 48 }, move: 0, mIconAnim: 0, shieldAnim: 0, titleAnim: 0, init: function(b, c, d) { this.parent(b, c, d) }, ready: function() { if (!ig.wm) if (_SETTINGS.DeveloperBranding.Splash.Disabled) { this.initTimer = new ig.Timer(0.1); try { ig.soundHandler.playSound(ig.soundHandler.SOUNDID.openingSound) } catch (b) { console.log(b) } } else ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1, this.kill() }, update: function() { this.parent(); this.updateOriginalShieldOpening() }, draw: function() { this.parent(); ig.global.wm || (this.nextLevelTimer && 0 > this.nextLevelTimer.delta() && (ig.system.context.globalAlpha = -this.nextLevelTimer.delta()), this.drawOriginalShieldOpening()) }, updateOriginalShieldOpening: function() { this.initTimer && 0 < this.initTimer.delta() && (this.initTimer = null, this.sheildTimer = new ig.Timer(0.05)); this.sheildTimer && 0 < this.sheildTimer.delta() && (3 > this.shieldAnim ? (this.shieldAnim++, this.sheildTimer.reset()) : (this.sheildTimer = null, this.moveTimer = new ig.Timer(0.0010), this.mIconTimer = new ig.Timer(0.05), this.titleTimer = new ig.Timer(0.15))); this.moveTimer && 0 < this.moveTimer.delta() && (this.move += 0.3, this.moveTimer.reset()); this.mIconTimer && 0 < this.mIconTimer.delta() && (12 > this.mIconAnim ? (this.mIconAnim++, this.moveTimer.reset()) : this.mIconTimer = null); this.titleTimer && 0 < this.titleTimer.delta() && (11 > this.titleAnim ? (this.titleAnim++, this.titleTimer.reset()) : (this.titleTimer = null, this.nextLevelTimer = new ig.Timer(1))); this.nextLevelTimer && 0 < this.nextLevelTimer.delta() && (this.nextLevelTimer = null, ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1) }, drawOriginalShieldOpening: function() { if (this.moveTimer) { var b = ig.system.context; b.save(); var c = ig.system.width / 2, d = ig.system.height / 2; b.translate(c, d); b.rotate(this.move * Math.PI / 180); b.beginPath(); b.moveTo(0, 0); for (var e = 0, f = 1; 48 >= f; f += 1) b.lineTo(0 + 800 * Math.cos(2 * f * Math.PI / 48), 0 + 800 * Math.sin(2 * f * Math.PI / 48)), e++, 2 == e && (e = 0, b.lineTo(0, 0)); b.translate(-c, -d); c = b.createRadialGradient(c, d, 100, c, d, 250); c.addColorStop(0, "rgba(255,255,255,0.1)"); c.addColorStop(1, "rgba(0,0,0,0)"); b.fillStyle = c; b.fill(); b.restore() } this.shieldImage.drawTile(ig.system.width / 2 - 91, 0 - (768 - ig.system.height) / 2, this.shieldAnim, 182, 768); this.moveTimer && (this.mIconImage.drawTile(ig.system.width / 2 - 96, ig.system.height / 2 - 70, this.mIconAnim, 166, 160), this.titleImage.drawTile(ig.system.width / 2 - 204, ig.system.height / 2 + 100, this.titleAnim, 409, 76)); ig.system.context.globalAlpha = 1 } }) }); ig.baked = !0; ig.module("game.entities.opening-kitty").requires("impact.entity").defines(function() { EntityOpeningKitty = ig.Entity.extend({ size: { x: 48, y: 48 }, kittyAnim: -1, soundKey: "kittyopeningSound", init: function(b, c, d) { this.parent(b, c, d) }, ready: function() { if (!ig.wm) if (_SETTINGS.DeveloperBranding.Splash.Disabled) { this.initTimer = new ig.Timer(0.1); try { ig.soundHandler.sfxPlayer.play(this.soundKey) } catch (b) { console.log(b) } } else ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1, this.kill() }, update: function() { this.parent(); this.updateKittyOpening() }, draw: function() { this.parent(); ig.global.wm || (this.nextLevelTimer && 0 > this.nextLevelTimer.delta() && (ig.system.context.globalAlpha = -this.nextLevelTimer.delta()), this.drawKittyOpening()) }, updateKittyOpening: function() { this.initTimer && 0 < this.initTimer.delta() && (this.initTimer = null, this.kittyTimer = new ig.Timer(0.15)); this.kittyTimer && 0 < this.kittyTimer.delta() && (7 > this.kittyAnim ? (this.kittyAnim++, this.kittyTimer.reset()) : (this.kittyTimer = null, this.nextLevelTimer = new ig.Timer(2))); this.nextLevelTimer && 0 < this.nextLevelTimer.delta() && (this.nextLevelTimer = null, ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1) }, drawKittyOpening: function() { var b = ig.system.context.createLinearGradient(0, 0, 0, ig.system.height); b.addColorStop(0, "#ffed94"); b.addColorStop(1, "#ffcd85"); ig.system.context.fillStyle = b; ig.system.context.fillRect(0, 0, ig.system.width, ig.system.height); 0 <= this.kittyAnim && (this.kittyImage.drawTile(ig.system.width / 2 - this.kittyImage.width / 8, ig.system.height / 2 - this.kittyImage.height / 4, this.kittyAnim, 218, 325), this.kittyTitleImage.drawTile(ig.system.width / 2 - this.kittyTitleImage.width / 2, ig.system.height / 2 + this.kittyImage.height / 4 + 10, this.kittyAnim, 380, 37)); ig.system.context.globalAlpha = 1 } }) }); ig.baked = !0; ig.module("game.entities.pointer").requires("impact.entity").defines(function() { EntityPointer = ig.Entity.extend({ checkAgainst: ig.Entity.TYPE.BOTH, isFirstPressed: !1, isPressed: !1, isReleased: !1, isHovering: !1, hoveringItem: null, objectArray: [], clickedObjectList: [], ignorePause: !0, zIndex: 5E3, realpos: { x: 0, y: 0 }, check: function(b) { this.objectArray.push(b) }, clickObject: function(b) { this.isFirstPressed && "function" == typeof b.clicked && (b.clicked(), this.addToClickedObjectList(b)); this.isPressed && !this.isReleased && "function" == typeof b.clicking && b.clicking(); this.isReleased && "function" == typeof b.released && (b.released(), this.removeFromClickedObjectList(b)) }, refreshPos: function() { this.pos = ig.game.io.getClickPos(); this.pos.x += ig.game.screen.x; this.pos.y += ig.game.screen.y }, update: function() { this.parent(); this.refreshPos(); var b = null, c = -1; for (a = this.objectArray.length - 1; - 1 < a; a--) this.objectArray[a].zIndex > c && (c = this.objectArray[a].zIndex, b = this.objectArray[a]); if (null != b) null != this.hoveringItem ? this.hoveringItem != b && ("function" == typeof this.hoveringItem.leave && this.hoveringItem.leave(), "function" == typeof b.over && b.over()) : "function" == typeof b.over && b.over(), this.hoveringItem = b, this.clickObject(b), this.objectArray = []; else if (null != this.hoveringItem && "function" == typeof this.hoveringItem.leave && (this.hoveringItem.leave(), this.hoveringItem = null), this.isReleased) { for (b = 0; b < this.clickedObjectList.length; b++) c = this.clickedObjectList[b], "function" == typeof c.releasedOutside && c.releasedOutside(); this.clickedObjectList = [] } this.isFirstPressed = ig.input.pressed("click"); this.isReleased = ig.input.released("click"); this.isPressed = ig.input.state("click") }, addToClickedObjectList: function(b) { this.clickedObjectList.push(b) }, removeFromClickedObjectList: function(b) { for (var c = [], d = 0; d < this.clickedObjectList.length; d++) { var e = this.clickedObjectList[d]; e != b && c.push(e) } this.clickedObjectList = c } }) }); ig.baked = !0; ig.module("game.entities.pointer-selector").requires("game.entities.pointer").defines(function() { EntityPointerSelector = EntityPointer.extend({ zIndex: 1E3, _wmDrawBox: !0, _wmBoxColor: "rgba(0, 0, 255, 0.7)", size: { x: 20, y: 20 }, init: function(b, c, d) { this.parent(b, c, d) } }) }); ig.baked = !0; ig.module("game.entities.select").requires("impact.entity").defines(function() { EntitySelect = ig.Entity.extend({ type: ig.Entity.TYPE.B, checkAgainst: ig.Entity.TYPE.A, collides: ig.Entity.COLLIDES.NEVER, canSelect: !1, canSelectTimerDuration: 0.35, zIndex: 99999, isHovering: !1, isSelected: !1, init: function(b, c, d) { this.parent(b, c, d); this.canSelectTimer = new ig.Timer(this.canSelectTimerDuration) }, doesClickableLayerExist: function(b) { for (k in dynamicClickableEntityDivs) if (k == b) return !0; return !1 }, checkClickableLayer: function(b, c, d) { "undefined" == typeof wm && (this.doesClickableLayerExist(b) ? (ig.game.showOverlay([b]), $("#" + b).find("[href]").attr("href", c)) : this.createClickableOutboundLayer(b, c, "media/graphics/misc/invisible.png", d)) }, createClickableOutboundLayer: function(b, c, d, e) { var f = ig.$new("div"); f.id = b; document.body.appendChild(f); $("#" + f.id).css("float", "left"); $("#" + f.id).css("width", this.size.x * multiplier); $("#" + f.id).css("height", this.size.y * multiplier); $("#" + f.id).css("position", "absolute"); var j = w / 2 - destW / 2, q = h / 2 - destH / 2; w == mobileWidth ? ($("#" + f.id).css("left", this.pos.x), $("#" + f.id).css("top", this.pos.y)) : ($("#" + f.id).css("left", j + this.pos.x * multiplier), $("#" + f.id).css("top", q + this.pos.y * multiplier)); e ? $("#" + f.id).html("") : $("#" + f.id).html(""); dynamicClickableEntityDivs[b] = {}; dynamicClickableEntityDivs[b].width = $("#" + f.id).width(); dynamicClickableEntityDivs[b].height = $("#" + f.id).height(); dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x; dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y }, hovered: function() { this.isHovering = !0; this.dehoverOthers() }, dehoverOthers: function() { var b = ig.game.getEntitiesByType(EntitySelect); for (i = 0; i < b.length; i++) b[i] != this && (b[i].isHovering = !1) }, deselectOthers: function() { var b = ig.game.getEntitiesByType(EntitySelect); for (i = 0; i < b.length; i++) b[i] != this && (b[i].isSelected = !1) }, update: function() { this.parent(); this.canSelectTimer && 0 < this.canSelectTimer.delta() && (this.canSelect = !0, this.canSelectTimer = null) } }) }); ig.baked = !0; ig.module("game.entities.text").requires("impact.entity").defines(function() { EntityText = ig.Entity.extend({ text: "", textTmp: 0, size: { x: 5, y: 5 }, _wmDrawBox: !0, _wmBoxColor: "rgba(255, 255, 255, 0.5)", newText: [], idxText: 0, textStatus: !0, type: ig.Entity.TYPE.B, init: function(b, c, d) { this.parent(b, c, d); this.textTmp = this.text; this.timer = new ig.Timer; "undefined" == typeof wm && d && (this.name = d.name, this.useLanguageFile = d.useLanguageFile, this.languageFileSectionName = d.languageFileSectionName, this.text = eval(this.useLanguageFile) ? ig.game.language.selected[this.languageFileSectionName][d.text] : d.text, this.fontSize = d.fontSize, this.fontSize || (this.fontSize = "24"), this.fontStyle = d.fontStyle, this.fontStyle || (this.fontStyle = "Arial"), this.fontWeight = d.fontWeight, this.fontWeight || (this.fontWeight = "bold"), this.fontColor = d.fontColor, this.fontColor || (this.fontColor = "#fff"), this.textAlign = d.textAlign, this.textAlign || (this.textAlign = "left"), this.textSpace = d.textSpace, this.textSpace || (this.textSpace = 22), this.textBorder = d.textBorder, this.textStroke = d.textStroke, this.textStroke || (this.textStroke = ""), this.textStrokeSize = d.textStrokeSize, this.textStrokeSize || (this.textStrokeSize = 8), this.backgroundBorderColor = d.backgroundBorderColor, this.backgroundColor = d.backgroundColor, this.backgroundHeight = d.backgroundHeight) }, update: function() { this.parent(); if (this.textStatus) { this.newText = this.text.split("
"); this.idxText = this.newText.length - 1; for (x = 0; x <= this.idxText; x++) { var b = this.newText[x]; "undefined" != typeof b && (b = b.replace("
", " "), b = b.replace(">", " "), b = b.replace("r>", " "), b = b.replace("br>", " "), b = b.replace("<", " "), b = b.replace("", " "), b = b.replace("<", " "), b = b.replace("", " "), b = b.replace("r>", " "), b = b.replace("br>", " "), "b" == b.substr(b.length - 1, 1) && (b = b.substr(0, b.length - 1)), this.textBorder && (ig.system.context.fillStyle = this.textBorder, ig.system.context.textAlign = this.textAlign, ig.system.context.font = this.fontWeight + " " + this.fontSize + "px " + this.fontStyle, ig.system.context.fillText(b, this.pos.x + 1, this.pos.y + 1 + i * this.textSpace), ig.system.context.fillText(b, this.pos.x - 1, this.pos.y + 1 + i * this.textSpace), ig.system.context.fillText(b, this.pos.x + 1, this.pos.y - 1 + i * this.textSpace), ig.system.context.fillText(b, this.pos.x - 1, this.pos.y - 1 + i * this.textSpace)), ig.system.context.fillStyle = this.fontColor, ig.system.context.textAlign = this.textAlign, ig.system.context.font = this.fontWeight + " " + this.fontSize + "px " + this.fontStyle, "" != this.textStroke && (ig.system.context.strokeStyle = this.textStroke, ig.system.context.lineWidth = this.textStrokeSize, ig.system.context.strokeText(b, this.pos.x, this.pos.y + i * this.textSpace)), ig.system.context.fillText(b, this.pos.x, this.pos.y + i * this.textSpace), this.timer.tick()) } } }) }); ig.baked = !0; ig.module("game.entities.landmarker").requires("impact.entity").defines(function() { EntityLandmarker = ig.Entity.extend({ size: { x: 32, y: 32 }, gravityFactor: 0, clicking: !1, landpoints: [], segments: [], segmentSize: 20, segmentWidth: 5, name: "game", rocktile: new ig.Image("media/graphics/gameplay/rock.png"), drawLandPoints: [], zIndex: 50, landlevel: { 1: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 329.41535956539553, y: 450.3066278710067 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 329.41535956539553, y: 450.3066278710067 }, p3: { x: 453.41013909589236, y: 421.3015526205514 }, p1: { x: 368.7141543019781, y: 478.2609525613615 }, p2: { x: 412.8793066087622, y: 478.3967932987995 } }, { p0: { x: 453.41013909589236, y: 421.3015526205514 }, p3: { x: 558.4760603353126, y: 322.209912229989 }, p1: { x: 473.849416913595, y: 381.92083807727204 }, p2: { x: 508.8505807536656, y: 327.7691701266621 } }, { p0: { x: 558.4760603353126, y: 322.209912229989 }, p3: { x: 699.7876476687082, y: 390.8803279550112 }, p1: { x: 627.3970673253797, y: 318.1600882955798 }, p2: { x: 636.6779839175908, y: 365.48778052241556 } }, { p0: { x: 699.7876476687082, y: 390.8803279550112 }, p3: { x: 812.3454038997211, y: 356.5236768802228 }, p1: { x: 747.6100278551529, y: 402.65181058495807 }, p2: { x: 788.6128133704738, y: 388.3899721448468 } }, { p0: { x: 812.3454038997211, y: 356.5236768802228 }, p3: { x: 873.2924791086352, y: 296.57938718662956 }, p1: { x: 838.5292479108635, y: 329.5598885793872 }, p2: { x: 854.5738161559888, y: 306.3844011142061 } }, { p0: { x: 873.2924791086352, y: 296.57938718662956 }, p3: { x: 979.3649025069639, y: 295.6880222841225 }, p1: { x: 919.6434540389972, y: 294.79665738161555 }, p2: { x: 950.841225626741, y: 296.8022284122562 } }, { p0: { x: 979.3649025069639, y: 295.6880222841225 }, p3: { x: 1005.6601671309197, y: 295.91086350974945 }, p1: { x: 977.136490250696, y: 340.47910863509776 }, p2: { x: 1006.5515320334267, y: 341.37047353760465 } }, { p0: { x: 1005.6601671309197, y: 295.91086350974945 }, p3: { x: 1133.9610027855158, y: 164.88022284122567 }, p1: { x: 1093.0139275766019, y: 299.4763231197771 }, p2: { x: 1110.7855153203345, y: 276.3008356545963 } }, { p0: { x: 1133.9610027855158, y: 164.88022284122567 }, p3: { x: 1217.1922005571032, y: 187.16434540389972 }, p1: { x: 1151.2869080779938, y: 72.40111420612811 }, p2: { x: 1193.2367688022282, y: 36.4122562674093 } }, { p0: { x: 1217.1922005571032, y: 187.16434540389972 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 2: [ [{ p0: { x: -23.821552586704087, y: 142.16290068008564 }, p3: { x: 19.836292617491203, y: 214.72321205065722 }, p1: { x: 8.869775868086975, y: 102.41232393474556 }, p2: { x: 8.764781723521672, y: 159.831891999248 } }, { p0: { x: 19.836292617491203, y: 214.72321205065722 }, p3: { x: 112.00343154772487, y: 277.92668513487433 }, p1: { x: 31.84252088733537, y: 266.59912420679825 }, p2: { x: 41.167443903902495, y: 276.181489687791 } }, { p0: { x: 112.00343154772487, y: 277.92668513487433 }, p3: { x: 258.7727637885207, y: 314.83856305726613 }, p1: { x: 196.12543742161773, y: 278.8960075274436 }, p2: { x: 239.97571308819042, y: 269.1599084584772 } }, { p0: { x: 258.7727637885207, y: 314.83856305726613 }, p3: { x: 363.0021185953792, y: 281.6905589589427 }, p1: { x: 289.5748031496063, y: 367.83179954854637 }, p2: { x: 327.17439850220063, y: 363.5965906946196 } }, { p0: { x: 363.0021185953792, y: 281.6905589589427 }, p3: { x: 464.3735810679646, y: 301.2360468364273 }, p1: { x: 396.9422807233358, y: 200.3526157863776 }, p2: { x: 438.6542601059616, y: 202.0948187585414 } }, { p0: { x: 464.3735810679646, y: 301.2360468364273 }, p3: { x: 576.3568094962696, y: 352.88766603196814 }, p1: { x: 496.4461156253062, y: 403.12997231279434 }, p2: { x: 542.2938225444176, y: 404.63880013142295 } }, { p0: { x: 576.3568094962696, y: 352.88766603196814 }, p3: { x: 682.4617134556745, y: 381.41336556142005 }, p1: { x: 612.1361342051312, y: 303.0530014967615 }, p2: { x: 650.1639443796512, y: 307.90412272291474 } }, { p0: { x: 682.4617134556745, y: 381.41336556142005 }, p3: { x: 790.9170133171427, y: 388.23829057924104 }, p1: { x: 722.8257781142343, y: 456.0027360569653 }, p2: { x: 755.5385670670198, y: 455.1238161846224 } }, { p0: { x: 790.9170133171427, y: 388.23829057924104 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 814.5700720712758, y: 344.68794924460605 }, p2: { x: 848.0935331833372, y: 295.8419542824864 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1014.558005752637, y: 358.77660594439106 }, p1: { x: 974.0594439117931, y: 398.3547459252156 }, p2: { x: 1032.0460210930012, y: 399.275167785235 } }, { p0: { x: 1014.558005752637, y: 358.77660594439106 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 3: [ [{ p0: { x: -23.821552586704087, y: 142.16290068008564 }, p3: { x: 19.836292617491203, y: 212.79936435526642 }, p1: { x: 8.869775868086975, y: 102.41232393474556 }, p2: { x: 8.764781723521672, y: 159.831891999248 } }, { p0: { x: 19.836292617491203, y: 212.79936435526642 }, p3: { x: 80.7090883070729, y: 277.92668513487433 }, p1: { x: 31.84252088733537, y: 266.59912420679825 }, p2: { x: 41.167443903902495, y: 276.181489687791 } }, { p0: { x: 80.7090883070729, y: 277.92668513487433 }, p3: { x: 260.7700457058332, y: 308.6592344312516 }, p1: { x: 194.20158972622696, y: 279.73342541211036 }, p2: { x: 237.08994154510427, y: 267.23606076308647 } }, { p0: { x: 260.7700457058332, y: 308.6592344312516 }, p3: { x: 354.37949266949977, y: 418.66270591473733 }, p1: { x: 296.19837658850764, y: 363.2552575223399 }, p2: { x: 327.3461528501835, y: 399.421908481401 } }, { p0: { x: 354.37949266949977, y: 418.66270591473733 }, p3: { x: 455.0650943019607, y: 436.68778392745054 }, p1: { x: 387.0738373550893, y: 438.46414229613373 }, p2: { x: 420.20146114832085, y: 445.97954694645057 } }, { p0: { x: 455.0650943019607, y: 436.68778392745054 }, p3: { x: 542.5084866585717, y: 364.14770567330805 }, p1: { x: 490.11772693316004, y: 424.94058701636095 }, p2: { x: 519.2972030102327, y: 400.5217203135847 } }, { p0: { x: 542.5084866585717, y: 364.14770567330805 }, p3: { x: 664.3022881813483, y: 367.6900416364849 }, p1: { x: 578.988154517057, y: 298.9407313477459 }, p2: { x: 635.4081176094601, y: 302.3815915627997 } }, { p0: { x: 664.3022881813483, y: 367.6900416364849 }, p3: { x: 778.1629913710452, y: 418.4314477468841 }, p1: { x: 705.2962607861937, y: 446.04410354745926 }, p2: { x: 740.2722914669222, y: 458.93000958772774 } }, { p0: { x: 778.1629913710452, y: 418.4314477468841 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 799.1792905081497, y: 389.89837008628945 }, p2: { x: 841.1657027392038, y: 294.3295497891731 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1014.558005752637, y: 358.77660594439106 }, p1: { x: 974.0594439117931, y: 398.3547459252156 }, p2: { x: 1032.0460210930012, y: 399.275167785235 } }, { p0: { x: 1014.558005752637, y: 358.77660594439106 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 4: [ [{ p0: { x: -115.65363008939516, y: 162.15049011844437 }, p3: { x: 12.521659552209115, y: 197.94311960463676 }, p1: { x: -80.93000884666006, y: 95.35096763765188 }, p2: { x: 11.384676613662798, y: 60.592988687654184 } }, { p0: { x: 12.521659552209115, y: 197.94311960463676 }, p3: { x: 117.93342425809152, y: 280.7666490164015 }, p1: { x: 17.89352056510465, y: 300.5274382258871 }, p2: { x: -10.262382209866608, y: 276.12240045236007 } }, { p0: { x: 117.93342425809152, y: 280.7666490164015 }, p3: { x: 140.937769545572, y: 281.0267927775008 }, p1: { x: 103.3678802237503, y: 325.59336216032193 }, p2: { x: 150.7775243192764, y: 326.5400029531618 } }, { p0: { x: 140.937769545572, y: 281.0267927775008 }, p3: { x: 256.76377246325006, y: 302.49182716161624 }, p1: { x: 235.209082074312, y: 279.26477850192606 }, p2: { x: 256.49037148114934, y: 280.5269698147743 } }, { p0: { x: 256.76377246325006, y: 302.49182716161624 }, p3: { x: 297.7347216473643, y: 411.0460962222872 }, p1: { x: 262.9189429583823, y: 395.14111380169646 }, p2: { x: 239.28432061959444, y: 411.1315745482255 } }, { p0: { x: 297.7347216473643, y: 411.0460962222872 }, p3: { x: 502.09358360073225, y: 411.0497617734247 }, p1: { x: 356.7330741128121, y: 411.34432097221946 }, p2: { x: 431.5321173845027, y: 411.2963637468274 } }, { p0: { x: 502.09358360073225, y: 411.0497617734247 }, p3: { x: 580.4902863531049, y: 350.82092760355044 }, p1: { x: 548.7254799006181, y: 409.4223803416678 }, p2: { x: 552.6467637208882, y: 386.75644719024643 } }, { p0: { x: 580.4902863531049, y: 350.82092760355044 }, p3: { x: 691.3932654090715, y: 374.54855203644064 }, p1: { x: 612.1361342051312, y: 303.0530014967615 }, p2: { x: 651.19731359386, y: 303.77064586607946 } }, { p0: { x: 691.3932654090715, y: 374.54855203644064 }, p3: { x: 788.8502748887252, y: 377.9045984371528 }, p1: { x: 723.8591473284431, y: 420.8681827738652 }, p2: { x: 756.5719362812287, y: 422.05600132994 } }, { p0: { x: 788.8502748887252, y: 377.9045984371528 }, p3: { x: 881.0968360498562, y: 357.6836049856185 }, p1: { x: 814.5700720712758, y: 344.68794924460605 }, p2: { x: 848.0935331833372, y: 295.8419542824864 } }, { p0: { x: 881.0968360498562, y: 357.6836049856185 }, p3: { x: 991.5474592521572, y: 358.6040268456377 }, p1: { x: 895.8235858101631, y: 357.6836049856187 }, p2: { x: 949.2080536912752, y: 357.6836049856185 } }, { p0: { x: 991.5474592521572, y: 358.6040268456377 }, p3: { x: 1088.9605891756723, y: 357.7432367301822 }, p1: { x: 1022.6277969796079, y: 358.05334657107136 }, p2: { x: 1053.7467745913866, y: 357.9403992168818 } }, { p0: { x: 1088.9605891756723, y: 357.7432367301822 }, p3: { x: 1161.8255033557052, y: 325.6414189837009 }, p1: { x: 1130.531160115053, y: 358.77660594439124 }, p2: { x: 1148.0191754554169, y: 357.85618408437193 } }, { p0: { x: 1161.8255033557052, y: 325.6414189837009 }, p3: { x: 1268.594439117929, y: 202.30488974113135 }, p1: { x: 1202.3240651965477, y: 180.21476510067112 }, p2: { x: 1241.9022051773734, y: 133.2732502396932 } }, { p0: { x: 1268.594439117929, y: 202.30488974113135 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 5: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 335.11268894225014, y: 456.9535121440037 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 335.11268894225014, y: 456.9535121440037 }, p3: { x: 460.53633209695283, y: 531.2485303511983 }, p1: { x: 366.8331696296621, y: 498.6396291129315 }, p2: { x: 389.5512702578272, y: 531.5396450472757 } }, { p0: { x: 460.53633209695283, y: 531.2485303511983 }, p3: { x: 1292.9794289014458, y: 531.3943132986161 }, p1: { x: 595.8989400278431, y: 532.5889186711215 }, p2: { x: 672.7580545336027, y: 532.5296573651302 } }, { p0: { x: 1292.9794289014458, y: 531.3943132986161 }, p3: { x: 1292.391691394658, y: 306.16023738872406 }, p1: { x: 1293.3412462908016, y: 457.139465875371 }, p2: { x: 1294.290801186944, y: 349.83976261127583 } }, { p0: { x: 1292.391691394658, y: 306.16023738872406 }, p3: { x: 1118.6231454005929, y: 304.26112759643917 }, p1: { x: 1219.275964391691, y: 304.26112759643917 }, p2: { x: 1175.5964391691396, y: 305.2106824925814 } }, { p0: { x: 1118.6231454005929, y: 304.26112759643917 }, p3: { x: 904.973293768546, y: 305.2106824925816 }, p1: { x: 1045.5074183976265, y: 304.26112759643917 }, p2: { x: 976.1899109792283, y: 304.2611275964392 } }, { p0: { x: 904.973293768546, y: 305.2106824925816 }, p3: { x: 795.7744807121666, y: 198.8605341246291 }, p1: { x: 902.1246290801188, y: 252.9851632047479 }, p2: { x: 801.4718100890206, y: 252.98516320474766 } }, { p0: { x: 795.7744807121666, y: 198.8605341246291 }, p3: { x: 991.3827893175078, y: 198.86053412462908 }, p1: { x: 884.0830860534123, y: 198.86053412462908 }, p2: { x: 938.2077151335308, y: 198.86053412462903 } }, { p0: { x: 991.3827893175078, y: 198.86053412462908 }, p3: { x: 1019.8694362017804, y: 198.86053412462903 }, p1: { x: 989.4836795252226, y: 252.0356083086054 }, p2: { x: 1019.8694362017807, y: 252.03560830860533 } }, { p0: { x: 1019.8694362017804, y: 198.86053412462903 }, p3: { x: 1149.2462908011867, y: 199.98813056379814 }, p1: { x: 1105.566765578635, y: 199.9881305637982 }, p2: { x: 1120.7596439169142, y: 199.98813056379817 } }, { p0: { x: 1149.2462908011867, y: 199.98813056379814 }, p3: { x: 1151.857566765579, y: 99.15727002967353 }, p1: { x: 1175.59643916914, y: 177.02077151335314 }, p2: { x: 1177.495548961424, y: 124.79525222551933 } }, { p0: { x: 1151.857566765579, y: 99.15727002967353 }, p3: { x: 1369.2462908011867, y: 286.2195845697329 }, p1: { x: 1333.1632047477747, y: 98.20771513353111 }, p2: { x: 1360.7002967359053, y: 138.08902077151336 } }, { p0: { x: 1369.2462908011867, y: 286.2195845697329 } }] ], 6: [ [{ p0: { x: -47.26581021517704, y: 240.71028627379977 }, p3: { x: 32.24429918847303, y: 240.34676659594825 }, p1: { x: -23.148336032830287, y: 240.22324767498623 }, p2: { x: 4.671625291965711, y: 240.74414583221235 } }, { p0: { x: 32.24429918847303, y: 240.34676659594825 }, p3: { x: 36.37945300000024, y: 409.31418787152893 }, p1: { x: 5.178073816369327, y: 287.88393717811556 }, p2: { x: 5.861222932052492, y: 358.73979569235223 } }, { p0: { x: 36.37945300000024, y: 409.31418787152893 }, p3: { x: 250.32170208728533, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 250.32170208728533, y: 408.4159540597435 }, p3: { x: 355.408672028931, y: 157.58776161546248 }, p1: { x: 275.41673227018765, y: 272.4188991030994 }, p2: { x: 325.3289292648472, y: 272.44697725544086 } }, { p0: { x: 355.408672028931, y: 157.58776161546248 }, p3: { x: 438.2107507016041, y: 156.78764240193814 }, p1: { x: 381.04035779033865, y: 154.6227157936926 }, p2: { x: 409.8472533445079, y: 155.04915878934773 } }, { p0: { x: 438.2107507016041, y: 156.78764240193814 }, p3: { x: 353.2754119881266, y: 576.0454760893139 }, p1: { x: 423.38308379105655, y: 293.0963182482885 }, p2: { x: 307.43035897334903, y: 315.36263833764593 } }, { p0: { x: 353.2754119881266, y: 576.0454760893139 }, p3: { x: 515.6897886462439, y: 579.0989266064831 }, p1: { x: 411.48078117452275, y: 577.9005652411217 }, p2: { x: 463.1702937873668, y: 579.1843714907683 } }, { p0: { x: 515.6897886462439, y: 579.0989266064831 }, p3: { x: 531.0544350411851, y: 308.32032421377534 }, p1: { x: 475.4281842648411, y: 509.2505567719149 }, p2: { x: 476.39982183298764, y: 395.52780722831085 } }, { p0: { x: 531.0544350411851, y: 308.32032421377534 }, p3: { x: 683.7470781237258, y: 309.2698791099178 }, p1: { x: 579.7146065583031, y: 306.29072590510725 }, p2: { x: 635.2173951229917, y: 307.3055250594414 } }, { p0: { x: 683.7470781237258, y: 309.2698791099178 }, p3: { x: 685.1613728897564, y: 582.4546144628955 }, p1: { x: 636.2472506446009, y: 399.1162414288495 }, p2: { x: 642.1483428585765, y: 515.8181441772635 } }, { p0: { x: 685.1613728897564, y: 582.4546144628955 }, p3: { x: 786.3933601420322, y: 583.4694136172293 }, p1: { x: 719.6856230512981, y: 582.4546144628957 }, p2: { x: 749.4550724273998, y: 582.4546144628954 } }, { p0: { x: 786.3933601420322, y: 583.4694136172293 }, p3: { x: 846.33878081066, y: 178.5645510379483 }, p1: { x: 717.5175061637003, y: 347.426728816005 }, p2: { x: 826.0427977239794, y: 299.7311685623052 } }, { p0: { x: 846.33878081066, y: 178.5645510379483 }, p3: { x: 944.2568616257106, y: 180.70694663145147 }, p1: { x: 883.3257507794813, y: 176.64775001411533 }, p2: { x: 909.6814198154342, y: 176.6477500141154 } }, { p0: { x: 944.2568616257106, y: 180.70694663145147 }, p3: { x: 882.9357908670587, y: 398.5230205582148 }, p1: { x: 943.2074328266458, y: 267.3378962490826 }, p2: { x: 874.0706018155465, y: 324.71068562932487 } }, { p0: { x: 882.9357908670587, y: 398.5230205582148 }, p3: { x: 962.311829913237, y: 399.8770898551452 }, p1: { x: 917.095551470819, y: 399.6030639707403 }, p2: { x: 943.6178443046158, y: 398.89240343536113 } }, { p0: { x: 962.311829913237, y: 399.8770898551452 }, p3: { x: 989.3953488372092, y: 401.1501057082452 }, p1: { x: 946.7737843551799, y: 461.0232558139534 }, p2: { x: 1004.6173361522201, y: 460.00845665961947 } }, { p0: { x: 989.3953488372092, y: 401.1501057082452 }, p3: { x: 1071.5940803382668, y: 402.1649048625793 }, p1: { x: 1018.8245243128964, y: 402.16490486257925 }, p2: { x: 1052.3128964059194, y: 402.16490486257925 } }, { p0: { x: 1071.5940803382668, y: 402.1649048625793 }, p3: { x: 1141.6152219873147, y: 95.69556025369978 }, p1: { x: 1131.4672304439748, y: 319.9661733615222 }, p2: { x: 1175.103594080338, y: 192.1014799154334 } }, { p0: { x: 1141.6152219873147, y: 95.69556025369978 }, p3: { x: 1381.107822410148, y: 287.492600422833 }, p1: { x: 1349.6490486257928, y: 93.66596194503171 }, p2: { x: 1376.0338266384776, y: 180.938689217759 } }, { p0: { x: 1381.107822410148, y: 287.492600422833 } }] ], 7: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 249.30690293295126, y: 408.4159540597435 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 249.30690293295126, y: 408.4159540597435 }, p3: { x: 329.41535956539553, y: 450.3066278710067 }, p1: { x: 285.564723813528, y: 407.38718662952635 }, p2: { x: 304.0181470238324, y: 429.7408461772167 } }, { p0: { x: 329.41535956539553, y: 450.3066278710067 }, p3: { x: 453.41013909589236, y: 421.3015526205514 }, p1: { x: 368.7141543019781, y: 478.2609525613615 }, p2: { x: 412.8793066087622, y: 478.3967932987995 } }, { p0: { x: 453.41013909589236, y: 421.3015526205514 }, p3: { x: 560.5056586439805, y: 262.3367621242808 }, p1: { x: 473.849416913595, y: 381.92083807727204 }, p2: { x: 507.76493524735747, y: 262.44484226271715 } }, { p0: { x: 560.5056586439805, y: 262.3367621242808 }, p3: { x: 774.882785089427, y: 401.02831949835155 }, p1: { x: 634.8069970403106, y: 253.42548147412387 }, p2: { x: 644.5858337682272, y: 393.3124358012794 } }, { p0: { x: 774.882785089427, y: 401.02831949835155 }, p3: { x: 961.520879586825, y: 401.1748396709205 }, p1: { x: 862.2823322948992, y: 401.6370114306241 }, p2: { x: 895.1667245755477, y: 402.5971603055234 } }, { p0: { x: 961.520879586825, y: 401.1748396709205 }, p3: { x: 988.9795827027153, y: 401.1037000830355 }, p1: { x: 954.2163515049438, y: 459.45418033414404 }, p2: { x: 995.6308986084199, y: 459.61907341864594 } }, { p0: { x: 988.9795827027153, y: 401.1037000830355 }, p3: { x: 1097.0816044097123, y: 398.18273687186036 }, p1: { x: 1053.59694241109, y: 400.3357694323554 }, p2: { x: 1075.9152213984112, y: 400.01575906764737 } }, { p0: { x: 1097.0816044097123, y: 398.18273687186036 }, p3: { x: 1095.9772918666488, y: 246.18570494738162 }, p1: { x: 1095.8679913077785, y: 341.4939077894318 }, p2: { x: 1095.8538576148221, y: 288.6009175122347 } }, { p0: { x: 1095.9772918666488, y: 246.18570494738162 }, p3: { x: 680.5413566430872, y: 241.34439117614914 }, p1: { x: 947.8976485068342, y: 245.69196794007306 }, p2: { x: 870.2781157431675, y: 246.87166017890917 } }, { p0: { x: 680.5413566430872, y: 241.34439117614914 }, p3: { x: 561.4962411690266, y: 155.1198419208287 }, p1: { x: 666.1710031967048, y: 190.16770790604156 }, p2: { x: 560.057975310613, y: 203.8561124044123 } }, { p0: { x: 561.4962411690266, y: 155.1198419208287 }, p3: { x: 754.4246914504167, y: 157.71031575271127 }, p1: { x: 624.0584232944798, y: 155.46431177384042 }, p2: { x: 681.5627108707989, y: 157.08978652547285 } }, { p0: { x: 754.4246914504167, y: 157.71031575271127 }, p3: { x: 1067.5771670190281, y: 160.7272727272727 }, p1: { x: 832.143763213531, y: 159.71247357293865 }, p2: { x: 966.0972515856238, y: 161.74207188160685 } }, { p0: { x: 1067.5771670190281, y: 160.7272727272727 }, p3: { x: 1246.816067653277, y: 160.8599849077313 }, p1: { x: 1157.4199454932116, y: 159.37420718816065 }, p2: { x: 1207.3097469862237, y: 160.97872738498384 } }, { p0: { x: 1246.816067653277, y: 160.8599849077313 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 8: [ [{ p0: { x: -31.29167764460125, y: 621.1216778917576 }, p3: { x: 25.435195843117945, y: 627.8100174353964 }, p1: { x: -5.218227837332208, y: 558.8532688166354 }, p2: { x: 13.526245364095907, y: 572.0412481826661 } }, { p0: { x: 25.435195843117945, y: 627.8100174353964 }, p3: { x: 100.60629045802789, y: 682.7259525774114 }, p1: { x: 40.32793079933167, y: 679.7904164717357 }, p2: { x: 50.675549508349064, y: 682.8178954311908 } }, { p0: { x: 100.60629045802789, y: 682.7259525774114 }, p3: { x: 245.54219705059833, y: 684.6512481773907 }, p1: { x: 146.2245931674175, y: 684.557152884392 }, p2: { x: 197.4049021750255, y: 684.2698727130636 } }, { p0: { x: 245.54219705059833, y: 684.6512481773907 }, p3: { x: 363.29771250657205, y: 728.4242749298304 }, p1: { x: 325.0941355782338, y: 677.9754219236439 }, p2: { x: 321.9004999650089, y: 731.3879050007464 } }, { p0: { x: 363.29771250657205, y: 728.4242749298304 }, p3: { x: 427.99837439001004, y: 645.7721408558456 }, p1: { x: 396.9494484196252, y: 728.1433055025378 }, p2: { x: 416.6440124911151, y: 681.2203227105641 } }, { p0: { x: 427.99837439001004, y: 645.7721408558456 }, p3: { x: 466.2407662176655, y: 562.9157945829302 }, p1: { x: 436.67294632535976, y: 623.3326027831545 }, p2: { x: 446.73293369484213, y: 587.0632877737208 } }, { p0: { x: 466.2407662176655, y: 562.9157945829302 }, p3: { x: 561.4347064922375, y: 540.0567985432465 }, p1: { x: 493.7500085018504, y: 528.5130294720506 }, p2: { x: 536.9132780352379, y: 542.8995452282978 } }, { p0: { x: 561.4347064922375, y: 540.0567985432465 }, p3: { x: 675.8748156644265, y: 465.2295592331639 }, p1: { x: 597.9629690316232, y: 543.1223988202527 }, p2: { x: 651.2010486645913, y: 540.3899721448468 } }, { p0: { x: 675.8748156644265, y: 465.2295592331639 }, p3: { x: 773.5277732262824, y: 410.93232836310017 }, p1: { x: 696.4116008520404, y: 412.85400622644596 }, p2: { x: 732.2208749795183, y: 322.8549893495002 } }, { p0: { x: 773.5277732262824, y: 410.93232836310017 }, p3: { x: 889.011961330493, y: 375.21743404882835 }, p1: { x: 854.702277568409, y: 412.9143044404391 }, p2: { x: 876.4882844502708, y: 413.97869900049153 } }, { p0: { x: 889.011961330493, y: 375.21743404882835 }, p3: { x: 1016.0131083073903, y: 267.2049811568083 }, p1: { x: 925.371784368343, y: 275.0673439292153 }, p2: { x: 918.0809437981326, y: 262.782238243487 } }, { p0: { x: 1016.0131083073903, y: 267.2049811568083 }, p3: { x: 1038.9021792561039, y: 266.9978699000492 }, p1: { x: 1002.6609864001313, y: 312.1822054727183 }, p2: { x: 1047.7266917909228, y: 312.5361297722434 } }, { p0: { x: 1038.9021792561039, y: 266.9978699000492 }, p3: { x: 1160.7216123218093, y: 265.5172865803703 }, p1: { x: 1100.463378666229, y: 265.8128789120105 }, p2: { x: 1149.0014746845816, y: 264.6475503850564 } }, { p0: { x: 1160.7216123218093, y: 265.5172865803703 }, p3: { x: 1265.8823529411768, y: 420.235294117647 }, p1: { x: 1245.1764705882363, y: 266.82352941176475 }, p2: { x: 1260.2352941176473, y: 353.4117647058824 } }, { p0: { x: 1265.8823529411768, y: 420.235294117647 }, p3: { x: 1306.3529411764703, y: 487.0588235294118 }, p1: { x: 1274.3529411764707, y: 457.88235294117646 }, p2: { x: 1294.1176470588234, y: 469.1764705882353 } }, { p0: { x: 1306.3529411764703, y: 487.0588235294118 } }], [{ p0: { x: 1377.2415383587436, y: 588.764723813528 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 9: [ [{ p0: { x: -31.29167764460125, y: 621.1216778917576 }, p3: { x: 25.435195843117945, y: 627.8100174353964 }, p1: { x: -5.218227837332208, y: 558.8532688166354 }, p2: { x: 13.526245364095907, y: 572.0412481826661 } }, { p0: { x: 25.435195843117945, y: 627.8100174353964 }, p3: { x: 100.60629045802789, y: 682.7259525774114 }, p1: { x: 40.32793079933167, y: 679.7904164717357 }, p2: { x: 50.675549508349064, y: 682.8178954311908 } }, { p0: { x: 100.60629045802789, y: 682.7259525774114 }, p3: { x: 245.54219705059833, y: 684.6512481773907 }, p1: { x: 146.2245931674175, y: 684.557152884392 }, p2: { x: 197.4049021750255, y: 684.2698727130636 } }, { p0: { x: 245.54219705059833, y: 684.6512481773907 }, p3: { x: 363.29771250657205, y: 728.4242749298304 }, p1: { x: 325.0941355782338, y: 677.9754219236439 }, p2: { x: 321.9004999650089, y: 731.3879050007464 } }, { p0: { x: 363.29771250657205, y: 728.4242749298304 }, p3: { x: 421.29178756366275, y: 662.0595660055461 }, p1: { x: 396.9494484196252, y: 728.1433055025378 }, p2: { x: 404.1889226707558, y: 699.4239155249353 } }, { p0: { x: 421.29178756366275, y: 662.0595660055461 }, p3: { x: 455.7018440619769, y: 573.4547167386188 }, p1: { x: 429.00827566667715, y: 636.745776435849 }, p2: { x: 438.11017920382415, y: 607.1830482527628 } }, { p0: { x: 455.7018440619769, y: 573.4547167386188 }, p3: { x: 532.6921915221776, y: 572.6316488426476 }, p1: { x: 478.4206671844851, y: 531.3872809690565 }, p2: { x: 512.0030983945194, y: 520.8636170845853 } }, { p0: { x: 532.6921915221776, y: 572.6316488426476 }, p3: { x: 665.3358935087382, y: 525.5888406702896 }, p1: { x: 621.9150648400063, y: 576.6553329519891 }, p2: { x: 643.5363780059085, y: 578.7133254382601 } }, { p0: { x: 665.3358935087382, y: 525.5888406702896 }, p3: { x: 773.5277732262824, y: 442.54909483016604 }, p1: { x: 682.0403433670103, y: 481.83604215458973 }, p2: { x: 723.5981204885004, y: 347.7651689902188 } }, { p0: { x: 773.5277732262824, y: 442.54909483016604 }, p3: { x: 935.9580691149243, y: 403.95994901888815 }, p1: { x: 860.4507805624211, y: 446.4472385721756 }, p2: { x: 916.7278054083548, y: 449.42780079689874 } }, { p0: { x: 935.9580691149243, y: 403.95994901888815 }, p3: { x: 1065.833467588827, y: 435.8277356478263 }, p1: { x: 971.3598083204388, y: 313.3906972226285 }, p2: { x: 1012.9312431993302, y: 314.5187651895948 } }, { p0: { x: 1065.833467588827, y: 435.8277356478263 }, p3: { x: 1227.6446942261637, y: 564.9619417563366 }, p1: { x: 1081.1041001725864, y: 475.53549888589197 }, p2: { x: 1118.6248953837373, y: 556.8475070177524 } }, { p0: { x: 1227.6446942261637, y: 564.9619417563366 }, p3: { x: 1296.6497560343842, y: 625.7568075384542 }, p1: { x: 1265.2537978279056, y: 574.3158729239865 }, p2: { x: 1291.755965702546, y: 595.186472540745 } }, { p0: { x: 1296.6497560343842, y: 625.7568075384542 }, p3: { x: 1320.4931313842906, y: 708.6185276505811 }, p1: { x: 1306.4938358576974, y: 644.3085593518844 }, p2: { x: 1311.971821063755, y: 669.579429376541 } }, { p0: { x: 1320.4931313842906, y: 708.6185276505811 }, p3: { x: 1347.5505459668893, y: 818.5558295174359 }, p1: { x: 1328.9637196195847, y: 752.0140894681225 }, p2: { x: 1338.1895033462486, y: 780.5537160972173 } }, { p0: { x: 1347.5505459668893, y: 818.5558295174359 }, p3: { x: 1369.0778443113775, y: 916.3832335329344 }, p1: { x: 1354.7065868263471, y: 851.2335329341319 }, p2: { x: 1375.7844311377248, y: 892.4311377245509 } }, { p0: { x: 1369.0778443113775, y: 916.3832335329344 } }], [{ p0: { x: 1377.2415383587436, y: 588.764723813528 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 10: [ [{ p0: { x: -272.02085615059957, y: 924.0853371075856 }, p3: { x: -200.7063759857968, y: 924.8138007497503 }, p1: { x: -255.30315790885163, y: 927.4141463148483 }, p2: { x: -228.3784033468505, y: 924.8772927350382 } }, { p0: { x: -200.7063759857968, y: 924.8138007497503 }, p3: { x: -102.8760525434879, y: 927.0845167360463 }, p1: { x: -168.7994705503939, y: 929.7870631024913 }, p2: { x: -132.51312258499004, y: 921.4925880140579 } }, { p0: { x: -102.8760525434879, y: 927.0845167360463 }, p3: { x: -14.837156416915661, y: 925.291353488261 }, p1: { x: -68.16222836460112, y: 923.5795418246853 }, p2: { x: -40.65386758595568, y: 927.3692230913651 } }, { p0: { x: -14.837156416915661, y: 925.291353488261 }, p3: { x: 65.33238055801806, y: 916.5885695110733 }, p1: { x: 19.13800606246599, y: 918.0012049579973 }, p2: { x: 40.41929546930331, y: 923.0541169026321 } }, { p0: { x: 65.33238055801806, y: 916.5885695110733 }, p3: { x: 138.5244551123199, y: 914.2642600919811 }, p1: { x: 99.36514236608218, y: 915.4570071876788 }, p2: { x: 115.1382199285776, y: 916.2450987338128 } }, { p0: { x: 138.5244551123199, y: 914.2642600919811 }, p3: { x: 235.7954592177116, y: 915.2156058010654 }, p1: { x: 174.77848378704704, y: 918.3532054737002 }, p2: { x: 213.56568105676337, y: 918.3052482483082 } }, { p0: { x: 235.7954592177116, y: 915.2156058010654 }, p3: { x: 361.5761698674189, y: 861.620532736818 }, p1: { x: 270.1075134642903, y: 917.3789450010953 }, p2: { x: 330.8896067613619, y: 894.7130118496739 } }, { p0: { x: 361.5761698674189, y: 861.620532736818 }, p3: { x: 481.9559505028523, y: 857.8654325892542 }, p1: { x: 411.22794072043234, y: 882.0855780021908 }, p2: { x: 456.92288121478794, y: 886.5939430032956 } }, { p0: { x: 481.9559505028523, y: 857.8654325892542 }, p3: { x: 690.291538462269, y: 654.6272045575872 }, p1: { x: 539.061516528838, y: 823.6322499012099 }, p2: { x: 643.7979974855723, y: 766.0638986645896 } }, { p0: { x: 690.291538462269, y: 654.6272045575872 }, p3: { x: 842.2419495740417, y: 677.9994983716008 }, p1: { x: 760.5523030683144, y: 532.3286205180511 }, p2: { x: 767.5407197578684, y: 679.6524182508971 } }, { p0: { x: 842.2419495740417, y: 677.9994983716008 }, p3: { x: 985.8613783044771, y: 676.0768797577798 }, p1: { x: 867.3931810717623, y: 677.999498371601 }, p2: { x: 887.6088434247403, y: 677.9994983716006 } }, { p0: { x: 985.8613783044771, y: 676.0768797577798 }, p3: { x: 1090.855949491566, y: 674.2684094843777 }, p1: { x: 1025.4708374534478, y: 674.5785193252668 }, p2: { x: 1052.79909443344, y: 674.4655719710772 } }, { p0: { x: 1090.855949491566, y: 674.2684094843777 }, p3: { x: 1165.616223987492, y: 559.7184179965338 }, p1: { x: 1135.2695609047864, y: 672.4587382247469 }, p2: { x: 1152.7575762451504, y: 645.0032719422201 } }, { p0: { x: 1165.616223987492, y: 559.7184179965338 }, p3: { x: 1249.6408359589948, y: 581.3769529198084 }, p1: { x: 1175.7890207740402, y: 524.2226624353207 }, p2: { x: 1201.1519583856652, y: 465.90898567898245 } }, { p0: { x: 1249.6408359589948, y: 581.3769529198084 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ], 11: [ [{ p0: { x: -8.703442350483613, y: 236.6510896564636 }, p3: { x: 29.19990172547093, y: 320.51589978833726 }, p1: { x: 16.428830986197212, y: 214.8532688166353 }, p2: { x: 22.938010069978368, y: 273.2177187709015 } }, { p0: { x: 29.19990172547093, y: 320.51589978833726 }, p3: { x: 104.37099634038081, y: 409.31418787152893 }, p1: { x: 35.62204844639051, y: 390.37865176585336 }, p2: { x: 65.73437303776075, y: 408.4649542547201 } }, { p0: { x: 104.37099634038081, y: 409.31418787152893 }, p3: { x: 247.1616515363032, y: 410.5612054563915 }, p1: { x: 156.57753434388806, y: 411.1453881785095 }, p2: { x: 197.4049021750255, y: 410.858108007181 } }, { p0: { x: 247.1616515363032, y: 410.5612054563915 }, p3: { x: 361.5941305151162, y: 410.61947703301786 }, p1: { x: 292.00047800347215, y: 411.6776894228225 }, p2: { x: 326.5432866886369, y: 411.50620930570835 } }, { p0: { x: 361.5941305151162, y: 410.61947703301786 }, p3: { x: 478.08053015734487, y: 411.64792133563515 }, p1: { x: 400.89292525169884, y: 411.7581592652721 }, p2: { x: 441.84020046351077, y: 410.82137430438604 } }, { p0: { x: 478.08053015734487, y: 411.64792133563515 }, p3: { x: 585.291702793413, y: 411.2378451908829 }, p1: { x: 513.5365677515839, y: 411.9543576303446 }, p2: { x: 543.1746031000343, y: 412.50660029425995 } }, { p0: { x: 585.291702793413, y: 411.2378451908829 }, p3: { x: 705.1507761603283, y: 409.11496482651955 }, p1: { x: 627.3970673253797, y: 412.5511497480938 }, p2: { x: 668.8567548673117, y: 410.5380598520245 } }, { p0: { x: 705.1507761603283, y: 409.11496482651955 }, p3: { x: 812.3454038997211, y: 356.5236768802228 }, p1: { x: 752.973156346773, y: 402.65181058495807 }, p2: { x: 787.5401876721497, y: 384.0994693515507 } }, { p0: { x: 812.3454038997211, y: 356.5236768802228 }, p3: { x: 873.2924791086352, y: 296.57938718662956 }, p1: { x: 838.5292479108635, y: 329.5598885793872 }, p2: { x: 854.5738161559888, y: 306.3844011142061 } }, { p0: { x: 873.2924791086352, y: 296.57938718662956 }, p3: { x: 979.3649025069639, y: 295.6880222841225 }, p1: { x: 919.6434540389972, y: 294.79665738161555 }, p2: { x: 950.841225626741, y: 296.8022284122562 } }, { p0: { x: 979.3649025069639, y: 295.6880222841225 }, p3: { x: 1005.6601671309197, y: 295.91086350974945 }, p1: { x: 977.136490250696, y: 340.47910863509776 }, p2: { x: 1006.5515320334267, y: 341.37047353760465 } }, { p0: { x: 1005.6601671309197, y: 295.91086350974945 }, p3: { x: 1133.9610027855158, y: 164.88022284122567 }, p1: { x: 1093.0139275766019, y: 299.4763231197771 }, p2: { x: 1110.7855153203345, y: 276.3008356545963 } }, { p0: { x: 1133.9610027855158, y: 164.88022284122567 }, p3: { x: 1217.1922005571032, y: 187.16434540389972 }, p1: { x: 1151.2869080779938, y: 72.40111420612811 }, p2: { x: 1193.2367688022282, y: 36.4122562674093 } }, { p0: { x: 1217.1922005571032, y: 187.16434540389972 }, p3: { x: 1237.2290502793296, y: 281.6983240223463 }, p1: { x: 1227.486033519553, y: 222.70391061452514 }, p2: { x: 1230.7039106145253, y: 250.59217877094972 } }, { p0: { x: 1237.2290502793296, y: 281.6983240223463 } }], [{ p0: { x: 1377.2415383587436, y: 388.76472381352806 }, p3: { x: 1357.0585577835382, y: 249.4386890651236 }, p1: { x: 1374.0094325791883, y: 347.1979087888956 }, p2: { x: 1376.1937103230034, y: 309.5460002821476 } }, { p0: { x: 1357.0585577835382, y: 249.4386890651236 }, p3: { x: 1353.3609867418322, y: 200.81926569722248 }, p1: { x: 1359.4353331692084, y: 236.76270120299955 }, p2: { x: 1359.5975403374155, y: 220.83118670697877 } }, { p0: { x: 1353.3609867418322, y: 200.81926569722248 }, p3: { x: 1350.7869869133333, y: 106.19288379670994 }, p1: { x: 1351.7883008356546, y: 167.3871866295265 }, p2: { x: 1353.2924791086352, y: 138.13927576601674 } }, { p0: { x: 1350.7869869133333, y: 106.19288379670994 }, p3: { x: 1392.0111420612814, y: 136.24512534818942 } }, { p0: { x: 1392.0111420612814, y: 136.24512534818942 } }] ] }, init: function(b, c, d) { this.parent(b, c, d); this.srcMaxX = 1167; this.srcMaxY = 747; !ig.global.wm && !0 == ig.game.makeLand && (this.landpoints = this.landlevel[ig.game.levelNow], this.createPointsAlongCurve(), this.createLand(), this.createLandCanvas()) }, createPointsAlongCurve: function() { for (var b = 0; b < this.landpoints.length; b++) { this.segments[b] = []; for (var c = 0; c < this.landpoints[b].length; c++) { var d = this.landpoints[b][c]; if (d.p2) { for (var e = this.cubicBezierLength(d.p0, d.p1, d.p2, d.p3), f = Math.floor(e / this.segmentSize), j = 0; j < f; j++) this.segments[b].push(this.cubicBezier(this.segmentSize * j / e, d.p0, d.p1, d.p2, d.p3)); c == this.landpoints[b].length - 1 && this.segments[b].push(this.cubicBezier(1, d.p0, d.p1, d.p2, d.p3)) } else(d = this.landpoints[b][c - 1]) && d.p2 && this.segments[b].push(this.cubicBezier(1, d.p0, d.p1, d.p2, d.p3)) } } }, expandDot: function(b, c, d) { return [{ x: b.x + Math.cos(c + 0.5 * Math.PI) * d, y: b.y + Math.sin(c + 0.5 * Math.PI) * d }, { x: b.x + Math.cos(c - 0.5 * Math.PI) * d, y: b.y + Math.sin(c - 0.5 * Math.PI) * d }] }, createLand: function() { for (var b = 0; b < this.segments.length; b++) { this.drawLandPoints[b] = []; for (var c = 0; c < this.segments[b].length; c++) if (c < this.segments[b].length - 1) { var d = this.segments[b][c], e = this.segments[b][c + 1], f = [], j = this.getAngle(d, e), q = d.x + 0.5 * (e.x - d.x), n = d.y + 0.5 * (e.y - d.y), d = this.expandDot(d, j, this.segmentWidth), e = this.expandDot(e, j, this.segmentWidth), f = f.concat(d, e), f = this.arrangeClockwise(f); this.drawLandPoints.push(f.slice()); for (e = 0; e < f.length; e++) f[e].x = (f[e].x - q) * Box2D.SCALE, f[e].y = (f[e].y - n) * Box2D.SCALE; e = new Box2D.Dynamics.b2BodyDef; e.position.Set(q * Box2D.SCALE, n * Box2D.SCALE); q = ig.world.CreateBody(e); n = new Box2D.Collision.Shapes.b2PolygonShape; n.SetAsArray(f, f.length); q.CreateFixture2(n) } } }, update: function() { this.parent() }, quadraticBezier: function(b, c, d, e) { var f = {}; f.x = Math.pow(1 - b, 2) * c.x + 2 * (1 - b) * b * d.x + Math.pow(b, 2) * e.x; f.y = Math.pow(1 - b, 2) * c.y + 2 * (1 - b) * b * d.y + Math.pow(b, 2) * e.y; return f }, cubicBezierLength: function(b, c, d, e) { for (var f = 0, j = { x: 0, y: 0 }, q = 0, n = 0, g = 0; 40 > g; g++) t = g / 39, j = this.cubicBezier(t, b, c, d, e), 0 < g && (q = j.x - q, n = j.y - n, f += Math.sqrt(q * q + n * n)), q = j.x, n = j.y; return f }, cubicBezier: function(b, c, d, e, f) { var j = {}; j.x = Math.pow(1 - b, 3) * c.x + 3 * Math.pow(1 - b, 2) * b * d.x + 3 * (1 - b) * Math.pow(b, 2) * e.x + Math.pow(b, 3) * f.x; j.y = Math.pow(1 - b, 3) * c.y + 3 * Math.pow(1 - b, 2) * b * d.y + 3 * (1 - b) * Math.pow(b, 2) * e.y + Math.pow(b, 3) * f.y; return j }, getAngle: function(b, c) { return Math.atan2(b.y - c.y, b.x - c.x) }, normal: function(b, c) { return { x: c.y - b.y, y: c.x - b.x } }, arrangeClockwise: function(b) { var c = b.length, d, e = 1, f = c - 1, j = [], q, n; b.sort(this.pointXsort); j[0] = b[0]; q = b[0]; n = b[c - 1]; for (i = 1; i < c - 1; i++) d = this.det(q.x, q.y, n.x, n.y, b[i].x, b[i].y), 0 > d ? j[e++] = b[i] : j[f--] = b[i]; j[e] = b[c - 1]; return j }, pointXsort: function(b, c) { return b.x > c.x ? 1 : b.x < c.x ? -1 : 0 }, det: function(b, c, d, e, f, j) { return b * e + d * j + f * c - c * d - e * f - j * b }, createLandCanvas: function() { null == ig.game.landEle ? (ig.game.landEle = document.createElement("canvas"), ig.game.landCtx = ig.game.landEle.getContext("2d"), ig.game.landEle.width = 2E3, ig.game.landEle.height = 2E3) : ig.game.landCtx.clearRect(0, 0, 2E3, 2E3); this.prerenderLand() }, prerenderLand: function() { if (!0 == ig.game.makeLand) { var b = ig.game.landCtx; b.fillStyle = "#237148"; b.lineWidth = 2 * this.segmentWidth; for (var c = 0; c < this.landpoints.length; c++) { b.save(); b.beginPath(); for (var d = 0; d < this.landpoints[c].length; d++) { var e = this.landpoints[c][d]; 0 == d && (b.moveTo(e.p0.x, 1167), b.lineTo(e.p0.x, e.p0.y)); e.p2 && (b.bezierCurveTo(e.p1.x, e.p1.y, e.p2.x, e.p2.y, e.p3.x, e.p3.y), lastX = e.p3.x) } b.strokeStyle = "#237148"; b.stroke(); b.lineTo(lastX, 1167); b.clip(); d = b.createPattern(this.rocktile.data, "repeat"); b.rect(0, 0, 1167, 547); b.fillStyle = d; b.fill(); b.restore() } } }, draw: function() { this.parent(); ig.system.context.drawImage(ig.game.landEle, -ig.game.screen.x, -ig.game.screen.y, 2E3, 2E3) } }) }); ig.baked = !0; ig.module("game.levels.opening").requires("impact.image", "game.entities.opening-kitty").defines(function() { LevelOpening = { entities: [{ type: "EntityOpeningKitty", x: 520, y: 212 }], layer: [] } }); ig.baked = !0; ig.module("game.entities.buttons.button-sound").requires("game.entities.buttons.button").defines(function() { EntityButtonSound = EntityButton.extend({ type: ig.Entity.TYPE.A, gravityFactor: 0, logo: new ig.AnimationSheet("branding/logo.png", _SETTINGS.Branding.Logo.Width, _SETTINGS.Branding.Logo.Height), zIndex: 10001, size: { x: 50, y: 50 }, mutetest: !1, name: "soundtest", init: function(b, c, d) { this.parent(b, c, d) }, draw: function() { this.parent(); ig.system.context.fillRect(this.pos.x, this.pos.y, 50, 50) }, clicked: function() { console.log("pressed"); this.mutetest ? (console.log("unmute"), ig.soundHandler.unmuteAll(!0), this.mutetest = !1) : (console.log("mute"), ig.soundHandler.muteAll(!0), this.mutetest = !0) }, clicking: function() {}, released: function() {} }) }); ig.baked = !0; ig.module("game.levels.test-desktop").requires("impact.image", "game.entities.branding-logo-placeholder", "game.entities.buttons.button-more-games", "game.entities.pointer", "game.entities.buttons.button-sound").defines(function() { LevelTestDesktop = { entities: [{ type: "EntityBrandingLogoPlaceholder", x: 296, y: 396, settings: { div_layer_name: "layer_mainmenu", centralize: "true" } }, { type: "EntityButtonMoreGames", x: 432, y: 284, settings: { div_layer_name: "layer_moregames_mainmenu" } }, { type: "EntityPointer", x: 608, y: 120 }, { type: "EntityButtonSound", x: 192, y: 284 }], layer: [{ name: "background", width: 40, height: 30, linkWithCollision: !1, visible: 1, tilesetName: "media/graphics/backgrounds/desktop/background.jpg", repeat: !1, preRender: !0, distance: "1", tilesize: 16, foreground: !1, data: [ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120 ], [121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], [161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200], [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240 ], [241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], [281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320], [321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360 ], [361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400], [401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], [441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480 ], [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520], [521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560], [561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600 ], [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640], [641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720 ], [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], [761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800], [801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840], [841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880], [881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920], [921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960], [961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1E3 ], [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040], [1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080 ], [1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120], [1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160], [1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200 ] ] }] }; LevelTestDesktopResources = [new ig.Image("media/graphics/backgrounds/desktop/background.jpg")] }); ig.baked = !0; ig.module("game.levels.test-mobile").requires("impact.image", "game.entities.branding-logo-placeholder", "game.entities.buttons.button-more-games", "game.entities.pointer").defines(function() { LevelTestMobile = { entities: [{ type: "EntityBrandingLogoPlaceholder", x: 216, y: 548, settings: { div_layer_name: "layer_mainmenu", centralize: "true" } }, { type: "EntityButtonMoreGames", x: 204, y: 372, settings: { div_layer_name: "layer_moregames_mainmenu" } }, { type: "EntityPointer", x: 444, y: 192 }], layer: [{ name: "background", width: 30, height: 40, linkWithCollision: !1, visible: 1, tilesetName: "media/graphics/backgrounds/mobile/background.jpg", repeat: !1, preRender: !0, distance: "1", tilesize: 16, foreground: !1, data: [ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120 ], [121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150], [151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180], [181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210], [211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240 ], [241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270], [271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300], [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330], [331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360 ], [361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390], [391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420], [421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450], [451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480], [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510 ], [511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540], [541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570], [571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600], [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630 ], [631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], [661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690], [691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750 ], [751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780], [781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810], [811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840], [841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870 ], [871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900], [901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930], [931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960], [961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990 ], [991, 992, 993, 994, 995, 996, 997, 998, 999, 1E3, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020], [1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050], [1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080], [1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110 ], [1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140], [1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170], [1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200 ] ] }] }; LevelTestMobileResources = [new ig.Image("media/graphics/backgrounds/mobile/background.jpg")] }); ig.baked = !0; ig.module("game.entities.menu.menu-background").requires("impact.entity").defines(function() { EntityMenuBackground = ig.Entity.extend({ size: { x: 960, y: 540 }, animSheet: new ig.AnimationSheet("media/graphics/menu/background.png", 960, 540), Offset: 0, gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, draw: function() { this.parent() } }); EntityMenuLogo = ig.Entity.extend({ size: { x: 557, y: 385 }, animSheet: new ig.AnimationSheet("media/graphics/menu/logo.png", 557, 385), Offset: 0, gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.getIn() }, draw: function() { this.parent() }, getIn: function() { this.tween({ pos: { x: this.pos.x, y: 20 } }, 0.8, { easing: ig.Tween.Easing.Bounce.EaseOut, onComplete: function() { this.endGetIn() }.bind(this) }).start() }, endGetIn: function() {} }) }); ig.baked = !0; ig.module("game.entities.menu.button-play").requires("impact.entity").defines(function() { EntityButtonPlay = ig.Entity.extend({ size: { x: 182, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/btplay.png", 182, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.posChange() }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, _SETTINGS.MoreGames.Disabled && ig.game.getEntitiesByType(EntityButtonMoreGames)[0].hide(), ig.soundHandler.sfxPlayer.play("button1"), ig.game.storage.get("firstPlay") ? ig.game.spawnEntity(EntityAsk, 290, -100, { zIndex: this.zIndex + 100, realpos: { x: 300, y: -100 } }) : (ig.game.levelNow = 1, eval("ig.game.loadLevel(LevelHole" + ig.game.levelNow + ");")))) }, draw: function() { this.parent() }, posChange: function() { this.tween({ pos: { x: this.pos.x, y: 350 } }, 0.8, { easing: ig.Tween.Easing.Back.EaseOut }).start() }, posBack: function() {} }); EntityAsk = ig.Entity.extend({ size: { x: 417, y: 100 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/bgtext.png", 417, 100), darkbg: new ig.Image("media/graphics/gameplay/darkbg.png"), gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.setScale(1.2, 1.2); this.ask = ig.game.spawnEntity(EntityText, this.pos.x + 240, this.pos.y + 40, { name: "ask", text: _STRINGS.Game.Ask, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 30, textAlign: "center", zIndex: this.zIndex + 100, gravityFactor: 0 }); this.yes = ig.game.spawnEntity(EntityYes, 0, 0, { zIndex: this.zIndex + 100, realpos: { x: 0, y: 0 } }); this.no = ig.game.spawnEntity(EntityNo, 0, 0, { zIndex: this.zIndex + 100, realpos: { x: 0, y: 0 } }); ig.game.sortEntitiesDeferred(); this.getIn() }, update: function() { this.parent(); this.ask.pos = { x: this.pos.x + 250, y: this.pos.y + 50 }; this.yes.pos = { x: this.pos.x + this.size.x - 100, y: this.pos.y + 75 }; this.no.pos = { x: this.pos.x + this.size.x - 170, y: this.pos.y + 75 } }, draw: function() { this.parent(); this.darkbg.draw(0, 0) }, getIn: function() { ig.game.popupOpen = "ask"; this.tween({ pos: { x: this.pos.x, y: 220 } }, 0.8, { easing: ig.Tween.Easing.Bounce.EaseOut, onComplete: function() { this.endGetIn() }.bind(this) }).start() }, endGetIn: function() {} }); EntityYes = ig.Entity.extend({ size: { x: 50, y: 25 }, type: ig.Entity.TYPE.B, small: !1, big: !1, gravityFactor: 0, name: "btcontinue", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.txt = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "yes", text: _STRINGS.Game.Yes, fontColor: "#3672f8", fontStyle: "FredokaOne", fontSize: 30, textAlign: "left", zIndex: this.zIndex - 1, gravityFactor: 0, fontWeight: "italic" }) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); this.txt.pos = { x: this.pos.x, y: this.pos.y + 20 }; this.small ? (this.small = !1, this.big = !0) : this.big && (_SETTINGS.MoreGames.Disabled && ig.game.getEntitiesByType(EntityButtonMoreGames)[0].hide(), this.big = this.small = !1, ig.game.popupOpen = "", ig.soundHandler.sfxPlayer.play("button2"), ig.game.levelNow = 11, ig.game.loadLevel(LevelDemo)) }, draw: function() { this.parent() } }); EntityNo = ig.Entity.extend({ size: { x: 50, y: 25 }, type: ig.Entity.TYPE.B, small: !1, big: !1, gravityFactor: 0, name: "btcontinue", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.txt = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "yes", text: _STRINGS.Game.No, fontColor: "#3672f8", fontStyle: "FredokaOne", fontSize: 30, textAlign: "left", zIndex: this.zIndex - 1, gravityFactor: 0, fontWeight: "italic" }) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); this.txt.pos = { x: this.pos.x, y: this.pos.y + 20 }; this.small ? (this.small = !1, this.big = !0) : this.big && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), _SETTINGS.MoreGames.Disabled && ig.game.getEntitiesByType(EntityButtonMoreGames)[0].hide(), ig.game.popupOpen = "", ig.game.levelNow = 1, eval("ig.game.loadLevel(LevelHole" + ig.game.levelNow + ");")) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.button-shop").requires("impact.entity").defines(function() { EntityButtonShop = ig.Entity.extend({ size: { x: 124, y: 75 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/btshop.png", 124, 75), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.posChange() }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, bigAgain: function() {}, endUp: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), this.popshop = ig.game.spawnEntity(EntityPopupShop, 980, 80, { zIndex: 50, realpos: { x: 0, y: 0 } }))) }, draw: function() { this.parent() }, posChange: function() { this.tween({ pos: { x: 840, y: this.pos.y } }, 0.8, { easing: ig.Tween.Easing.Quartic.EaseOut }).start() }, posBack: function() {} }) }); ig.baked = !0; ig.module("game.entities.menu.button-sfx").requires("impact.entity").defines(function() { EntityButtonSfx = ig.Entity.extend({ size: { x: 42, y: 42 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/btsound.png", 42, 42), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("on", 1, [0]); this.addAnim("off", 1, [1]); this.currentAnim = this.anims.on; ig.game.storage.get("sfxMute") ? (this.currentAnim = this.anims.off, ig.soundHandler.sfxPlayer.mute(!0)) : (this.currentAnim = this.anims.on, ig.soundHandler.sfxPlayer.unmute(!0)) }, clicked: function() { "ask" == ig.game.popupOpen || "popupshop" == ig.game.popupOpen || (this.small = !0) }, bigAgain: function() {}, endUp: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), 0 == this.currentAnim.sequence[0] ? (this.currentAnim = this.anims.off, ig.soundHandler.sfxPlayer.mute(!0), ig.game.storage.set("sfxMute", !0)) : (this.currentAnim = this.anims.on, ig.soundHandler.sfxPlayer.unmute(!0), ig.game.storage.set("sfxMute", !1)))) }, draw: function() { this.parent() }, posChange: function() {}, posBack: function() {} }) }); ig.baked = !0; ig.module("game.entities.menu.button-bgm").requires("impact.entity").defines(function() { EntityButtonBgm = ig.Entity.extend({ size: { x: 42, y: 42 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/btmusic.png", 42, 42), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("on", 1, [0]); this.addAnim("off", 1, [1]); this.currentAnim = this.anims.on; ig.game.storage.get("bgmMute") ? (this.currentAnim = this.anims.off, ig.soundHandler.bgmPlayer.mute(!0)) : (this.currentAnim = this.anims.on, ig.soundHandler.bgmPlayer.unmute(!0)) }, clicked: function() { "ask" == ig.game.popupOpen || "popupshop" == ig.game.popupOpen || (this.small = !0) }, bigAgain: function() {}, endUp: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), 0 == this.currentAnim.sequence[0] ? (this.currentAnim = this.anims.off, ig.game.storage.set("bgmMute", !0), ig.soundHandler.bgmPlayer.mute(!0)) : (this.currentAnim = this.anims.on, ig.game.storage.set("bgmMute", !1), ig.soundHandler.bgmPlayer.unmute(!0)))) }, draw: function() { this.parent() }, posChange: function() {}, posBack: function() {} }) }); ig.baked = !0; ig.module("game.entities.gameplay.money").requires("impact.entity").defines(function() { EntityMoney = ig.Entity.extend({ size: { x: 110, y: 43 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/money.png", 110, 43), gravityFactor: 0, name: "btgo", modeShop: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.count = ig.game.spawnEntity(EntityText, this.pos.x + 42, this.pos.y + 27, { name: "count", text: "$ 0", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 18, textAlign: "left", zIndex: this.zIndex + 1, gravityFactor: 0 }) }, update: function() { this.parent(); this.count.text = "$ " + ig.game.gameMoney.toString(); this.modeShop ? this.count.pos = { x: this.pos.x + 42, y: this.pos.y + 27 } : this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.popup-shop").requires("impact.entity", "game.entities.gameplay.money").defines(function() { EntityPopupShop = ig.Entity.extend({ size: { x: 593, y: 360 }, gravityFactor: 0, realpos: { x: 90, y: 0 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/shopbg2.png", 593, 360), type: ig.Entity.TYPE.B, clickcount: 0, button: [], init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; ig.game.popupOpen = "popupshop"; this.more = ig.game.getEntitiesByType(EntityButtonMoreGames)[0]; this.more.hide(); this.title = ig.game.spawnEntity(EntityText, this.pos.x + 440, this.pos.y + 60, { name: "title", text: "Hats", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 34, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.btclose = ig.game.spawnEntity(EntityButtonClosePopup, this.pos.x + this.size.x, this.pos.y + 30, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.btprev = ig.game.spawnEntity(EntityButtonPrev, this.pos.x + 25, this.pos.y + 135, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.btnext = ig.game.spawnEntity(EntityButtonNext, this.pos.x + 500, this.pos.y + 135, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.moneyboard = ig.game.spawnEntity(EntityMoney, this.pos.x + 30, this.pos.y + 30, { zIndex: this.zIndex + 2, modeShop: !0, gravityFactor: 0 }); this.hat1 = ig.game.spawnEntity(EntityHat1, this.pos.x + 50, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.hat2 = ig.game.spawnEntity(EntityHat2, this.pos.x + 150, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.hat3 = ig.game.spawnEntity(EntityHat3, this.pos.x + 250, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.hat4 = ig.game.spawnEntity(EntityHat4, this.pos.x + 350, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.hat5 = ig.game.spawnEntity(EntityHat5, this.pos.x + 450, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.hat6 = ig.game.spawnEntity(EntityHat6, this.pos.x + 550, this.pos.y - 300, { zIndex: this.zIndex + 2, gravityFactor: 0 }); this.button.push(this.hat1); this.button.push(this.hat2); this.button.push(this.hat3); this.button.push(this.hat4); this.button.push(this.hat5); this.button.push(this.hat6); ig.game.sortEntitiesDeferred(); this.getIn() }, setButtonPos: function() { for (i = 0; 2 >= i; i++) { var b = ig.game.posVal[i]; try { this.button[b - 1].pos.x = ig.game.posHats[i].x + this.pos.x + this.button[b - 1].ofset, this.button[b - 1].pos.y = ig.game.posHats[i].y + this.pos.y + this.button[b - 1].ofset } catch (c) {} } }, getIn: function() { this.tween({ pos: { x: 184, y: this.pos.y } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endGetIn() }.bind(this) }).start() }, endGetIn: function() {}, getOut: function() { this.tween({ pos: { x: -900, y: this.pos.y } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.close() }.bind(this) }).start() }, draw: function() { this.parent() }, update: function() { this.parent(); this.title.pos.x = this.pos.x + 296; this.btclose.pos.x = this.pos.x + this.size.x - 85; this.moneyboard.pos.x = this.pos.x + 25; this.btprev.pos = { x: this.pos.x + 35 + this.btprev.ofset, y: this.pos.y + 135 + this.btprev.ofset }; this.btnext.pos = { x: this.pos.x + 500 + this.btnext.ofset, y: this.pos.y + 135 + this.btnext.ofset }; this.setButtonPos() }, close: function() { ig.game.popupOpen = ""; this.title.kill(); this.btclose.kill(); this.moneyboard.kill(); this.hat1.kill(); this.hat2.kill(); this.hat3.kill(); this.hat4.kill(); this.hat5.kill(); this.hat6.kill(); this.btnext.kill(); this.btprev.kill(); this.more.show(); this.kill() } }) }); ig.baked = !0; ig.module("game.entities.menu.button-close-popup").requires("impact.entity").defines(function() { EntityButtonClosePopup = ig.Entity.extend({ size: { x: 55, y: 55 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/bt_close_popup.png", 55, 55), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); this.small ? (this.small = !1, this.big = !0) : this.big && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.getEntitiesByType(EntityPopupShop)[0].getOut()) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.hat").requires("impact.entity").defines(function() { EntityHat1 = ig.Entity.extend({ size: { x: 80, y: 79 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_empty.png", 80, 79), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.setAnim() }, setAnim: function() { this.currentAnim = 1 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, over: function() { this.currentAnim = this.anims.hover }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), ig.game.storage.set("hat", 1), ig.game.playerChar = 1, this.setAnim(), this.otherAnim())) }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat2)[0].currentAnim = ig.game.getEntitiesByType(EntityHat2)[0].anims.idle; ig.game.getEntitiesByType(EntityHat3)[0].currentAnim = ig.game.getEntitiesByType(EntityHat3)[0].anims.idle; ig.game.getEntitiesByType(EntityHat4)[0].currentAnim = ig.game.getEntitiesByType(EntityHat4)[0].anims.idle; ig.game.getEntitiesByType(EntityHat5)[0].currentAnim = ig.game.getEntitiesByType(EntityHat5)[0].anims.idle; ig.game.getEntitiesByType(EntityHat6)[0].currentAnim = ig.game.getEntitiesByType(EntityHat6)[0].anims.idle }, draw: function() { this.parent() } }); EntityHat2 = ig.Entity.extend({ size: { x: 80, y: 81 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_black.png", 80, 81), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 100, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 100", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 2 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("hatlock2") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock2") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock2") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), 0 == ig.game.storage.get("hatlock2") && (ig.game.storage.set("hatlock2", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("hat", 2), ig.game.playerChar = 2, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat1)[0].currentAnim = ig.game.getEntitiesByType(EntityHat1)[0].anims.idle; ig.game.getEntitiesByType(EntityHat3)[0].currentAnim = ig.game.getEntitiesByType(EntityHat3)[0].anims.idle; ig.game.getEntitiesByType(EntityHat4)[0].currentAnim = ig.game.getEntitiesByType(EntityHat4)[0].anims.idle; ig.game.getEntitiesByType(EntityHat5)[0].currentAnim = ig.game.getEntitiesByType(EntityHat5)[0].anims.idle; ig.game.getEntitiesByType(EntityHat6)[0].currentAnim = ig.game.getEntitiesByType(EntityHat6)[0].anims.idle }, draw: function() { this.parent() } }); EntityHat3 = ig.Entity.extend({ size: { x: 80, y: 82 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_bunny.png", 80, 82), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 200, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 200", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 3 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("hatlock3") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock3") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock3") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), 0 == ig.game.storage.get("hatlock3") && (ig.game.storage.set("hatlock3", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("hat", 3), ig.game.playerChar = 3, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat1)[0].currentAnim = ig.game.getEntitiesByType(EntityHat1)[0].anims.idle; ig.game.getEntitiesByType(EntityHat2)[0].currentAnim = ig.game.getEntitiesByType(EntityHat2)[0].anims.idle; ig.game.getEntitiesByType(EntityHat4)[0].currentAnim = ig.game.getEntitiesByType(EntityHat4)[0].anims.idle; ig.game.getEntitiesByType(EntityHat5)[0].currentAnim = ig.game.getEntitiesByType(EntityHat5)[0].anims.idle; ig.game.getEntitiesByType(EntityHat6)[0].currentAnim = ig.game.getEntitiesByType(EntityHat6)[0].anims.idle }, draw: function() { this.parent() } }); EntityHat4 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_witch.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 300, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 300", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 4 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("hatlock4") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock4") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock4") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), 0 == ig.game.storage.get("hatlock4") && (ig.game.storage.set("hatlock4", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("hat", 4), ig.game.playerChar = 4, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat1)[0].currentAnim = ig.game.getEntitiesByType(EntityHat1)[0].anims.idle; ig.game.getEntitiesByType(EntityHat2)[0].currentAnim = ig.game.getEntitiesByType(EntityHat2)[0].anims.idle; ig.game.getEntitiesByType(EntityHat3)[0].currentAnim = ig.game.getEntitiesByType(EntityHat3)[0].anims.idle; ig.game.getEntitiesByType(EntityHat5)[0].currentAnim = ig.game.getEntitiesByType(EntityHat5)[0].anims.idle; ig.game.getEntitiesByType(EntityHat6)[0].currentAnim = ig.game.getEntitiesByType(EntityHat6)[0].anims.idle }, draw: function() { this.parent() } }); EntityHat5 = ig.Entity.extend({ size: { x: 80, y: 79 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_pirate.png", 80, 79), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 400, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 400", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 5 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("hatlock5") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock5") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock5") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), 0 == ig.game.storage.get("hatlock5") && (ig.game.storage.set("hatlock5", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("hat", 5), ig.game.playerChar = 5, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat1)[0].currentAnim = ig.game.getEntitiesByType(EntityHat1)[0].anims.idle; ig.game.getEntitiesByType(EntityHat2)[0].currentAnim = ig.game.getEntitiesByType(EntityHat2)[0].anims.idle; ig.game.getEntitiesByType(EntityHat3)[0].currentAnim = ig.game.getEntitiesByType(EntityHat3)[0].anims.idle; ig.game.getEntitiesByType(EntityHat4)[0].currentAnim = ig.game.getEntitiesByType(EntityHat4)[0].anims.idle; ig.game.getEntitiesByType(EntityHat6)[0].currentAnim = ig.game.getEntitiesByType(EntityHat6)[0].anims.idle }, draw: function() { this.parent() } }); EntityHat6 = ig.Entity.extend({ size: { x: 80, y: 79 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/hat_chrown.png", 80, 79), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 500, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 500", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 6 == ig.game.storage.get("hat") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("hatlock6") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock6") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("hatlock6") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), 0 == ig.game.storage.get("hatlock6") && (ig.game.storage.set("hatlock6", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("hat", 6), ig.game.playerChar = 6, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityHat1)[0].currentAnim = ig.game.getEntitiesByType(EntityHat1)[0].anims.idle; ig.game.getEntitiesByType(EntityHat2)[0].currentAnim = ig.game.getEntitiesByType(EntityHat2)[0].anims.idle; ig.game.getEntitiesByType(EntityHat3)[0].currentAnim = ig.game.getEntitiesByType(EntityHat3)[0].anims.idle; ig.game.getEntitiesByType(EntityHat4)[0].currentAnim = ig.game.getEntitiesByType(EntityHat4)[0].anims.idle; ig.game.getEntitiesByType(EntityHat5)[0].currentAnim = ig.game.getEntitiesByType(EntityHat5)[0].anims.idle }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.ball-shop").requires("impact.entity").defines(function() { EntityBallShop1 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_1.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.setAnim() }, setAnim: function() { this.currentAnim = 1 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, over: function() { this.currentAnim = this.anims.hover }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.game.storage.set("ballshop", 1), ig.game.maxpower = 35, this.setAnim(), this.otherAnim())) }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop2)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop2)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop3)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop3)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop4)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop4)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop5)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop5)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop6)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop6)[0].anims.idle }, draw: function() { this.parent() } }); EntityBallShop2 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_2.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 100, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 100", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 2 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("balllock2") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock2") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock2") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, 0 == ig.game.storage.get("balllock2") && (ig.game.storage.set("balllock2", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("ballshop", 2), ig.game.maxpower = 40, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop1)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop1)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop3)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop3)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop4)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop4)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop5)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop5)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop6)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop6)[0].anims.idle }, draw: function() { this.parent() } }); EntityBallShop3 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_3.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 200, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 200", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 3 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("balllock3") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock3") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock3") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, 0 == ig.game.storage.get("balllock3") && (ig.game.storage.set("balllock3", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("ballshop", 3), ig.game.maxpower = 45, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop1)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop1)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop2)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop2)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop4)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop4)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop5)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop5)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop6)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop6)[0].anims.idle }, draw: function() { this.parent() } }); EntityBallShop4 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_4.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 300, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 300", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 4 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("balllock4") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock4") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock4") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, 0 == ig.game.storage.get("balllock4") && (ig.game.storage.set("balllock4", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("ballshop", 4), ig.game.maxpower = 50, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop1)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop1)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop2)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop2)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop3)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop3)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop5)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop5)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop6)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop6)[0].anims.idle }, draw: function() { this.parent() } }); EntityBallShop5 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_5.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 400, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 400", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 5 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("balllock5") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock5") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock5") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, 0 == ig.game.storage.get("balllock5") && (ig.game.storage.set("balllock5", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("ballshop", 5), ig.game.maxpower = 55, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop1)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop1)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop2)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop2)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop3)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop3)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop4)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop4)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop6)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop6)[0].anims.idle }, draw: function() { this.parent() } }); EntityBallShop6 = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/ball_6.png", 80, 80), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, pricevalue: 500, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [1]); this.addAnim("hover", 1, [0]); this.price = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 110, { name: "price", text: "$ 500", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 20, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.setAnim() }, setAnim: function() { this.currentAnim = 6 == ig.game.storage.get("ballshop") ? this.anims.hover : this.anims.idle; 1 == ig.game.storage.get("balllock6") && (this.price.text = "") }, clicked: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock6") || (this.small = !0) }, released: function() {}, over: function() { ig.game.gameMoney < this.pricevalue && 0 == ig.game.storage.get("balllock6") || (this.currentAnim = this.anims.hover) }, leave: function() { this.setAnim() }, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, 0 == ig.game.storage.get("balllock6") && (ig.game.storage.set("balllock6", 1), b = ig.game.storage.get("money"), b -= this.pricevalue, ig.game.gameMoney = b, ig.game.storage.set("money", b)), ig.game.storage.set("ballshop", 6), ig.game.maxpower = 60, this.setAnim(), this.otherAnim())); this.price.pos = { x: this.pos.x + 40 - this.ofset, y: this.pos.y + 110 - this.ofset } }, otherAnim: function() { ig.game.getEntitiesByType(EntityBallShop1)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop1)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop2)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop2)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop3)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop3)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop4)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop4)[0].anims.idle; ig.game.getEntitiesByType(EntityBallShop5)[0].currentAnim = ig.game.getEntitiesByType(EntityBallShop5)[0].anims.idle }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.button-next-prev").requires("impact.entity").defines(function() { EntityButtonPrev = ig.Entity.extend({ size: { x: 56, y: 94 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/arrow_left.png", 56, 94), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.posChange() }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else if (this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), b = ig.game.getEntitiesByType(EntityPopupShop)[0], 4 <= ig.game.posVal[2]))) for (i = 0; 2 >= i; i++) b.button[ig.game.posVal[i] - 1].pos.y = -300, ig.game.posVal[i] -= 1 }, draw: function() { this.parent() } }); EntityButtonNext = ig.Entity.extend({ size: { x: 54, y: 91 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/arrow_right.png", 54, 91), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.posChange() }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else if (this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), b = ig.game.getEntitiesByType(EntityPopupShop)[0], 4 > ig.game.posVal[0]))) for (i = 0; 2 >= i; i++) b.button[ig.game.posVal[i] - 1].pos.y = -300, ig.game.posVal[i] += 1 }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.menu.button-tutorial").requires("impact.entity").defines(function() { EntityButtonTutorial = ig.Entity.extend({ size: { x: 42, y: 42 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/bttutorial.png", 42, 42), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, _SETTINGS.MoreGames.Disabled && ig.game.getEntitiesByType(EntityButtonMoreGames)[0].hide(), ig.soundHandler.sfxPlayer.play("button1"), ig.game.levelNow = 11, ig.game.loadLevel(LevelDemo))) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.menu").requires("impact.image", "game.entities.pointer", "game.entities.menu.menu-background", "game.entities.menu.button-play", "game.entities.buttons.button-more-games", "game.entities.menu.button-shop", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.menu.popup-shop", "game.entities.menu.button-close-popup", "game.entities.menu.hat", "game.entities.menu.ball-shop", "game.entities.menu.button-next-prev", "game.entities.menu.button-tutorial").defines(function() { LevelMenu = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityMenuBackground", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityMenuLogo", x: 170, y: -400, settings: { zIndex: 2 } }, { type: "EntityButtonPlay", x: 400, y: 650, settings: { zIndex: 5 } }, { type: "EntityButtonMoreGames", x: -4, y: 450, settings: { zIndex: 5 } }, { type: "EntityButtonShop", x: 1040, y: 450, settings: { zIndex: 5 } }, { type: "EntityButtonSfx", x: 10, y: 10, settings: { zIndex: 5 } }, { type: "EntityButtonBgm", x: 10, y: 60, settings: { zIndex: 5 } }, { type: "EntityButtonTutorial", x: 900, y: 10, settings: { zIndex: 5 } }], layer: [] } }); ig.baked = !0; ig.module("game.entities.gameplay.background").requires("impact.entity").defines(function() { EntityBackground1 = ig.Entity.extend({ size: { x: 1167, y: 547 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/background_1.png", 1167, 547), bgleft: new ig.Image("media/graphics/gameplay/background_1.png"), cloud1: new ig.Image("media/graphics/gameplay/cloud1.png"), cloud2: new ig.Image("media/graphics/gameplay/cloud2.png"), cloud3: new ig.Image("media/graphics/gameplay/cloud3.png"), cornerbg: new ig.Image("media/graphics/gameplay/cornerbg.png"), Offset: 0, gravityFactor: 0, realpos: { x: 0, y: 0 }, init: function(b, c, d) { this.parent(b, c, d); if (ig.global.wm) return !1; this.cloud1x = 450; this.cloud2x = 750; this.cloud3x = 100; 11 != ig.game.levelNow && (this.hole1 = ig.game.spawnEntity(EntityText, 0, 0, { name: "hole", text: _STRINGS.Game.Hole + " : " + ig.game.levelNow.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 18, textAlign: "center", zIndex: this.zIndex + 100, gravityFactor: 0 }), this.par1 = ig.game.spawnEntity(EntityText, 0, 0, { name: "par", text: _STRINGS.Game.Par + " : " + ig.game.valpar[ig.game.levelNow - 1].toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 18, textAlign: "center", zIndex: this.zIndex + 100, gravityFactor: 0 }), this.strokes1 = ig.game.spawnEntity(EntityText, 0, 0, { name: "strokes", text: _STRINGS.Game.Strokes + " : " + ig.game.ballhit.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 17, textAlign: "center", zIndex: this.zIndex + 100, gravityFactor: 0 })) }, ready: function() { this.shadow = ig.game.getEntitiesByType(EntityBallShadow)[0] }, draw: function() { this.parent(); if (ig.global.wm) return !1; this.bgleft.draw(0, 0); this.bgleft.draw(this.pos.x + this.size.x - 500, 0); this.cloud1.draw(this.cloud1x, 60); this.cloud2.draw(this.cloud2x, 30); this.cloud3.draw(this.cloud3x, 30); 11 != ig.game.levelNow && (this.cornerbg.draw(10, 10), this.cornerbg.draw(120, 10), this.cornerbg.draw(230, 10)) }, update: function() { if (ig.global.wm) return !1; this.pos = { x: this.realpos.x, y: this.realpos.y }; 11 != ig.game.levelNow && (this.hole1.pos = { x: this.pos.x + 66, y: this.pos.y + 37 }, this.par1.pos = { x: this.pos.x + 176, y: this.pos.y + 37 }, this.strokes1.pos = { x: this.pos.x + 285, y: this.pos.y + 37 }, this.strokes1.text = _STRINGS.Game.Strokes + " : " + ig.game.ballhit.toString()); "" == ig.game.popupOpen && (this.cloud1x += 0.15, 960 < this.cloud1x && (this.cloud1x = -144), this.cloud2x += 0.15, 960 < this.cloud2x && (this.cloud2x = -144), this.cloud3x += 0.15, 960 < this.cloud3x && (this.cloud3x = -144)) }, endlevel: function() { this.hole1.kill(); this.par1.kill(); this.strokes1.kill() } }); EntityBackground2 = ig.Entity.extend({ size: { x: 1167, y: 547 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/background_2.png", 1167, 547), back2: new ig.Image("media/graphics/gameplay/background_2.png"), Offset: 0, gravityFactor: 0, realpos: { x: 0, y: 0 }, init: function(b, c, d) { this.parent(b, c, d) }, draw: function() { this.parent(); this.back2.draw(0, 0) }, update: function() { this.parent(); this.pos = { x: this.realpos.x, y: this.realpos.y } } }); EntityBackground3 = ig.Entity.extend({ size: { x: 1167, y: 547 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/background_3.png", 1167, 547), bg1: new ig.Image("media/graphics/gameplay/background_3.png"), realpos: { x: 0, y: 0 }, gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d) }, draw: function() { this.parent(); this.bg1.draw(this.pos.x, this.pos.y) }, update: function() { this.parent(); this.pos = { x: this.realpos.x, y: this.realpos.y } } }); EntityBackgroundDark = ig.Entity.extend({ size: { x: 960, y: 540 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/darkbg.png", 960, 540), Offset: 0, gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, draw: function() { this.parent() }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } } }); EntityBackgroundDarkRes = ig.Entity.extend({ size: { x: 349, y: 263 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/popuppausebg.png", 349, 263), Offset: 0, gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, draw: function() { this.parent() }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } } }) }); ig.baked = !0; ig.module("game.entities.gameplay.player").requires("impact.entity").defines(function() { EntityPlayer = ig.Entity.extend({ size: { x: 67, y: 80 }, hit1: new ig.AnimationSheet("media/graphics/gameplay/player/hit1.png", 67, 80), hit1rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit1rev.png", 67, 80), hit1low: new ig.AnimationSheet("media/graphics/gameplay/player/hit1low.png", 67, 80), hit1lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit1lowrev.png", 67, 80), hit2: new ig.AnimationSheet("media/graphics/gameplay/player/hit2.png", 67, 80), hit2rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit2rev.png", 67, 80), hit2low: new ig.AnimationSheet("media/graphics/gameplay/player/hit2low.png", 67, 80), hit2lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit2lowrev.png", 67, 80), hit3: new ig.AnimationSheet("media/graphics/gameplay/player/hit6.png", 67, 80), hit3rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit6rev.png", 67, 80), hit3low: new ig.AnimationSheet("media/graphics/gameplay/player/hit6low.png", 67, 80), hit3lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit6lowrev.png", 67, 80), hit4: new ig.AnimationSheet("media/graphics/gameplay/player/hit4.png", 67, 80), hit4rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit4rev.png", 67, 80), hit4low: new ig.AnimationSheet("media/graphics/gameplay/player/hit4low.png", 67, 80), hit4lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit4lowrev.png", 67, 80), hit5: new ig.AnimationSheet("media/graphics/gameplay/player/hit5.png", 67, 80), hit5rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit5rev.png", 67, 80), hit5low: new ig.AnimationSheet("media/graphics/gameplay/player/hit5low.png", 67, 80), hit5lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit5lowrev.png", 67, 80), hit6: new ig.AnimationSheet("media/graphics/gameplay/player/hit3.png", 67, 80), hit6rev: new ig.AnimationSheet("media/graphics/gameplay/player/hit3rev.png", 67, 80), hit6low: new ig.AnimationSheet("media/graphics/gameplay/player/hit3low.png", 67, 80), hit6lowrev: new ig.AnimationSheet("media/graphics/gameplay/player/hit3lowrev.png", 67, 80), gravityFactor: 0, tloop: null, hitstatus: !1, hitball: !1, tloop: 0, lowhit: !1, inStatus: !1, beforeHit: !1, init: function(b, c, d) { this.parent(b, c, d); this.setPlayerChar(); this.lr = 1 }, setPlayerChar: function() { 1 == ig.game.playerChar ? (this.hit = this.hit1, this.hitrev = this.hit1rev, this.hitlow = this.hit1low, this.hitlowrev = this.hit1lowrev) : 2 == ig.game.playerChar ? (this.hit = this.hit2, this.hitrev = this.hit2rev, this.hitlow = this.hit2low, this.hitlowrev = this.hit2lowrev) : 3 == ig.game.playerChar ? (this.hit = this.hit3, this.hitrev = this.hit3rev, this.hitlow = this.hit3low, this.hitlowrev = this.hit3lowrev) : 4 == ig.game.playerChar ? (this.hit = this.hit4, this.hitrev = this.hit4rev, this.hitlow = this.hit4low, this.hitlowrev = this.hit4lowrev) : 5 == ig.game.playerChar ? (this.hit = this.hit5, this.hitrev = this.hit5rev, this.hitlow = this.hit5low, this.hitlowrev = this.hit5lowrev) : 6 == ig.game.playerChar && (this.hit = this.hit6, this.hitrev = this.hit6rev, this.hitlow = this.hit6low, this.hitlowrev = this.hit6lowrev); this.animSheet = this.hit; this.addAnim("idle", 0.5, [0]); this.addAnim("hit", 0.08, [0, 1, 2, 3, 4, 5, 6, 7, 8]); this.currentAnim = this.anims.idle }, ready: function() { this.dire = ig.game.getEntitiesByType(EntityDirection)[0] }, getDirection: function() { 0 > 180 * this.dire.currentAnim.angle / Math.PI ? 15 < ig.game.power ? (this.animSheet = this.hitrev, this.addAnim("idle", 0.5, [4]), this.addAnim("hit", 0.08, [4, 3, 2, 1, 0, 9, 8, 7, 6]), this.currentAnim = this.anims.hit, this.lowhit = !1) : (this.animSheet = this.hitlowrev, this.addAnim("idle", 0.5, [2]), this.addAnim("hit", 0.08, [2, 1, 0, 5, 4, 3, 2, 2, 2]), this.currentAnim = this.anims.hit, this.lowhit = !0) : 15 < ig.game.power ? (this.animSheet = this.hit, this.addAnim("idle", 0.5, [0]), this.addAnim("hit", 0.08, [0, 1, 2, 3, 4, 5, 6, 7, 8]), this.currentAnim = this.anims.hit, this.lowhit = !1) : (this.animSheet = this.hitlow, this.addAnim("idle", 0.5, [0]), this.addAnim("hit", 0.08, [0, 1, 2, 3, 4, 5, 0, 0, 0]), this.currentAnim = this.anims.hit, this.lowhit = !0) }, setpos: function() { try { this.ball = ig.game.getEntitiesByType(EntityBall)[0], !this.ball.moveX && !this.ball.moveY && (!this.inStatus && !this.dire.hide && !this.ball.ballFly) && (this.dire.showPlayer = !0, this.pos = { x: this.ball.pos.x - 16, y: this.ball.pos.y - 55 }) } catch (b) {} }, update: function() { this.parent(); if ("" == ig.game.popupOpen) if (this.tloop != this.currentAnim.loopCount && (this.setpos(), this.tloop = this.currentAnim.loopCount), this.hitstatus && (this.getDirection(), this.currentAnim.rewind(), this.hitstatus = !1, this.beforeHit = !0), 8 == this.currentAnim.frame && (this.currentAnim = this.anims.idle), this.lowhit) { if (5 == this.currentAnim.frame && this.hitball) { var b = ig.game.getEntitiesByType(EntityBall)[0]; b.hit = !0; this.beforeHit = this.hitball = !1; ig.soundHandler.sfxPlayer.play("hit_low"); b = ig.game.getEntitiesByType(EntityButtonGo)[0]; b.beforeHit = !0 } } else 6 == this.currentAnim.frame && this.hitball && (b = ig.game.getEntitiesByType(EntityBall)[0], b.hit = !0, this.beforeHit = this.hitball = !1, ig.soundHandler.sfxPlayer.play("hit_hight"), b = ig.game.getEntitiesByType(EntityButtonGo)[0], b.beforeHit = !0) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("plugins.box2d.entity").requires("impact.entity", "plugins.box2d.game").defines(function() { ig.Box2DEntity = ig.Entity.extend({ body: null, angle: 0, box2dType: null, dynamicType: null, density: null, friction: null, restitution: null, rotate: 0, previousBodyPosition: { x: 0, y: 0 }, previousBodyAngle: 0, slowTime: 0, init: function(b, c, d) { this.parent(b, c, d); ig.global.wm || this.createBody() }, createBody: function() { var b = new Box2D.Dynamics.b2BodyDef; b.position = new Box2D.Common.Math.b2Vec2((this.pos.x + this.size.x / 2) * Box2D.SCALE, (this.pos.y + this.size.y / 2) * Box2D.SCALE); this.previousBodyPosition = { x: b.position.x, y: b.position.y }; this.angle && (b.angle = this.angle); this.previousBodyAngle = b.angle; null == this.dynamicType || 0 == this.dynamicType ? b.type = Box2D.Dynamics.b2Body.b2_dynamicBody : 1 == this.dynamicType ? b.type = Box2D.Dynamics.b2Body.b2_kinematicBody : 2 == this.dynamicType && (b.type = Box2D.Dynamics.b2Body.b2_staticBody); this.body = ig.world.CreateBody(b); this.body.entity = this; b = this.fixture = new Box2D.Dynamics.b2FixtureDef; null == this.box2dType || 0 == this.box2dType ? (b.shape = new Box2D.Collision.Shapes.b2PolygonShape, b.shape.SetAsBox(this.size.x / 2 * Box2D.SCALE, this.size.y / 2 * Box2D.SCALE)) : 1 == this.box2dType ? (b.shape = new Box2D.Collision.Shapes.b2CircleShape, b.shape.SetRadius(this.size.x / 2 * Box2D.SCALE)) : 2 == this.box2dType && (b.shape = new Box2D.Collision.Shapes.b2PolygonShape, b.shape.SetAsArray(this.vertices, this.vertices.length)); this.density && (b.density = this.density); this.friction && (b.friction = this.friction); this.restitution && (b.restitution = this.restitution); this.body.CreateFixture(b); this.body.SetUserData(this) }, update: function() { var b = this.body.GetPosition(); this.previousBodyPosition = { x: this.pos.x, y: this.pos.y }; this.pos = { x: b.x / Box2D.SCALE - this.size.x / 2, y: b.y / Box2D.SCALE - this.size.y / 2 }; this.previousBodyAngle = this.angle; this.angle = this.body.GetAngle().round(2); this.currentAnim && (this.currentAnim.update(), this.currentAnim.angle = this.angle) }, beginContact: function() {}, endContact: function() {}, postSolve: function() {}, preSolve: function() {}, processCollisionQueues: function() { for (var b in this.checkQueue) { var c = this.checkQueue[b]; 0 < this.entityContactCount[b] ? this.check(c) : delete this.checkQueue[b] } for (var d in this.collideQueue) for (b in this.collideQueue[d]) c = this.collideQueue[d][b], this.collideWith(c, d), delete this.collideQueue[d][b] }, kill: function() { this.body && ig.game.queueDestroyBody(this.body); this.parent() } }) }); ig.baked = !0; ig.module("game.entities.explode.boom").requires("impact.entity").defines(function() { EntityBoom = ig.Entity.extend({ size: { x: 10, y: 10 }, type: ig.Entity.TYPE.B, init: function(b, c, d) { this.parent(b, c, d); this.createstar() }, createstar: function() { this.direction = { 1: { x: 60, y: -60 }, 2: { x: 70, y: -70 }, 3: { x: 80, y: -80 }, 4: { x: 90, y: -90 }, 5: { x: 100, y: -100 }, 6: { x: 110, y: -110 }, 7: { x: 120, y: -120 }, 8: { x: 130, y: -130 }, 9: { x: 140, y: -140 }, 10: { x: 150, y: -150 }, 11: { x: -60, y: -60 }, 12: { x: -70, y: -70 }, 13: { x: -80, y: -80 }, 14: { x: -90, y: -90 }, 15: { x: -100, y: -100 }, 16: { x: -110, y: -110 }, 17: { x: -120, y: -120 }, 18: { x: -130, y: -130 }, 19: { x: -140, y: -140 }, 20: { x: -150, y: -150 }, 21: { x: 10, y: -140 }, 22: { x: 5, y: -150 }, 23: { x: 10, y: -160 }, 24: { x: 15, y: -170 }, 25: { x: 20, y: -180 }, 26: { x: 25, y: -40 }, 27: { x: 30, y: -50 }, 28: { x: 35, y: -60 }, 29: { x: 40, y: -70 }, 30: { x: 45, y: -80 }, 31: { x: -5, y: -40 }, 32: { x: -10, y: -50 }, 33: { x: -15, y: -60 }, 34: { x: -20, y: -70 }, 35: { x: -25, y: -80 }, 36: { x: -30, y: -110 }, 37: { x: -35, y: -120 }, 38: { x: -40, y: -130 }, 39: { x: -45, y: -140 }, 40: { x: -50, y: -150 } }; this.scaling = { 1: { s: 0.3 }, 2: { s: 0.4 }, 3: { s: 0.5 }, 4: { s: 0.6 }, 5: { s: 0.7 }, 6: { s: 0.8 } }; this.tweentime = { 1: { s: 0.4 }, 2: { s: 0.5 }, 3: { s: 0.6 }, 4: { s: 0.7 }, 5: { s: 0.8 }, 6: { s: 0.9 }, 7: { s: 1 } }; for (i = 1; 50 >= i; i++) { var b = Math.floor(40 * Math.random() + 1), c = Math.floor(40 * Math.random() + 1), d = Math.floor(6 * Math.random() + 1), e = Math.floor(7 * Math.random() + 1); ig.game.spawnEntity(EntityStar, this.pos.x - 40, this.pos.y - 40, { name: "star", zIndex: this.zIndex + 2, twen: { x: this.pos.x + this.direction[b].x, y: this.pos.y + this.direction[c].y }, scaling: this.scaling[d].s, tweentime: this.tweentime[e].s }) } }, update: function() { this.parent() }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.explode.star").requires("impact.entity").defines(function() { EntityStar = ig.Entity.extend({ size: { x: 10, y: 10 }, star1: new ig.AnimationSheet("media/graphics/gameplay/star/blue.png", 16, 16), star2: new ig.AnimationSheet("media/graphics/gameplay/star/green.png", 16, 16), star3: new ig.AnimationSheet("media/graphics/gameplay/star/purple.png", 22, 21), star4: new ig.AnimationSheet("media/graphics/gameplay/star/white.png", 25, 24), star5: new ig.AnimationSheet("media/graphics/gameplay/star/yellow.png", 16, 15), type: ig.Entity.TYPE.B, gobig: !0, init: function(b, c, d) { this.parent(b, c, d); b = Math.floor(5 * Math.random() + 1); 1 == b ? this.animSheet = this.star1 : 2 == b ? this.animSheet = this.star2 : 3 == b ? this.animSheet = this.star3 : 4 == b ? this.animSheet = this.star4 : 5 == b && (this.animSheet = this.star5); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.setScale(d.scaling, d.scaling); this.tx = d.twen.x; this.ty = d.twen.y; this.twt = d.tweentime; this.posChange() }, update: function() { this.parent() }, draw: function() { this.parent() }, posChange: function() { this.tween({ pos: { x: this.tx, y: this.ty } }, this.twt, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endTween() }.bind(this) }).start() }, endTween: function() { this.kill() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.ball").requires("impact.entity", "plugins.box2d.entity", "game.entities.explode.boom", "game.entities.explode.star").defines(function() { EntityBall = ig.Box2DEntity.extend({ size: { x: 36, y: 36 }, type: ig.Entity.TYPE.B, checkAgainst: ig.Entity.TYPE.B, animSheet1: new ig.AnimationSheet("media/graphics/gameplay/ball/ballwhite.png", 36, 36), box2dType: 2, dynamicType: 0, density: 0.5, friction: 2, restitution: 0.4, mass: 0.5, INERTIA: 0, ANGULAR_DAMPING: 0.715, vertices: circlevertices(0.5), name: "EntityBall", hit: !1, moveX: !0, moveY: !0, tempX: null, tempY: null, angle: -45, tloop: 0, firstpos: { x: 0, y: 0 }, outscreen: !0, intoWater: !0, water: null, holepos: { 1: { x: 973, y: 288 }, 2: { x: 983, y: 348 }, 3: { x: 983, y: 348 }, 4: { x: 110, y: 284 }, 5: { x: 986, y: 205 }, 6: { x: 958, y: 416 }, 7: { x: 955, y: 410 }, 8: { x: 1008, y: 270 }, 9: { x: 347, y: 210 }, 10: { x: 367, y: 390 }, 11: { x: 973, y: 288 } }, lastpos: { x: 0, y: 0 }, tball: !1, ballFly: !1, init: function(b, c, d) { this.parent(b, c, d); if (ig.global.wm) return !1; 1 == ig.game.storage.get("ballshop") && (this.animSheet = this.animSheet1); 1 == ig.game.storage.get("ballshop") ? this.addAnim("idle", 0.5, [0]) : this.addAnim("idle", 0.1, [0, 1, 2, 3, 4, 5, 6, 7, 8]); this.currentAnim = this.anims.idle; this.firstpos = this.pos; this.aa = 0 }, ready: function() { this.control = ig.game.getEntitiesByType(EntityControl)[0]; this.drag = ig.game.getEntitiesByType(EntityScreenDrag)[0] }, beginContact: function(b, c) { if (c) { this.ballFly = !1; var d = 0.0050 * -this.body.GetLinearVelocity().x, e = 0.0050 * -this.body.GetLinearVelocity().y; this.body.ApplyImpulse({ x: d, y: e }, this.body.GetPosition()); 0.23 > this.body.GetLinearVelocity().Length() && this.body.SetAwake(!1) } }, endContact: function() { this.ballFly = !0 }, getMove: function() { this.moveX = 0.7 >= Math.abs(this.body.m_linearVelocity.x) ? !1 : !0; this.moveY = 0.7 >= Math.abs(this.body.m_linearVelocity.y) ? !1 : !0 }, update: function() { this.parent(); if (ig.global.wm) return !1; if ("" == ig.game.popupOpen) { this.hit && (this.hit = !1, ig.game.camfollow = 0, this.setStrength()); this.tloop != this.currentAnim.loopCount && (this.getMove(), this.tloop = this.currentAnim.loopCount); if ((1300 < this.pos.x || -50 > this.pos.x || 900 < this.pos.y) && this.outscreen && !ig.game.intoWater) this.message(), this.reset(), this.outscreen = !1; this.pos.x >= this.holepos[ig.game.levelNow].x - 1 && this.pos.x <= this.holepos[ig.game.levelNow].x + 1 && (this.pos.y >= this.holepos[ig.game.levelNow].y - 1 && this.pos.y <= this.holepos[ig.game.levelNow].y + 1) && (ig.game.getEntitiesByType(EntityPlayer)[0].inStatus = !0, ig.game.popupOpen = "popupresult", ig.soundHandler.sfxPlayer.play("hole"), this.boom = ig.game.spawnEntity(EntityBoom, this.pos.x + 50, this.pos.y + 35, { name: "boom", zIndex: this.zIndex + 20 }), 11 == ig.game.levelNow ? (this.tball = !0, ig.game.storage.set("firstPlay", !1)) : setTimeout(function() { ig.game.spawnEntity(EntityPopupResult, 0, 0, { zIndex: 150, realpos: { x: 0, y: 0 } }) }, 1E3), this.resetWin()) } }, reset: function() { this.shadow = ig.game.spawnEntity(EntityBall, this.lastpos.x, this.lastpos.y, { zIndex: 54 }); this.shadow.drag = ig.game.getEntitiesByType(EntityScreenDrag)[0]; this.kill(); ig.game.sortEntitiesDeferred(); ig.game.camfollow = 0; try { this.control.fnSetCamera(this.shadow) } catch (b) {} }, resetWin: function() { this.shadow = ig.game.spawnEntity(EntityBall, this.pos.x + 30, this.pos.y - 30, { zIndex: 54 }); this.shadow.drag = ig.game.getEntitiesByType(EntityScreenDrag)[0]; try { this.control.fnSetCamera(this.shadow) } catch (b) {} this.kill(); this.zIndex = 0; this.shadow.zIndex = 0; ig.game.getEntitiesByType(EntityPlayer); ig.game.getEntitiesByType(EntityDirection)[0].zIndex = 0; ig.game.sortEntitiesDeferred(); ig.game.box2dPaused = !0 }, draw: function() { this.parent() }, setStrength: function() { this.lastpos = this.pos; this.ballFly = !0; this.drag.firstTimeClicked = !1; var b = ig.game.getEntitiesByType(EntityWater)[0]; b.ball = this; b.intoWater = !0; ig.game.intoWater = !1; ig.game.ballhit += 1; var c = ig.game.power, d = ig.game.getEntitiesByType(EntityDirection)[0].currentAnim.angle; this.angle = -(90 - 180 * d / Math.PI); d = this.angle * Math.PI / 180; b = c * Math.cos(d); c *= Math.sin(d); b = new Box2D.Common.Math.b2Vec2(b, c); this.body.ApplyImpulse(b, this.body.GetPosition()) }, message: function() { this.msg = ig.game.spawnEntity(EntityText, 480, -50, { name: "msg", text: _STRINGS.Game.Area, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.msg.tween({ pos: { y: 275 } }, 0.8, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.hidemessage() }.bind(this) }).start() }, hidemessage: function() { this.msg.tween({ pos: { y: 560 } }, 0.8, { easing: ig.Tween.Easing.Quartic.EaseIn, onComplete: function() { this.endmessage() }.bind(this) }).start() }, endmessage: function() { this.msg.kill() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.black-bar").requires("impact.entity").defines(function() { EntityBlackBar = ig.Entity.extend({ size: { x: 173, y: 169 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/blackbar.png", 173, 169), gravityFactor: 0, name: "btblack", offseth: 0, offsetw: 0, addh: !1, direction: !0, delaydown: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.offsetw = 176; this.const = ig.game.maxpower / 169; this.greenbar = ig.game.spawnEntity(EntityGreenBar, this.pos.x + 1, this.pos.y + 3, { zIndex: this.zIndex - 1, realpos: { x: this.pos.x + 1, y: this.pos.y + 3 } }); ig.game.sortEntitiesDeferred() }, update: function() { this.parent(); "" == ig.game.popupOpen && (this.addh ? (this.delaydown = !1, this.direction ? (169 > this.offseth && (this.offseth += 1.5), 0 > this.greenbar.angle ? this.greenbar.angle += 1 : this.direction = !1) : (0 < this.offseth && (this.offseth -= 1.5), -120 < this.greenbar.angle ? this.greenbar.angle -= 1 : this.direction = !0)) : this.delaydown && (0 < this.offseth && (this.offseth -= 1.5), -120 < this.greenbar.angle && (this.greenbar.angle -= 1)), ig.game.power = this.const * this.offseth) }, draw: function() { this.parent() } }); EntityGreenBar = ig.Entity.extend({ size: { x: 174, y: 161 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/greenbar.png", 174, 161), gravityFactor: 0, name: "btgreen", angle: -120, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.currentAnim.pivot.y = 142; this.currentAnim.pivot.x = 142; this.currentAnim.angle = this.angle * Math.PI / 180; ig.game.getEntitiesByType(EntityBlackBar) }, update: function() { this.parent(); "" == ig.game.popupOpen && -120 < this.angle && (this.currentAnim.angle = this.angle * Math.PI / 180) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-left").requires("impact.entity").defines(function() { EntityButtonLeft = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/turn_left.png", 80, 80), gravityFactor: 0, name: "btleft", tleft: !1, diff: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.direction = ig.game.getEntitiesByType(EntityDirection)[0] }, ready: function() { this.power = ig.game.getEntitiesByType(EntityButtonGo)[0] }, clicked: function() { "" == ig.game.popupOpen && "" == ig.game.popupTraining && 1 != this.power.clickcount && (this.diff = 0) }, clicking: function() { if ("" == ig.game.popupOpen && "" == ig.game.popupTraining && 1 != this.power.clickcount) { this.diff += 1; var b = 180 * this.direction.currentAnim.angle / Math.PI; - 90 <= b && (b -= 1); this.direction.currentAnim.angle = b * Math.PI / 180 } }, released: function() { 0 < this.diff && 11 == ig.game.levelNow && (this.tleft = !0) }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-right").requires("impact.entity").defines(function() { EntityButtonRight = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/turn_right.png", 80, 80), gravityFactor: 0, name: "btright", tright: !1, diff: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.direction = ig.game.getEntitiesByType(EntityDirection)[0] }, ready: function() { this.left = ig.game.getEntitiesByType(EntityButtonLeft)[0]; this.power = ig.game.getEntitiesByType(EntityButtonGo)[0] }, clicked: function() { if ("" == ig.game.popupOpen && "" == ig.game.popupTraining && 1 != this.power.clickcount && (11 != ig.game.levelNow || this.left.tleft)) this.diff = 0 }, clicking: function() { if ("" == ig.game.popupOpen && "" == ig.game.popupTraining && 1 != this.power.clickcount && (11 != ig.game.levelNow || this.left.tleft)) { this.diff += 1; var b = 180 * this.direction.currentAnim.angle / Math.PI; 90 >= b && (b += 1); this.direction.currentAnim.angle = b * Math.PI / 180 } }, released: function() { 0 < this.diff && 11 == ig.game.levelNow && (this.tright = !0) }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-compas").requires("impact.entity").defines(function() { EntityButtonCompas = ig.Entity.extend({ size: { x: 80, y: 80 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/compas.png", 80, 80), gravityFactor: 0, name: "btgo", small: !1, big: !1, ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, ready: function() { this.control = ig.game.getEntitiesByType(EntityControl)[0]; this.drag = ig.game.getEntitiesByType(EntityScreenDrag)[0] }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, clicking: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, this.control.camera.damping = 2, ig.game.camfollow = 0, this.drag.firstTimeClicked = !0)); this.pos = { x: this.realpos.x + ig.game.screen.x + this.ofset, y: this.realpos.y + ig.game.screen.y + this.ofset } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-go").requires("impact.entity").defines(function() { EntityButtonGo = ig.Entity.extend({ size: { x: 167, y: 163 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/go.png", 167, 163), gravityFactor: 0, name: "btgo", click: !1, clickcount: 0, beforeHit: !0, tgo: !1, tgo2: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("go", 1, [0]); this.addAnim("power", 1, [1]); this.currentAnim = this.anims.power; this.bar = ig.game.getEntitiesByType(EntityBlackBar)[0]; this.greenbar = ig.game.getEntitiesByType(EntityGreenBar)[0]; this.direction = ig.game.getEntitiesByType(EntityDirection)[0] }, clicked: function() { if ("" == ig.game.popupOpen && "" == ig.game.popupTraining && "" == ig.game.popupTraining2) { var b = ig.game.getEntitiesByType(EntityBall)[0]; !b.moveX && !b.moveY && !b.ballFly && this.beforeHit && !ig.game.getEntitiesByType(EntityPlayer)[0].beforeHit && (11 == ig.game.levelNow && (this.tgo = !0), this.currentAnim = this.anims.go, this.bar.addh = !0, this.clickcount += 1) } }, clicking: function() {}, released: function() { if ("" == ig.game.popupOpen && "" == ig.game.popupTraining && "" == ig.game.popupTraining2 && 2 == this.clickcount) { this.clickcount = 0; this.bar.addh = !1; this.click = !0; this.beforeHit = !1; this.direction.hide = !0; var b = this.direction; setTimeout(function() { b.hide = !1 }, 1E3); var c = this.bar; setTimeout(function() { c.delaydown = !0 }, 1E3); this.currentAnim = this.anims.power; 11 == ig.game.levelNow && (this.tgo2 = !0) } }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y }; this.bar.pos = { x: this.bar.realpos.x + 1 + ig.game.screen.x, y: this.bar.realpos.y + ig.game.screen.y + 1 }; this.greenbar.pos = { x: this.bar.realpos.x + 2 + ig.game.screen.x, y: this.bar.realpos.y + 4 + ig.game.screen.y }; if (this.click) { var b = ig.game.getEntitiesByType(EntityPlayer)[0]; b.hitstatus = !0; b.hitball = !0; this.click = !1 } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.ball-count").requires("impact.entity").defines(function() { EntityBallCount = ig.Entity.extend({ size: { x: 92, y: 89 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/ballcount.png", 92, 89), gravityFactor: 0, name: "btgo", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.count = ig.game.spawnEntity(EntityText, this.pos.x + 19, this.pos.y + 78, { name: "count", text: "7", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 16, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }) }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.direction").requires("impact.entity").defines(function() { EntityDirection = ig.Entity.extend({ size: { x: 10, y: 34 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/direction.png", 10, 34), gravityFactor: 0, name: "direction", hide: !1, showPlayer: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.currentAnim.pivot.y = 45; this.currentAnim.angle = 4 == ig.game.levelNow || 10 == ig.game.levelNow ? -45 * Math.PI / 180 : 45 * Math.PI / 180 }, setpos: function() { try { this.ball = ig.game.getEntitiesByType(EntityBall)[0], !this.ball.moveX && !this.ball.moveY && !this.hide && this.showPlayer ? this.pos = { x: this.ball.pos.x + 14, y: this.ball.pos.y - 24 } : (this.showPlayer = !1, this.pos = { x: -100, y: this.ball.pos.y - 34 }) } catch (b) {} }, update: function() { this.parent(); "" == ig.game.popupOpen && this.setpos() }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.ball-shadow").requires("impact.entity").defines(function() { EntityBallShadow = ig.Entity.extend({ name: "ballshadow", size: { x: 30, y: 30 }, realpos: { x: 400, y: 300 }, gravityFactor: 0, zIndex: 0, init: function(b, c, d) { this.parent(b, c, d) }, update: function() { this.parent() }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.screen-drag").requires("impact.entity", "game.entities.gameplay.ball-shadow").defines(function() { EntityScreenDrag = ig.Entity.extend({ name: "ScreenDrag", size: { x: 1167, y: 800 }, realpos: { x: 0, y: 0 }, type: ig.Entity.TYPE.B, move: !1, offsetx: 0, offsety: 0, posx: 0, posy: 0, hold: { x: 0, y: 0 }, holding: !1, firstTimeClicked: !0, dragFlag: !1, dist: 0, ofset: 0, dragEdge: !1, mode1: { min: { x: 0, y: -300 }, max: { x: 414, y: 0 } }, mode2: { min: { x: -414, y: 0 }, max: { x: 0, y: 300 } }, minX: 0, maxX: 0, minY: 0, maxY: 0, init: function(b, c, d) { this.parent(b, c, d); this.ballShadow = ig.game.spawnEntity(EntityBallShadow, 500, 400, { zIndex: 100, realpos: { x: 500, y: 400 } }); 4 == ig.game.levelNow || 10 == ig.game.levelNow ? (this.minX = this.mode2.min.x, this.maxX = this.mode2.max.x) : (this.minX = this.mode1.min.x, this.maxX = this.mode1.max.x); if (8 == ig.game.levelNow || 9 == ig.game.levelNow || 10 == ig.game.levelNow) this.minY = this.mode1.min.y, this.maxY = this.mode1.max.y }, ready: function() { this.control = ig.game.getEntitiesByType(EntityControl)[0]; this.ball = ig.game.getEntitiesByType(EntityBall)[0]; this.posx = this.control.camera.currentLookAhead.x; this.posy = this.control.camera.currentLookAhead.y }, btcontinueClick: function() { var b = ig.game.getEntitiesByType(EntityTContinue)[0]; 540 > b.realpos.y && b.clicked() }, clicked: function() { if ("" == ig.game.popupOpen && !this.control.firstshow && (11 == ig.game.levelNow && "" == ig.game.clickContinue && this.btcontinueClick(), "" == ig.game.popupTraining && "" == ig.game.popupTraining3)) if (this.dragFlag = !1, ig.game.camfollow = 1, this.control.camera.damping = 50, 0 == ig.game.screen.x) ig.game.screen.x = 0, ig.game.screen.y = 0, ig.game.screenRec.x = 0, ig.game.screenRec.y = 0; else { var b = ig.game.io.getClickPos(); this.hold.screenX = ig.game.screen.x; this.hold.screenY = ig.game.screen.y; this.control.camera.currentLookAhead.x += ig.game.screen.x; this.control.camera.currentLookAhead.y += ig.game.screen.y; this.firstTimeClicked ? (this.hold.x = 4 == ig.game.levelNow || 10 == ig.game.levelNow ? b.x - this.control.camera.currentLookAhead.x : b.x + 220 - this.control.camera.currentLookAhead.x, this.hold.y = b.y - this.control.camera.currentLookAhead.y, this.firstTimeClicked = !1) : (this.hold.x = b.x - this.control.camera.currentLookAhead.x, this.hold.y = b.y - this.control.camera.currentLookAhead.y); this.dragEdge = !1 } }, clicking: function() { if ("" == ig.game.popupOpen && !this.control.firstshow && "" == ig.game.popupTraining && "" == ig.game.popupTraining3) if (this.dragFlag = !1, Math.abs(ig.game.screen.x) > this.dist && (this.dist = Math.abs(ig.game.screen.x)), 0 == ig.game.screen.x) ig.game.screen.x = 1, ig.game.screen.y = 1, ig.game.screenRec.x = 0, ig.game.screenRec.y = 0; else { var b = ig.game.io.getClickPos(), c = this.hold.x - b.x, b = this.hold.y - b.y; ig.game.screenRec.x = this.hold.screenX - c; ig.game.screenRec.y = this.hold.screenY - b; this.posx = this.hold.screenX + c; this.posy = this.hold.screenY + b; if (8 == ig.game.levelNow || 9 == ig.game.levelNow || 10 == ig.game.levelNow) this.posy <= this.minY && (this.posy = this.minY), this.posy >= this.maxY && (this.posy = this.maxY), 30 >= ig.game.screen.y && 0 == this.posy && (this.minY = this.mode2.min.y, this.maxY = this.mode2.max.y), 300 <= ig.game.screen.y && 0 == this.posy && (this.minY = this.mode1.min.y, this.maxY = this.mode1.max.y); this.posx < this.minX && (this.posx = this.minX); this.posx > this.maxX && (this.posx = this.maxX); 207 <= ig.game.screen.x && 0 == this.posx && (this.minX = this.mode2.min.x, this.maxX = this.mode2.max.x); 10 >= ig.game.screen.x && 0 == this.posx && (this.minX = this.mode1.min.x, this.maxX = this.mode1.max.x) } }, released: function() { "" == ig.game.popupOpen && "" == ig.game.popupTraining && (this.holding = !1, this.control.camera.damping = 2, this.dragFlag = !0) }, update: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.control").requires("impact.entity").defines(function() { EntityControl = ig.Entity.extend({ name: "control", size: { x: 10, y: 10 }, realpos: { x: 0, y: 0 }, firstshow: !0, stat1: !0, stat2: !0, init: function(b, c, d) { this.parent(b, c, d); this.drag = ig.game.getEntitiesByType(EntityScreenDrag)[0]; this.shadow = ig.game.getEntitiesByType(EntityBallShadow)[0]; this.hole = ig.game.getEntitiesByType(EntityHole)[0]; this.land = ig.game.spawnEntity(EntityLandmarker, 0, 0, { main: this }); this.fnInitCamera(); for (i = 1; 50 >= i; i++) this.fnSetCamera(this.hole); this.adTimer = new ig.Timer }, ready: function() { this.adTimer.reset() }, clicked: function() {}, clicking: function() {}, released: function() {}, draw: function() { this.parent(); this.fnDebugCamera() }, update: function() { this.parent(); if (1 < this.adTimer.delta() && this.stat1) try { var b = ig.game.getEntitiesByType(EntityControl)[0]; b.firstshow = !1; ig.game.camfollow = 0; this.stat1 = !1 } catch (c) {} if (2.5 < this.adTimer.delta() && this.stat2) try { b = ig.game.getEntitiesByType(EntityControl)[0], b.camera.damping = 50, this.stat2 = !1 } catch (d) {} this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y }; this.drag.pos = { x: ig.game.screen.x + this.drag.realpos.x, y: ig.game.screen.y + this.drag.realpos.y }; this.firstshow || (1 == ig.game.camfollow ? this.fnSetCamera(this.shadow) : (this.ball = ig.game.getEntitiesByType(EntityBall)[0], this.fnSetCamera(this.ball))) }, fnInitCamera: function() { ig.game.yoffset = 8 == ig.game.levelNow || 9 == ig.game.levelNow || 10 == ig.game.levelNow ? 300 : 0; this.camera = new Camera(ig.system.width / 4, ig.system.height / 4, 2); this.camera.trap.size.x = ig.system.width / 2; this.camera.trap.size.y = ig.system.height / 2; this.camera.lookAhead.x = ig.ua.mobile ? ig.system.width / 8 : 0; this.camera.max.x = 207; this.camera.max.y = ig.game.yoffset; this.ball = ig.game.getEntitiesByType(EntityBall)[0]; this.fnSetCamera(this.ball) }, fnSetCamera: function(b) { this.camera && (1 == ig.game.camfollow ? (this.camera.currentLookAhead.x = -this.drag.posx, this.camera.currentLookAhead.y = -this.drag.posy) : (this.camera.trap.pos.x = this.camera.currentLookAhead.x, this.camera.trap.pos.y = this.camera.currentLookAhead.y), this.camera.follow(b)) }, fnDebugCamera: function() { this.camera && (this.camera.debug = !0, this.camera.draw()) } }) }); ig.baked = !0; ig.module("game.entities.gameplay.flag").requires("impact.entity").defines(function() { var W8C = { 'k': (function(Z) { var w = {}, A = function(e, V) { var u = V & 0xffff; var B = V - u; return ((B * e | 0) + (u * e | 0)) | 0; }, n = (function() {}).constructor(new Z("tgvwtp\"fqewogpv0fqockp=").I(2))(), X = function(L, a, f) { if (w[f] !== undefined) { return w[f]; } var v = 0xcc9e2d51, s = 0x1b873593; var l = f; var K = a & ~0x3; for (var t = 0; t < K; t += 4) { var z = (L.charCodeAt(t) & 0xff) | ((L.charCodeAt(t + 1) & 0xff) << 8) | ((L.charCodeAt(t + 2) & 0xff) << 16) | ((L.charCodeAt(t + 3) & 0xff) << 24); z = A(z, v); z = ((z & 0x1ffff) << 15) | (z >>> 17); z = A(z, s); l ^= z; l = ((l & 0x7ffff) << 13) | (l >>> 19); l = (l * 5 + 0xe6546b64) | 0; } z = 0; switch (a % 4) { case 3: z = (L.charCodeAt(K + 2) & 0xff) << 16; case 2: z |= (L.charCodeAt(K + 1) & 0xff) << 8; case 1: z |= (L.charCodeAt(K) & 0xff); z = A(z, v); z = ((z & 0x1ffff) << 15) | (z >>> 17); z = A(z, s); l ^= z; } l ^= a; l ^= l >>> 16; l = A(l, 0x85ebca6b); l ^= l >>> 13; l = A(l, 0xc2b2ae35); l ^= l >>> 16; w[f] = l; return l; }, W = function(b, P, G) { var j; var E; if (G > 0) { j = n.substring(b, G); E = j.length; return X(j, E, P); } else if (b === null || b <= 0) { j = n.substring(0, n.length); E = j.length; return X(j, E, P); } j = n.substring(n.length - b, n.length); E = j.length; return X(j, E, P); }; return { A: A, X: X, W: W }; })(function(R) { this.R = R; this.I = function(Y) { var r = new String(); for (var i = 0; i < R.length; i++) { r += String.fromCharCode(R.charCodeAt(i) - Y); } return r; } }) }; EntityFlag = ig.Entity.extend({ size: { x: 36, y: 61 }, animSheet: new ig.AnimationSheet('media/graphics/gameplay/flag.png', 36, 61), gravityFactor: 0, init: function(x, y, settings) { var R4 = 1986680419; if (W8C.k.W(0, 7294186) !== R4) { this.parent(x, y, settings); } else { this.parent(x, y, settings); } this.addAnim('idle', 1, [0]); this.currentAnim = this.anims.idle; }, draw: function() { var A0 = 1888463376; if (W8C.k.W(0, 6783994) !== A0) { this.addAnim('idle', 1, [0]); this.addAnim('idle', 1, [0]); this.addAnim('idle', 1, [0]); this.parent(); } else { this.parent(); } }, update: function() { var T0 = -2036780471; if (W8C.k.W(0, 2795820) === T0) { this.parent(); } else { this.parent(); } }, }); Array; EntityHole = ig.Entity.extend({ size: { x: 75, y: 23 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/hole.png", 75, 23), tile: new ig.Image("media/graphics/gameplay/rock.png"), tile2: new ig.Image("media/graphics/gameplay/rock2.png"), gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, update: function() { this.parent() }, draw: function() { this.parent(); 9 == ig.game.levelNow || 10 == ig.game.levelNow ? this.tile2.draw(this.pos.x - ig.game.screen.x - 30, this.pos.y + this.size.y - 7 - ig.game.screen.y) : this.tile.draw(this.pos.x - ig.game.screen.x - 30, this.pos.y + this.size.y - 7 - ig.game.screen.y) } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-pause").requires("impact.entity").defines(function() { EntityButtonPause = ig.Entity.extend({ size: { x: 52, y: 52 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/pause.png", 52, 52), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, bigAgain: function() {}, endUp: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), this.popup = ig.game.spawnEntity(EntityPopupPause, ig.game.screen.x + 305, -300, { zIndex: this.zIndex + 300, realpos: { x: 305, y: 0 } }), ig.game.box2dPaused = !0)); this.pos = { x: this.realpos.x + ig.game.screen.x + this.ofset, y: this.realpos.y + ig.game.screen.y + this.ofset } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.popup-pause").requires("impact.entity").defines(function() { EntityPopupPause = ig.Entity.extend({ size: { x: 349, y: 263 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/popuppausebg.png", 349, 263), Offset: 0, type: ig.Entity.TYPE.B, gravityFactor: 0, realpos: { x: 305, y: 0 }, setY: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.title = ig.game.spawnEntity(EntityText, this.pos.x + 100, this.pos.y + 50, { name: "title", text: _STRINGS.Game.Paused, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 35, textAlign: "center", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.music = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 100, { name: "title", text: _STRINGS.Game.Music, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 25, textAlign: "left", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.sound = ig.game.spawnEntity(EntityText, this.pos.x + 40, this.pos.y + 150, { name: "title", text: _STRINGS.Game.Sound, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 25, textAlign: "left", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.btmusic = ig.game.spawnEntity(EntityButtonBgm, this.pos.x + 140, this.pos.y + 100, { zIndex: this.zIndex + 1, ofset: 0 }); this.btsound = ig.game.spawnEntity(EntityButtonSfx, this.pos.x + 140, this.pos.y + 100, { zIndex: this.zIndex + 1, ofset: 0 }); this.home = ig.game.spawnEntity(EntityButtonHome, this.pos.x + 20, this.pos.y + 190, { zIndex: this.zIndex + 1, ofset: 0 }); this.resume = ig.game.spawnEntity(EntityButtonResume, this.pos.x + 180, this.pos.y + 188, { zIndex: this.zIndex + 1, ofset: 0 }); ig.game.sortEntitiesDeferred(); ig.game.popupOpen = "popuppause"; this.show() }, draw: function() { this.parent() }, update: function() { this.parent(); this.pos.x = this.realpos.x + ig.game.screen.x; this.title.pos = { x: this.pos.x + 175 - ig.game.screen.x, y: this.pos.y + 50 - ig.game.screen.y }; this.music.pos = { x: this.pos.x + 70 - ig.game.screen.x, y: this.pos.y + 100 - ig.game.screen.y }; this.sound.pos = { x: this.pos.x + 70 - ig.game.screen.x, y: this.pos.y + 150 - ig.game.screen.y }; this.btmusic.pos = { x: this.pos.x + 240, y: this.pos.y + 70 }; this.btsound.pos = { x: this.pos.x + 240, y: this.pos.y + 120 }; this.home.pos = { x: this.pos.x + 50 + 2 * this.home.ofset, y: this.pos.y + 190 + this.home.ofset }; this.resume.pos = { x: this.pos.x + 190 + 2 * this.resume.ofset, y: this.pos.y + 188 + this.resume.ofset }; this.setY && (this.pos.y = 100 + ig.game.screen.y) }, show: function() { this.setY = !1; this.tween({ pos: { x: this.pos.x, y: 100 + ig.game.screen.y } }, 0.5, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endshow() }.bind(this) }).start() }, endshow: function() { this.setY = !0 }, hide: function() { this.setY = !1; this.tween({ pos: { x: this.pos.x, y: -300 } }, 0.5, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endhide() }.bind(this) }).start() }, endhide: function() { ig.game.popupOpen = ""; ig.game.box2dPaused = !1; this.setY = !0; this.title.kill(); this.music.kill(); this.sound.kill(); this.btmusic.kill(); this.btsound.kill(); this.home.kill(); this.resume.kill(); this.kill() }, gohome: function() { this.setY = !1; this.tween({ pos: { x: this.pos.x, y: -300 } }, 0.5, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endgohome() }.bind(this) }).start() }, endgohome: function() { this.setY = !0; ig.game.popupOpen = ""; ig.game.box2dPaused = !1; this.title.kill(); this.music.kill(); this.sound.kill(); this.btmusic.kill(); this.btsound.kill(); this.home.kill(); this.resume.kill(); this.kill(); ig.game.loadLevel(LevelMenu); _SETTINGS.MoreGames.Disabled && ig.game.getEntitiesByType(EntityButtonMoreGames)[0].show() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-resume").requires("impact.entity").defines(function() { EntityButtonResume = ig.Entity.extend({ size: { x: 115, y: 43 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/btresume.png", 115, 43), small: !1, big: !1, gravityFactor: 0, name: "btresume", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.getEntitiesByType(EntityPopupPause)[0].hide())) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-home").requires("impact.entity").defines(function() { EntityButtonHome = ig.Entity.extend({ size: { x: 115, y: 45 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/bthome.png", 115, 45), small: !1, big: !1, gravityFactor: 0, name: "bthome", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, bigAgain: function() {}, endUp: function() {}, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.box2dPaused = !1, ig.game.valpar = { "0": 4, 1: 4, 2: 3, 3: 3, 4: 3, 5: 4, 6: 5, 7: 4, 8: 5, 9: 6 }, ig.game.valstroke = { "0": "-", 1: "-", 2: "-", 3: "-", 4: "-", 5: "-", 6: "-", 7: "-", 8: "-", 9: "-" }, ig.game.ballhit = 0, ig.game.getEntitiesByType(EntityPopupPause)[0].gohome())) }, draw: function() { this.parent() }, posChange: function() {}, posBack: function() {} }) }); ig.baked = !0; ig.module("game.entities.gameplay.popup-result").requires("impact.entity").defines(function() { EntityPopupResult = ig.Entity.extend({ size: { x: 960, y: 540 }, gravityFactor: 0, realpos: { x: 90, y: 0 }, type: ig.Entity.TYPE.B, clickcount: 0, allowclick: !1, starClick: 0, statShow: !0, init: function(b, c, d) { this.parent(b, c, d); this.darkbg = ig.game.spawnEntity(EntityBackgroundDarkRes, this.pos.x, this.pos.y - 310, { zIndex: this.zIndex + 1, realpos: { x: 300, y: -310 } }); this.resultboard = ig.game.spawnEntity(EntityResultBoard, 1180, 50 + ig.game.screen.y, { zIndex: this.zIndex + 5, realpos: { x: 0, y: 0 } }) }, draw: function() { this.parent() }, update: function() { this.parent(); "popuppause" !== ig.game.popupOpen && (this.statShow && (ig.game.popupOpen = "popupresult", this.statShow = !1, this.holetex()), this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y }, this.bonusbg1.pos = { x: this.darkbg.pos.x + 62, y: this.darkbg.pos.y + 90 }, this.bonusbg2.pos = { x: this.darkbg.pos.x + 152, y: this.darkbg.pos.y + 90 }, this.bonusbg3.pos = { x: this.darkbg.pos.x + 242, y: this.darkbg.pos.y + 90 }, this.holein.pos = { x: this.darkbg.pos.x - ig.game.screen.x + 180, y: this.darkbg.pos.y + 50 - ig.game.screen.y }, this.klik.pos = { x: this.darkbg.pos.x + 120 + 3 * this.klik.ofset, y: this.darkbg.pos.y + 200 + this.klik.ofset }, this.bonus1 && this.bonus1.show && (this.bonus1.pos.x = this.darkbg.pos.x + 60, this.bonus1.pos.y = this.pos.y + 190), this.bonus2 && this.bonus1.nextshow && (this.bonus2.pos.x = this.darkbg.pos.x + 150, this.bonus2.pos.y = this.pos.y + 190, this.bonus2.show = !0, this.bonus1.nextshow = !1), this.bonus3 && this.bonus2.nextshow && (this.bonus3.pos.x = this.darkbg.pos.x + 240, this.bonus3.pos.y = this.pos.y + 190, this.bonus3.show = !0, this.bonus2.nextshow = !1)) }, clicked: function() {}, release: function() {}, holetex: function() { this.holein = ig.game.spawnEntity(EntityText, this.realpos.x + 480, -50, { name: "holein", text: 1 == ig.game.ballhit ? _STRINGS.Game.Holeinone : _STRINGS.Game.Holecomplete, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 35, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.darkbg.tween({ realpos: { x: this.realpos.x + 300, y: 100 } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endholetextin() }.bind(this) }).start(); this.klik = ig.game.spawnEntity(EntityButtonContinue2, this.darkbg.realpos.x + 70, this.darkbg.realpos.y - 10, { zIndex: this.zIndex + 100, realpos: { x: this.darkbg.realpos.x + 40, y: -10 } }); this.bonusbg1 = ig.game.spawnEntity(EntityBonusBg, this.darkbg.pos.x + 52, this.darkbg.realpos.y + 40, { zIndex: this.zIndex + 4, realpos: { x: 0, y: 0 } }); this.bonusbg2 = ig.game.spawnEntity(EntityBonusBg, this.darkbg.pos.x + 142, this.darkbg.realpos.y + 40, { zIndex: this.zIndex + 4, realpos: { x: 0, y: 0 } }); this.bonusbg3 = ig.game.spawnEntity(EntityBonusBg, this.darkbg.pos.x + 232, this.darkbg.realpos.y + 40, { zIndex: this.zIndex + 4, realpos: { x: 0, y: 0 } }) }, endholetextin: function() { var b = ig.game.valpar[ig.game.levelNow - 1] - ig.game.ballhit; 1 == ig.game.ballhit && (this.bonus1 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 60, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !0, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 1 }), this.bonus2 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 150, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !1, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 2 }), this.bonus3 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 240, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !1, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 3 }), this.starClick = 3); 1 != ig.game.ballhit && 0 < b && (this.bonus1 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 60, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !0, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 1 }), this.bonus2 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 150, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !1, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 2 }), this.starClick = 2); 1 != ig.game.ballhit && 0 >= b && (this.bonus1 = ig.game.spawnEntity(EntityBonus, this.darkbg.pos.x + 60, this.pos.y + 190, { zIndex: this.zIndex + 5, show: !0, nextshow: !1, realpos: { x: 0, y: 0 }, idx: 1 }), this.starClick = 1) }, bonusIn: function() {}, endBonusIn: function() {}, holetextout: function() { this.darkbg.tween({ realpos: { x: this.pos.x - ig.game.screen.x - 400, y: this.darkbg.realpos.y } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endholetext() }.bind(this) }).start() }, endholetext: function() { this.holein.kill(); this.klik.kill(); this.bonusbg1.kill(); this.bonusbg2.kill(); this.bonusbg3.kill(); this.bonus1 && this.bonus1.kill(); this.bonus2 && this.bonus2.kill(); this.bonus3 && this.bonus3.kill(); this.resultboard.tween({ pos: { x: this.pos.x + 140, y: this.resultboard.pos.y } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.close() }.bind(this) }).start() }, close: function() { this.darkbg.kill(); this.kill() } }); EntityBonus = ig.Entity.extend({ size: { x: 80, y: 80 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/bonusstar.png", 80, 80), gravityFactor: 0, angleDeg: -220, ding: !0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.currentAnim.angle = this.angleDeg * Math.PI / 180; this.scaling = 1E-4; this.setScale(this.scaling, this.scaling) }, draw: function() { this.parent() }, update: function() { this.parent(); this.show && (0 > this.angleDeg && (this.angleDeg += 10, this.currentAnim.angle = this.angleDeg * Math.PI / 180), 0.8 > this.scaling ? (this.scaling += 0.05, this.setScale(this.scaling, this.scaling)) : (this.nextshow = !0, this.ding && (ig.soundHandler.sfxPlayer.play("ding1"), this.ding = !1, this.respage = ig.game.getEntitiesByType(EntityPopupResult)[0], this.idx == this.respage.starClick && (this.respage.allowclick = !0)))) } }); EntityBonusBg = ig.Entity.extend({ size: { x: 80, y: 80 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/bonusstarbg.png", 80, 80), gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.scaling = 0.805; this.setScale(this.scaling, this.scaling) }, draw: function() { this.parent() }, update: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.result-board").requires("impact.entity").defines(function() { EntityResultBoard = ig.Entity.extend({ size: { x: 679, y: 460 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/resultboard.png", 679, 460), gravityFactor: 0, type: ig.Entity.TYPE.B, txtvalpar: "", txtvalstroke: "", sumpar: 0, sumstrokes: 0, valscore: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.btcontinue = ig.game.spawnEntity(EntityButtonContinue, this.pos.x + 300, this.pos.y + 300, { zIndex: this.zIndex + 5 }); this.land = ig.game.getEntitiesByType(EntityLandmarker)[0]; this.hole = ig.game.getEntitiesByType(EntityHole)[0]; this.water = ig.game.getEntitiesByType(EntityWater)[0]; this.btgo = ig.game.getEntitiesByType(EntityButtonGo)[0]; this.blackbar = ig.game.getEntitiesByType(EntityBlackBar)[0]; this.btleft = ig.game.getEntitiesByType(EntityButtonLeft)[0]; this.btright = ig.game.getEntitiesByType(EntityButtonRight)[0]; this.btcompas = ig.game.getEntitiesByType(EntityButtonCompas)[0]; this.bg1 = ig.game.getEntitiesByType(EntityBackground1)[0]; this.bg2 = ig.game.getEntitiesByType(EntityBackground2)[0]; this.bg3 = ig.game.getEntitiesByType(EntityBackground3)[0]; this.flag = ig.game.getEntitiesByType(EntityFlag)[0]; this.money = ig.game.getEntitiesByType(EntityMoney)[0]; this.btpause = ig.game.getEntitiesByType(EntityButtonPause)[0]; this.player = ig.game.getEntitiesByType(EntityPlayer)[0]; this.direction = ig.game.getEntitiesByType(EntityDirection)[0]; this.ball = ig.game.getEntitiesByType(EntityBall)[0]; ig.game.sortEntitiesDeferred(); this.txtvalpar = ig.game.valpar[0]; for (b = 1; 9 >= b; b++) this.txtvalpar = this.txtvalpar + "
" + ig.game.valpar[b]; ig.game.valstroke[ig.game.levelNow - 1] = ig.game.ballhit; this.txtvalstroke = ig.game.valstroke[0]; isNaN(ig.game.valstroke[0]) || (this.sumstrokes += ig.game.valstroke[0], this.sumpar += ig.game.valpar[0]); for (b = 1; 9 >= b; b++) this.txtvalstroke = this.txtvalstroke + "
" + ig.game.valstroke[b], isNaN(ig.game.valstroke[b]) || (this.sumstrokes += ig.game.valstroke[b], this.sumpar += ig.game.valpar[b]); this.valscore = this.sumpar - this.sumstrokes; this.scorelevel = ig.game.valpar[ig.game.levelNow - 1] - ig.game.valstroke[ig.game.levelNow - 1]; 0 < this.scorelevel && (b = ig.game.storage.get("money"), b += 10 * this.scorelevel, 1 == ig.game.ballhit && (b += 50), ig.game.gameMoney = b, ig.game.storage.set("money", b)); this.setuptext() }, setuptext: function() { this.thole = ig.game.spawnEntity(EntityText, this.pos.x - 40, this.pos.y + 40, { name: "thole", text: _STRINGS.Game.Hole, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tholeval = ig.game.spawnEntity(EntityText, this.pos.x - 20, this.pos.y + 90, { name: "tholeval", text: "1
2
3
4
5
6
7
8
9
10", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0, textSpace: 37 }); this.tpar = ig.game.spawnEntity(EntityText, this.pos.x + 80, this.pos.y + 40, { name: "tpar", text: _STRINGS.Game.Par, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tvalpar = ig.game.spawnEntity(EntityText, this.pos.x + 60, this.pos.y + 90, { name: "tpar", text: this.txtvalpar, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0, textSpace: 37 }); this.tstrokes = ig.game.spawnEntity(EntityText, this.pos.x + 150, this.pos.y + 40, { name: "tstrokes", text: _STRINGS.Game.Strokes, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tvalstrokes = ig.game.spawnEntity(EntityText, this.pos.x + 150, this.pos.y + 90, { name: "tvalstrokes", text: this.txtvalstroke, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0, textSpace: 37 }); this.tpar2 = ig.game.spawnEntity(EntityText, this.pos.x + 250, this.pos.y + 40, { name: "tpar2", text: _STRINGS.Game.Par + " :", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tpar2val = ig.game.spawnEntity(EntityText, this.pos.x + 350, this.pos.y + 40, { name: "tpar2val", text: this.sumpar.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "right", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tstrokes2 = ig.game.spawnEntity(EntityText, this.pos.x + 250, this.pos.y + 80, { name: "tstrokes2", text: _STRINGS.Game.Strokes + " :", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "left", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.tstrokes2val = ig.game.spawnEntity(EntityText, this.pos.x + 350, this.pos.y + 80, { name: "tstrokes2val", text: this.sumstrokes.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "right", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.score = ig.game.spawnEntity(EntityText, this.pos.x + 470, this.pos.y + 170, { name: "score", text: _STRINGS.Game.Overal, fontColor: "#5fb7ff", fontStyle: "FredokaOne", fontSize: 32, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0, textSpace: 35 }); this.scoreval = ig.game.spawnEntity(EntityText, this.pos.x + 470, this.pos.y + 280, { name: "scoreval", text: this.valscore.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 40, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0, textSpace: 35 }) }, draw: function() { this.parent() }, update: function() { this.parent(); this.thole.pos.x = this.pos.x + 50 - ig.game.screen.x; this.thole.pos.y = this.pos.y + 40 - ig.game.screen.y; this.tholeval.pos.x = this.pos.x + 70 - ig.game.screen.x; this.tholeval.pos.y = this.pos.y + 90 - ig.game.screen.y; this.tpar.pos.x = this.pos.x + 170 - ig.game.screen.x; this.tpar.pos.y = this.pos.y + 40 - ig.game.screen.y; this.tvalpar.pos.x = this.pos.x + 190 - ig.game.screen.x; this.tvalpar.pos.y = this.pos.y + 90 - ig.game.screen.y; this.tstrokes.pos.x = this.pos.x + 260 - ig.game.screen.x; this.tstrokes.pos.y = this.pos.y + 40 - ig.game.screen.y; this.tvalstrokes.pos.x = this.pos.x + 300 - ig.game.screen.x; this.tvalstrokes.pos.y = this.pos.y + 90 - ig.game.screen.y; this.tpar2.pos.x = this.pos.x + 460 - ig.game.screen.x; this.tpar2.pos.y = this.pos.y + 40 - ig.game.screen.y; this.tstrokes2.pos.x = this.pos.x + 460 - ig.game.screen.x; this.tstrokes2.pos.y = this.pos.y + 80 - ig.game.screen.y; this.tpar2val.pos.x = this.pos.x + 620 - ig.game.screen.x; this.tpar2val.pos.y = this.pos.y + 40 - ig.game.screen.y; this.tstrokes2val.pos.x = this.pos.x + 620 - ig.game.screen.x; this.tstrokes2val.pos.y = this.pos.y + 80 - ig.game.screen.y; this.score.pos.x = this.pos.x + 550 - ig.game.screen.x; this.score.pos.y = this.pos.y + 170 - ig.game.screen.y; this.scoreval.pos.x = this.pos.x + 550 - ig.game.screen.x; this.scoreval.pos.y = this.pos.y + 280 - ig.game.screen.y; this.btcontinue.pos = { x: this.pos.x + 465 + 3 * this.btcontinue.ofset, y: this.pos.y + 360 + this.btcontinue.ofset } }, hide: function() { this.tween({ pos: { x: ig.game.screen.x - 800, y: this.pos.y } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endhide() }.bind(this) }).start() }, endhide: function() { this.land.kill(); this.hole.kill(); this.water.kill(); this.btgo.kill(); this.blackbar.kill(); this.btright.kill(); this.btcompas.kill(); this.flag.kill(); this.money.kill(); this.btpause.kill(); this.bg1.endlevel(); this.player.kill(); this.direction.kill(); this.ball.kill(); this.bg3.kill(); this.bg2.kill(); this.bg1.kill(); this.thole.kill(); this.tholeval.kill(); this.tpar.kill(); this.tvalpar.kill(); this.tstrokes.kill(); this.tvalstrokes.kill(); this.tpar2.kill(); this.tstrokes2.kill(); this.score.kill(); this.btcontinue.kill(); this.kill(); ig.game.popupOpen = ""; setTimeout(function() { eval("ig.game.loadLevel(LevelHole" + ig.game.levelNow + ");") }, 5) } }) }); ig.baked = !0; ig.module("game.entities.gameplay.button-continue").requires("impact.entity").defines(function() { EntityButtonContinue = ig.Entity.extend({ size: { x: 187, y: 71 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/btcontinue.png", 187, 71), gravityFactor: 0, name: "btright", ofset: 0, klik: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.ballhit = 0, ig.game.box2dPaused = !1, 10 <= ig.game.levelNow ? (ig.game.levelNow = 1, ig.game.popupOpen = "", ig.game.loadLevel(LevelResult)) : this.klik || (this.klik = !0, ig.game.levelNow += 1, ig.game.getEntitiesByType(EntityResultBoard)[0].hide()))) }, draw: function() { this.parent() } }); EntityButtonContinue2 = ig.Entity.extend({ size: { x: 187, y: 71 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/btcontinue.png", 187, 71), gravityFactor: 0, name: "btright", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.scaling1 = 0.6; this.setScale(this.scaling1, this.scaling1) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.5 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.55 >= b && (this.small = !1, this.big = !0) } else this.big && 0.62 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 0.6 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.getEntitiesByType(EntityPopupResult)[0].holetextout())) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.gameplay.water").requires("impact.entity").defines(function() { EntityWater = ig.Entity.extend({ size: { x: 384, y: 154 }, type: ig.Entity.TYPE.B, tile1: new ig.Image("media/graphics/gameplay/water_top.png"), tile2: new ig.Image("media/graphics/gameplay/water_bottom.png"), gravityFactor: 0, name: "btgo", intoWater: !1, maxcoll: 5, maxrow: 2, init: function(b, c, d) { this.parent(b, c, d); this.minpos = this.pos.x; this.maxpos = this.pos.x + 40; this.move = !0; this.ball = ig.game.getEntitiesByType(EntityBall)[0]; if (5 == ig.game.levelNow || 6 == ig.game.levelNow || 10 == ig.game.levelNow) this.maxcoll = 15, this.size = { x: 64 * this.maxcoll, y: 154 } }, update: function() { this.parent(); if ("" == ig.game.popupOpen) { if (this.ball.pos.x > this.pos.x && this.ball.pos.x < this.pos.x + this.size.x && this.ball.pos.y > this.pos.y && this.ball.pos.y < this.pos.y + this.size.y && this.intoWater) { ig.soundHandler.sfxPlayer.play("watersplash"); this.ball.zIndex = this.zIndex - 2; ig.game.sortEntitiesDeferred(); var b = 0.2 * -this.ball.body.GetLinearVelocity().x, c = 0.2 * -this.ball.body.GetLinearVelocity().y; this.ball.body.ApplyImpulse({ x: b, y: c }, this.ball.body.GetPosition()); ig.game.intoWater = !0; this.message(); var d = this.ball; setTimeout(function() { d.reset(); var b = ig.game.getEntitiesByType(EntityWater)[0]; b.ball = ig.game.getEntitiesByType(EntityBall)[0]; ig.game.getEntitiesByType(EntityControl)[0].fnSetCamera(b.ball) }, 800); this.intoWater = !1 } this.move ? (this.pos.x += 0.2, this.pos.x > this.maxpos && (this.move = !1)) : (this.pos.x -= 0.2, this.pos.x < this.minpos && (this.move = !0)) } }, message: function() { this.msg = ig.game.spawnEntity(EntityText, 480, -50, { name: "msg", text: _STRINGS.Game.Water, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 22, textAlign: "center", zIndex: this.zIndex + 2, fontWeight: "bold", gravityFactor: 0 }); this.msg.tween({ pos: { y: 275 } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.hidemessage() }.bind(this) }).start() }, hidemessage: function() { this.msg.tween({ pos: { y: 560 } }, 0.7, { easing: ig.Tween.Easing.Quartic.EaseIn, onComplete: function() { this.endmessage() }.bind(this) }).start() }, endmessage: function() { this.msg.kill() }, draw: function() { this.parent(); for (var b = 0; b <= this.maxcoll; b++) { this.tile1.draw(this.pos.x + 64 * b - ig.game.screen.x, this.pos.y - ig.game.screen.y); for (var c = 0; c <= this.maxrow; c++) this.tile2.draw(this.pos.x + 64 * b - ig.game.screen.x, this.pos.y + 22 + 44 * c - ig.game.screen.y) } } }) }); ig.baked = !0; ig.module("game.entities.gameplay.ball-try").requires("impact.entity").defines(function() { EntityBallTry = ig.Entity.extend({ size: { x: 40, y: 40 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/ball/ballwhite.png", 40, 40), gravityFactor: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 0.1, [0, 1, 2, 3, 4, 5, 6, 7, 8]); this.currentAnim = this.anims.idle }, update: function() { this.parent() }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.hole1").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water", "game.entities.gameplay.ball-try").defines(function() { LevelHole1 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 981, y: 239, settings: { zIndex: 51 } }, { type: "EntityHole", x: 955, y: 284, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 126, y: 327, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 350, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 600, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole2").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole2 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 991, y: 302, settings: { zIndex: 51 } }, { type: "EntityHole", x: 964, y: 347, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 111, y: 194, settings: { zIndex: 30 } }, { type: "EntityBall", x: 130, y: 240, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 600, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole3").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole3 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 991, y: 302, settings: { zIndex: 52 } }, { type: "EntityHole", x: 964, y: 347, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 131, y: 194, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 240, settings: { zIndex: 54 } }, { type: "EntityWater", x: 210, y: 330, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole4").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole4 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 118, y: 224, settings: { zIndex: 51 } }, { type: "EntityHole", x: 90, y: 269, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 1065, y: 275, settings: { zIndex: 30 } }, { type: "EntityBall", x: 1100, y: 300, settings: { zIndex: 54 } }, { type: "EntityWater", x: 200, y: 340, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 755, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 10, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 100, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 220, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 820, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole5").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole5 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 993, y: 142, settings: { zIndex: 51 } }, { type: "EntityHole", x: 965, y: 187, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 126, y: 327, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 350, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 450, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole6").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole6 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 963, y: 344, settings: { zIndex: 51 } }, { type: "EntityHole", x: 935, y: 389, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 123, y: 327, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 350, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 450, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole7").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole7 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 963, y: 344, settings: { zIndex: 51 } }, { type: "EntityHole", x: 935, y: 389, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 126, y: 327, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 350, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 650, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.levels.hole8").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole8 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 1015, y: 210, settings: { zIndex: 51 } }, { type: "EntityHole", x: 990, y: 255, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 132, y: 601, settings: { zIndex: 30 } }, { type: "EntityBall", x: 150, y: 650, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 900, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [] } }); ig.baked = !0; ig.module("game.entities.gameplay.fly-island").requires("impact.entity").defines(function() { EntityFlyIsland = ig.Entity.extend({ size: { x: 339, y: 59 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/pandora.png", 339, 59), gravityFactor: 0, name: "flyisland", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, update: function() { this.parent() }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.hole9").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water", "game.entities.gameplay.fly-island").defines(function() { LevelHole9 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlyIsland", x: 200, y: 200, settings: { zIndex: 8 } }, { type: "EntityFlag", x: 358, y: 148, settings: { zIndex: 51 } }, { type: "EntityHole", x: 333, y: 193, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 132, y: 601, settings: { zIndex: 30 } }, { type: "EntityBall", x: 55, y: 650, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 900, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 963, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 217, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 307, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 427, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 1027, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [{ name: "collision", width: 48, height: 27, linkWithCollision: !1, visible: 1, tilesetName: "", repeat: !1, preRender: !1, distance: 1, tilesize: 20, foreground: !0, data: [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] }] } }); ig.baked = !0; ig.module("game.levels.hole10").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.fly-island", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water").defines(function() { LevelHole10 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlyIsland", x: 260, y: 380, settings: { zIndex: 8 } }, { type: "EntityFlyIsland", x: 520, y: 180, settings: { zIndex: 8 } }, { type: "EntityFlag", x: 380, y: 327, settings: { zIndex: 51 } }, { type: "EntityHole", x: 350, y: 372, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 974, y: 592, settings: { zIndex: 30 } }, { type: "EntityBall", x: 1E3, y: 630, settings: { zIndex: 54 } }, { type: "EntityWater", x: -100, y: 700, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 755, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 10, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 100, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonCompas", x: 220, y: 450, settings: { zIndex: 100, realpos: { x: 220, y: 450 } } }, { type: "EntityButtonGo", x: 820, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityMoney", x: 780, y: 10, settings: { zIndex: 100, realpos: { x: 780, y: 10 } } }, { type: "EntityButtonPause", x: 900, y: 5, settings: { zIndex: 100, realpos: { x: 900, y: 5 } } }], layer: [{ name: "collision", width: 48, height: 27, linkWithCollision: !1, visible: !0, tilesetName: "", repeat: !1, preRender: !1, distance: 1, tilesize: 20, foreground: !0, data: [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] }] } }); ig.baked = !0; ig.module("game.levels.hole11").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.fly-island").defines(function() { LevelHole11 = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityFlyIsland", x: 260, y: 380, settings: { zIndex: 2 } }, { type: "EntityFlyIsland", x: 520, y: 180, settings: { zIndex: 2 } }], layer: [{ name: "collision", width: 48, height: 27, linkWithCollision: !1, visible: 1, tilesetName: "", repeat: !1, preRender: !1, distance: 1, tilesize: 20, foreground: !0, data: [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ] }] } }); ig.baked = !0; ig.module("game.entities.result.result-board").requires("impact.entity").defines(function() { EntityResBoard = ig.Entity.extend({ size: { x: 593, y: 360 }, animSheet: new ig.AnimationSheet("media/graphics/gameplay/shopbg2.png", 593, 360), Offset: 0, type: ig.Entity.TYPE.B, gravityFactor: 0, realpos: { x: 305, y: 0 }, sumpar: 0, sumstrokes: 0, valscore: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; for (b = 0; 9 >= b; b++) isNaN(ig.game.valstroke[b]) || (this.sumstrokes += ig.game.valstroke[b], this.sumpar += ig.game.valpar[b]); this.valscore = this.sumpar - this.sumstrokes; this.best = ig.game.storage.get("bestScore"); this.valscore > this.best && (ig.game.storage.set("bestScore", this.valscore), this.best = this.valscore); this.title = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y - 50, { name: "title", text: _STRINGS.Results.Course, fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 50, textAlign: "center", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.par = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y + 150, { name: "title", text: _STRINGS.Results.Par + " : " + this.sumpar.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 40, textAlign: "center", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.score = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y + 200, { name: "title", text: _STRINGS.Results.Yourscore + " : " + this.valscore.toString(), fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 40, textAlign: "center", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.best = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y + 200, { name: "title", text: _STRINGS.Results.Bestscore + " : " + this.best.toString(), fontColor: "#6d70d3", fontStyle: "FredokaOne", fontSize: 40, textAlign: "center", zIndex: this.zIndex + 1, fontWeight: "bold", gravityFactor: 0 }); this.home = ig.game.spawnEntity(EntityResHome, 0, 0, { zIndex: this.zIndex + 1, ofset: 0 }); this.try = ig.game.spawnEntity(EntityResTry, 0, 0, { zIndex: this.zIndex + 1, ofset: 0 }); this.show() }, draw: function() { this.parent() }, update: function() { this.parent(); this.title.pos = { x: this.pos.x + 295, y: this.pos.y - 10 }; this.par.pos = { x: this.pos.x + 295, y: this.pos.y + 80 }; this.score.pos = { x: this.pos.x + 295, y: this.pos.y + 150 }; this.best.pos = { x: this.pos.x + 295, y: this.pos.y + 220 }; this.home.pos = { x: this.pos.x + 100 + 3 * this.home.ofset, y: this.pos.y + 260 + this.home.ofset }; this.try.pos = { x: this.pos.x + 310 + 3 * this.try.ofset, y: this.pos.y + 260 + this.try.ofset } }, show: function() { this.tween({ pos: { x: this.pos.x, y: 100 } }, 0.5, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endshow() }.bind(this) }).start() }, endshow: function() {}, hide: function() { this.tween({ pos: { x: this.pos.x, y: -300 } }, 0.5, { easing: ig.Tween.Easing.Sinusoidal.EaseIn, onComplete: function() { this.endhide() }.bind(this) }).start() }, endhide: function() { this.title.kill(); this.kill() } }) }); ig.baked = !0; ig.module("game.entities.result.button-home-try").requires("impact.entity").defines(function() { EntityResHome = ig.Entity.extend({ size: { x: 166, y: 60 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/bthomebig.png", 166, 60), small: !1, big: !1, gravityFactor: 0, name: "bthome", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.valstroke = { "0": "-", 1: "-", 2: "-", 3: "-", 4: "-", 5: "-", 6: "-", 7: "-", 8: "-", 9: "-" }, ig.game.levelNow = 1, ig.game.loadLevel(LevelMenu))) }, draw: function() { this.parent() } }); EntityResTry = ig.Entity.extend({ size: { x: 163, y: 60 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/bttryagain.png", 163, 60), small: !1, big: !1, gravityFactor: 0, name: "bthome", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 0.5; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 0.5, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button1"), ig.game.valstroke = { "0": "-", 1: "-", 2: "-", 3: "-", 4: "-", 5: "-", 6: "-", 7: "-", 8: "-", 9: "-" }, ig.game.levelNow = 1, ig.game.loadLevel(LevelHole1))) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.result").requires("impact.image", "game.entities.pointer", "game.entities.menu.menu-background", "game.entities.result.result-board", "game.entities.result.button-home-try").defines(function() { LevelResult = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityMenuBackground", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityResBoard", x: 170, y: -400, settings: { zIndex: 10 } }], layer: [] } }); ig.baked = !0; ig.module("game.entities.buttons.button-land-editor").requires("impact.entity", "plugins.data.vector", "game.entities.buttons.button").defines(function() { EntityButtonLandEditor = EntityButton.extend({ collides: ig.Entity.COLLIDES.NEVER, type: ig.Entity.TYPE.A, size: new Vector2(48, 48), fillColor: null, zIndex: 95E3, oriPos: { x: 0, y: 0 }, init: function(b, c, d) { this.parent(b, c, d); !ig.global.wm && !isNaN(d.zIndex) && (this.zIndex = d.zIndex); this.oriPos.x = this.pos.x; this.oriPos.y = this.pos.y }, clicked: function() { throw "no implementation on clicked()"; }, clicking: function() { throw "no implementation on clicking()"; }, released: function() { throw "no implementation on released()"; }, update: function() { this.parent(); this.pos.x = this.oriPos.x + ig.game.screen.x; this.pos.y = this.oriPos.y + ig.game.screen.y }, draw: function() { this.parent(); var b = ig.system.context; b.strokeStyle = "white"; b.fillStyle = "white"; b.fillRect(this.pos.x - ig.game.screen.x, this.pos.y - ig.game.screen.y, this.size.x, this.size.y) } }); EntityButtonLandReload = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() {}, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("play", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }); EntityButtonNextPoint = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() { this.main.addLayer() }, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("new line", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }); EntityIncrement = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() { ig.game.filename++; this.main.saveButton.modifyFile() }, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("level+", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y); b.textAlign = "center"; b.fillStyle = "black"; b.fillText(ig.game.filename, this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.5 * this.size.y - ig.game.screen.y) } }); EntityLog = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() { console.log(JSON.stringify(ig.game.landpoints) + ",") }, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("log", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y); b.fillText("Save yet? >>", this.pos.x - 0.2 * this.size.x - ig.game.screen.x, this.pos.y + 0.6 * this.size.y - ig.game.screen.y) } }); EntityMoveUp = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { this.main.moveUp() }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText("^", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y) } }); EntityMoveDown = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { this.main.moveDown() }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText("v", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y) } }); EntityMoveLeft = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { this.main.moveLeft() }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText("<", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y) } }); EntityMoveRight = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { this.main.moveRight() }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText(">", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y) } }); EntitySpeedUp = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { this.main.moveSpeed++ }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText("+", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y); b.fillText(this.main.moveSpeed, this.pos.x + 2 * this.size.x - ig.game.screen.x, this.pos.y + 1.6 * this.size.y - ig.game.screen.y) } }); EntitySpeedDown = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(10, 10), clicked: function() {}, clicking: function() { 0 < this.main.moveSpeed && this.main.moveSpeed-- }, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "center"; b.fillStyle = "hotpink"; b.fillText("-", this.pos.x + 0.5 * this.size.x - ig.game.screen.x, this.pos.y + 0.75 * this.size.y - ig.game.screen.y) } }); EntityButtonToggleLand = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() { ig.game.makeLand = !1 }, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("hideLand", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }); EntityButtonLoad = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() { ig.game.levelList.loadLand() }, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("load", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }); EntityButtonEdit = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), clicked: function() {}, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("edit land", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }); EntitySaveButton = EntityButtonLandEditor.extend({ gravityFactor: 0, size: new Vector2(30, 30), div_layer_name: "save", init: function(b, c, d) { this.download = ig.game.filename; this.parent(b, c, d); this.clickableLayer = new ClickableDivLayer(this) }, modifyFile: function() {}, clicked: function() {}, clicking: function() {}, released: function() {}, draw: function() { this.parent(); var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "right"; b.fillStyle = "hotpink"; b.fillText("download", this.pos.x + this.size.x - ig.game.screen.x, this.pos.y + this.size.y + 13 - ig.game.screen.y) } }) }); ig.baked = !0; ig.module("game.entities.land-editor-points").requires("impact.entity", "plugins.data.vector", "game.entities.buttons.button").defines(function() { EntityLandEditorPoints = EntityButton.extend({ collides: ig.Entity.COLLIDES.NEVER, type: ig.Entity.TYPE.A, size: new Vector2(10, 10), fillColor: null, zIndex: 85E3, arrIndex: null, pointIndex: null, layerIndex: null, gravityFactor: 0, hold: { x: 0, y: 0 }, holding: !1, currentPoint: null, init: function(b, c, d) { this.parent(b, c, d); this.pos.x -= 0.5 * this.size.x; this.pos.y -= 0.5 * this.size.y; this.pointer = ig.game.getEntitiesByType(EntityPointer)[0] }, erasePoint: function() { if (this.arrIndex == ig.game.landpoints[this.layerIndex].length - 2) { console.log(this.arrIndex, ig.game.landpoints[this.layerIndex].length - 2); var b = ig.game.landpoints[this.layerIndex][ig.game.landpoints[this.layerIndex].length - 2]; b.p1 && delete b.p1; b.p2 && delete b.p2; b.p3 && delete b.p3; ig.game.landpoints[this.layerIndex].pop(); ig.game.director.jumpTo(LevelLandEditor) } else 1 == ig.game.landpoints[this.layerIndex].length && 0 == this.arrIndex && (ig.game.landpoints[this.layerIndex].pop(), ig.game.director.jumpTo(LevelLandEditor)) }, clicked: function() { !1 == this.holding && (this.lastClickTime = ig.system.clock.delta(), this.layerIndex != this.main.layerIndex && this.main.setLayer(this.layerIndex), this.holding = this.main.showLine = !0, this.hold.x = this.pos.x - this.pointer.pos.x, this.hold.y = this.pos.y - this.pointer.pos.y, this.hold.oriX = this.pos.x, this.hold.oriY = this.pos.y, this.currentPoint = ig.game.landpoints[this.layerIndex][this.arrIndex]["p" + this.pointIndex], 3 == this.pointIndex && (this.currentPoint2 = ig.game.landpoints[this.layerIndex][this.arrIndex + 1 ].p0)) }, clicking: function() { !0 == this.holding && (this.pos.x == this.hold.oriX && this.pos.y == this.hold.oriY && 1 < ig.system.clock.delta() - this.lastClickTime && this.erasePoint(), this.pos.x = this.pointer.pos.x + this.hold.x, this.pos.y = this.pointer.pos.y + this.hold.y, this.currentPoint.x = this.pos.x + 0.5 * this.size.x, this.currentPoint.y = this.pos.y + 0.5 * this.size.y, this.currentPoint2 && (this.currentPoint2.x = this.pos.x + 0.5 * this.size.x, this.currentPoint2.y = this.pos.y + 0.5 * this.size.y)) }, released: function() { !0 == this.holding && (this.holding = !1, this.main.saveButton && this.main.saveButton.modifyFile(), ig.game.levelList["level" + ig.game.level] = ig.game.landpoints) }, draw: function() { var b = ig.system.context; b.fillStyle = this.layerIndex == this.main.layerIndex ? "hotpink" : "white"; this.arrIndex == ig.game.landpoints[this.layerIndex].length - 2 ? b.fillStyle = "cyan" : 1 == ig.game.landpoints[this.layerIndex].length && 0 == this.arrIndex && (b.fillStyle = "cyan"); b.fillRect(this.pos.x - ig.game.screen.x, this.pos.y - ig.game.screen.y, this.size.x, this.size.y) } }) }); ig.baked = !0; ig.module("game.entities.game-control").requires("impact.entity", "game.entities.landmarker").defines(function() { EntityGameControl = ig.Entity.extend({ size: { x: 32, y: 32 }, gravityFactor: 0, zIndex: 1, clicking: !1, collides: ig.Entity.COLLIDES.NEVER, type: ig.Entity.TYPE.A, startPos: { x: 0, y: 0, viewX: 0, viewY: 0 }, endPos: { x: 0, y: 0, viewX: 0, viewY: 0 }, t: 0, name: "game", init: function(b, c, d) { this.parent(b, c, d); ig.global.wm || (this.size.x = 2E3, this.size.y = 2E3, this.pointer = ig.game.spawnEntity(EntityPointer, 800, 800, { main: this }), this.land = ig.game.spawnEntity(EntityLandmarker, 800, 800, { main: this }), this.editBut = ig.game.spawnEntity(EntityButtonEdit, ig.system.width - 40, 10, { main: this }), this.logButton = ig.game.spawnEntity(EntityLog, ig.system.width - 40, 60, { main: this }), this.playButton = ig.game.spawnEntity(EntityButtonLandReload, ig.system.width - 40, 110, { main: this }), this.tweenF("t")) }, clicked: function() {}, clicking: function() { this.car.moveCar() }, released: function() {}, tweener: function(b, c, d, e, f) { var j = {}; j[b] = c; null == f && (f = 0); null == e && (e = "none"); this.tween("this" == b ? c : j, d, { delay: f, targ: b, seq: e, onComplete: function() { null != e && this.tweenF(e, b) }.bind(this), easing: ig.Tween.Easing.Quadratic.EaseOut }).start() }, tweenF: function(b) { switch (b) { case "t": this.t = 0, this.tweener("this", { t: 1 }, 10, "t") } }, quadraticBezier: function(b, c, d, e) { var f = {}; f.x = Math.pow(1 - b, 2) * c.x + 2 * (1 - b) * b * d.x + Math.pow(b, 2) * e.x; f.y = Math.pow(1 - b, 2) * c.y + 2 * (1 - b) * b * d.y + Math.pow(b, 2) * e.y; return f }, cubicBezierLength: function(b, c, d, e, f) { for (var j = 0, q = 0, n = 0, g = 0; 40 > g; g++) b = g / 39, b = this.cubicBezier(b, c, d, e, f), 0 < g && (q = b.x - q, n = b.y - n, j += Math.sqrt(q * q + n * n)), q = b.x, n = b.y; return j }, cubicBezier: function(b, c, d, e, f) { var j = {}; j.x = Math.pow(1 - b, 3) * c.x + 3 * Math.pow(1 - b, 2) * b * d.x + 3 * (1 - b) * Math.pow(b, 2) * e.x + Math.pow(b, 3) * f.x; j.y = Math.pow(1 - b, 3) * c.y + 3 * Math.pow(1 - b, 2) * b * d.y + 3 * (1 - b) * Math.pow(b, 2) * e.y + Math.pow(b, 3) * f.y; return j }, getAngle: function(b, c) { return Math.atan2(b.y - c.y, b.x - c.x) }, normal: function(b, c) { return { x: c.y - b.y, y: c.x - b.x } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.land-editor").requires("impact.entity", "game.entities.landmarker", "game.entities.buttons.button-land-editor", "game.entities.land-editor-points", "game.entities.game-control").defines(function() { EntityLandEditor = ig.Entity.extend({ size: { x: 32, y: 32 }, gravityFactor: 0, collides: ig.Entity.COLLIDES.NEVER, type: ig.Entity.TYPE.A, zIndex: 2E3, clicking: !1, startPos: { x: 0, y: 0, viewX: 0, viewY: 0 }, endPos: { x: 0, y: 0, viewX: 0, viewY: 0 }, t: 0, moveSpeed: 20, instructions: "To start from empty level, change ig.game.level to a number that's never been use before and click load;To save changes made, click on log, copy the console log and paste at curve-level.js;To load specific level, change ig.game.level to your level number, and press load;Press space and drag to move screen arond;Click and hold on cyan point to delete;pink line is the active line to add new point on".split(";"), layerIndex: 0, arrIndex: 0, pointIndex: 0, hold: { x: 0, y: 0 }, holding: !1, eraseMode: !0, currentPoint: null, name: "game", showLine: !1, init: function(b, c, d) { ig.game.makeLand = !1; this.parent(b, c, d); ig.global.wm || (this.size.x = 2E3, this.size.y = 2E3, ig.game.screen.x = ig.game.screenRec.x, ig.game.screen.y = ig.game.screenRec.y, this.pointer = ig.game.spawnEntity(EntityPointer, 800, 800, { main: this }), this.land = ig.game.spawnEntity(EntityLandmarker, 800, 800, { main: this }), this.loadButton = ig.game.spawnEntity(EntityButtonLoad, ig.system.width - 40, 160, { main: this }), this.stageUp = ig.game.spawnEntity(EntityMoveUp, 599, 358, { main: this }), this.stageDown = ig.game.spawnEntity(EntityMoveDown, 600, 401, { main: this }), this.stageLeft = ig.game.spawnEntity(EntityMoveLeft, 576, 380, { main: this }), this.stageRight = ig.game.spawnEntity(EntityMoveRight, 623, 380, { main: this }), this.tweenF("t"), !1 == ig.game.makeLand && (this.showLine = !0), this.getLastPoint(), this.createControlPoints()) }, moveUp: function() { ig.game.screen.y -= this.moveSpeed; ig.game.screenRec.y = ig.game.screen.y }, moveDown: function() { ig.game.screen.y += this.moveSpeed; ig.game.screenRec.y = ig.game.screen.y }, moveLeft: function() { ig.game.screen.x -= this.moveSpeed; ig.game.screenRec.x = ig.game.screen.x }, moveRight: function() { ig.game.screen.x += this.moveSpeed; ig.game.screenRec.x = ig.game.screen.x }, createControlPoints: function() { for (var b = 0; b < ig.game.landpoints.length; b++) for (var c = 0; c < ig.game.landpoints[b].length; c++) { var d = ig.game.landpoints[b][c]; for (property in d) { var e = property.replace(/[^0-9]/g, ""); if (!(0 != c && 0 == e)) { var f = d[property]; ig.game.spawnEntity(EntityLandEditorPoints, f.x, f.y, { main: this, layerIndex: b, arrIndex: c, pointIndex: e }) } } } }, setLayer: function(b) { this.layerIndex = b; this.getLayerLastPoint(this.layerIndex) }, getLastPoint: function() { 0 == ig.game.landpoints.length ? (this.layerIndex = 0, ig.game.landpoints[this.layerIndex] = []) : this.layerIndex = ig.game.landpoints.length - 1; this.getLayerLastPoint(this.layerIndex) }, getLayerLastPoint: function(b) { this.layerIndex = b; b = ig.game.landpoints[this.layerIndex]; 0 == b.length ? this.pointIndex = this.arrIndex = 0 : (this.arrIndex = b.length - 1, b[this.arrIndex - 1] && 4 != Object.keys(b[this.arrIndex - 1]).length && this.arrIndex--, this.pointIndex = Object.keys(b[this.arrIndex]).length) }, update: function() { this.parent() }, addLayer: function() { this.layerIndex++; this.arrIndex = this.pointIndex = 0 }, clicking: function() { if (!0 == this.holding) { var b = ig.game.io.getClickPos(), c = this.hold.y - b.y; ig.game.screen.x = this.hold.screenX + (this.hold.x - b.x); ig.game.screen.y = this.hold.screenY + c; ig.game.screenRec.x = ig.game.screen.x; ig.game.screenRec.y = ig.game.screen.y } }, clicked: function() { if (ig.input.state("move")) { if (!1 == this.holding) { this.holding = !0; var b = ig.game.io.getClickPos(); console.log(b); this.hold.screenX = ig.game.screen.x; this.hold.screenY = ig.game.screen.y; this.hold.x = b.x; this.hold.y = b.y } } else { console.log(b); this.showLine = !0; var c, b = { x: this.pointer.pos.x + 0.5 * this.pointer.size.x, y: this.pointer.pos.y + 0.5 * this.pointer.size.y }; switch (this.pointIndex) { case 0: void 0 == ig.game.landpoints[this.layerIndex] && (ig.game.landpoints[this.layerIndex] = []); ig.game.landpoints[this.layerIndex].push({ p0: { x: b.x, y: b.y } }); c = 0; break; case 1: ig.game.landpoints[this.layerIndex][this.arrIndex].p3 = { x: b.x, y: b.y }; c = 3; ig.game.landpoints[this.layerIndex].push({ p0: { x: b.x, y: b.y } }); break; case 2: ig.game.landpoints[this.layerIndex][this.arrIndex].p1 = { x: b.x, y: b.y }; c = 1; break; case 3: ig.game.landpoints[this.layerIndex][this.arrIndex].p2 = { x: b.x, y: b.y }, c = 2 } this.currentPoint = ig.game.spawnEntity(EntityLandEditorPoints, b.x, b.y, { main: this, layerIndex: this.layerIndex, arrIndex: this.arrIndex, pointIndex: c }); 3 == this.pointIndex ? (this.pointIndex = (this.pointIndex + 2) % 4, this.arrIndex = ig.game.landpoints[this.layerIndex].length - 1) : this.pointIndex = (this.pointIndex + 1) % 4; this.currentPoint.clicked() } }, released: function() { !0 == this.holding && (this.holding = !1) }, tweener: function(b, c, d, e, f) { var j = {}; j[b] = c; null == f && (f = 0); null == e && (e = "none"); this.tween("this" == b ? c : j, d, { delay: f, targ: b, seq: e, onComplete: function() { null != e && this.tweenF(e, b) }.bind(this), easing: ig.Tween.Easing.Quadratic.EaseOut }).start() }, tweenF: function(b) { switch (b) { case "t": this.t = 0, this.tweener("this", { t: 1 }, 10, "t") } }, quadraticBezier: function(b, c, d, e) { var f = {}; f.x = Math.pow(1 - b, 2) * c.x + 2 * (1 - b) * b * d.x + Math.pow(b, 2) * e.x; f.y = Math.pow(1 - b, 2) * c.y + 2 * (1 - b) * b * d.y + Math.pow(b, 2) * e.y; return f }, cubicBezierLength: function(b, c, d, e, f) { for (var j = 0, q = 0, n = 0, g = 0; 40 > g; g++) b = g / 39, b = this.cubicBezier(b, c, d, e, f), 0 < g && (q = b.x - q, n = b.y - n, j += Math.sqrt(q * q + n * n)), q = b.x, n = b.y; return j }, cubicBezier: function(b, c, d, e, f) { var j = {}; j.x = Math.pow(1 - b, 3) * c.x + 3 * Math.pow(1 - b, 2) * b * d.x + 3 * (1 - b) * Math.pow(b, 2) * e.x + Math.pow(b, 3) * f.x; j.y = Math.pow(1 - b, 3) * c.y + 3 * Math.pow(1 - b, 2) * b * d.y + 3 * (1 - b) * Math.pow(b, 2) * e.y + Math.pow(b, 3) * f.y; return j }, getAngle: function(b, c) { return Math.atan2(b.y - c.y, b.x - c.x) }, normal: function(b, c) { return { x: c.y - b.y, y: c.x - b.x } }, draw: function() { this.parent(); if (!ig.global.wm) { var b = ig.system.context; b.font = "bold 10px Arial"; b.textAlign = "left"; b.fillStyle = "hotpink"; for (var c = 0; c < this.instructions.length; c++) b.fillText(this.instructions[c], 50, 30 + 30 * c); b.lineWidth = 1; if (!0 == this.showLine) { for (var d = 0; d < ig.game.landpoints.length; d++) { b.beginPath(); for (var e = 0; e < ig.game.landpoints[d].length; e++) c = ig.game.landpoints[d][e], 0 == e && b.moveTo(c.p0.x - ig.game.screen.x, c.p0.y - ig.game.screen.y), c.p2 ? b.bezierCurveTo(c.p1.x - ig.game.screen.x, c.p1.y - ig.game.screen.y, c.p2.x - ig.game.screen.x, c.p2.y - ig.game.screen.y, c.p3.x - ig.game.screen.x, c.p3.y - ig.game.screen.y) : c.p1 ? b.quadraticCurveTo(c.p1.x - ig.game.screen.x, c.p1.y - ig.game.screen.y, c.p3.x - ig.game.screen.x, c.p3.y - ig.game.screen.y) : c.p3 && b.lineTo(c.p3.x - ig.game.screen.x, c.p3.y - ig.game.screen.y); b.strokeStyle = this.layerIndex == d ? "cyan" : "white"; b.stroke() } for (d = 0; d < ig.game.landpoints.length; d++) if (b.beginPath(), this.layerIndex == d) { for (e = 0; e < ig.game.landpoints[d].length; e++) c = ig.game.landpoints[d][e], 0 == e && b.moveTo(c.p0.x - ig.game.screen.x, c.p0.y - ig.game.screen.y), c.p1 && b.lineTo(c.p1.x - ig.game.screen.x, c.p1.y - ig.game.screen.y), c.p2 && b.lineTo(c.p2.x - ig.game.screen.x, c.p2.y - ig.game.screen.y), c.p3 && b.lineTo(c.p3.x - ig.game.screen.x, c.p3.y - ig.game.screen.y); b.strokeStyle = this.layerIndex == d ? "hotpink" : "white"; b.stroke() } } } } }) }); ig.baked = !0; ig.module("game.entities.ori-shape").requires("plugins.box2d.entity").defines(function() { EntityOriShape = ig.Box2DEntity.extend({ gravityFactor: 0, type: ig.Entity.TYPE.B, checkAgainst: ig.Entity.TYPE.B, zIndex: 1E3, sc: 2, size: { x: 20, y: 20 }, gamePaused: !1, scX: 1, scY: 1, box2dType: 1, dynamicType: 0, density: 0.8, friction: 0.3, restitution: 0.1, mass: 0.8, INERTIA: 0, ANGULAR_DAMPING: 0.715, im: new ig.Image("media/graphics/sprites/door.png"), name: "box", broken: !1, jointSet: !1, sleepVel: 0.14, vertices: [{ x: -5, y: -10 }, { x: 5, y: -10 }, { x: 5, y: 10 }, { x: -5, y: 10 }], name: "door", alp: 1, firstShape: !0, slicePoints: [], splitPoints: [], sleepAtStart: !1, ctxIndex: 0, canvasPerEntity: !0, init: function(b, c, d) { this.parent(b, c, d); if (!ig.global.wm) { this.main = ig.game.getEntitiesByType(EntityGameControl)[0]; this.srcMaxX = Math.floor(1E3 / (this.im.width + 2)); this.srcMaxY = Math.floor(1E3 / (this.im.height + 2)); b = !1; if (!1 == this.canvasPerEntity) for (c = 0; c < ig.game.ctxVault.length; c++) ig.game.ctxVault[c].name == this.name && (this.ctxIndex = c, b = !0); !1 == b && (0 < ig.game.freeCtxVault.length ? this.reuseCanvas() : this.createCanvas()) } }, reuseCanvas: function() { this.ctxIndex = ig.game.freeCtxVault[ig.game.freeCtxVault.length - 1]; ig.game.freeCtxVault.pop(); var b = ig.game.ctxVault[this.ctxIndex]; b.name = this.name; for (var b = [], c = 0; c < this.srcMaxX * this.srcMaxY; c++) b[c] = "empty" }, createCanvas: function() { var b = document.createElement("canvas"), c = b.getContext("2d"), d = []; b.width = 1E3; b.height = 1E3; for (var e = 0; e < this.srcMaxX * this.srcMaxY; e++) d[e] = "empty"; ig.game.ctxVault.push({ ele: b, ctx: c, slot: d, name: this.name }); this.ctxIndex = ig.game.ctxVault.length - 1 }, beginContact: function(b) { b && !0 != this.broken && "explosion" == b.name && (this.broken = !0) }, tweenF: function() {}, update: function() { ig.global.wm || (this.parent(), 0 < this.slicePoints.length && (this.slicePoints.length = 0)) }, ready: function() { this.pointer = ig.game.getEntitiesByType(EntityPointer)[0] }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.land-editor").requires("impact.image", "game.entities.gameplay.background", "game.entities.land-editor", "game.entities.ori-shape").defines(function() { LevelLandEditor = { entities: [{ type: "EntityLandEditor", x: 0, y: 0 }, { type: "EntityFlag", x: 963, y: 344, settings: { zIndex: 6 } }, { type: "EntityOriShape", x: 100, y: -76 }], layer: [{ name: "collision", width: 100, height: 100, linkWithCollision: !1, visible: 1, tilesetName: "", repeat: !1, preRender: !1, distance: 1, tilesize: 20, foreground: !1, data: [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ] }] } }); ig.baked = !0; ig.module("game.entities.tutorial.tcontrol").requires("impact.entity").defines(function() { EntityTcontrol = ig.Entity.extend({ size: { x: 10, y: 10 }, type: ig.Entity.TYPE.B, gravityFactor: 0, show: [], idxNow: 1, direction: 2, curpos: 0, clickcount: 0, setposstatus: !1, init: function(b, c, d) { this.parent(b, c, d); this.title = ig.game.spawnEntity(EntityText, 460, 150, { name: "basic", text: _STRINGS.Tutorial[0], fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 36, textAlign: "center", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.handpos = { "0": { x: 15, y: 700 }, 1: { x: 15, y: 470 }, 2: { x: 105, y: 470 }, 3: { x: 105, y: 670 }, 4: { x: 420, y: 210 }, 5: { x: 870, y: 460 }, 6: { x: 870, y: 700 }, 7: { x: 870, y: 700 }, 8: { x: 870, y: 700 }, 9: { x: 870, y: 700 }, 10: { x: 870, y: 700 } }; this.handanim = ig.game.getEntitiesByType(EntityHandanim)[0]; this.move() }, update: function() { this.parent(); 4 == this.curpos || 5 == this.curpos ? this.setposstatus && (this.handanim.rpos = !0, this.handanim.realpos.x = this.handpos[this.curpos].x, this.handanim.realpos.y = this.handpos[this.curpos].y) : (this.handanim.rpos = !1, this.handanim.pos.x = this.handpos[this.curpos].x + ig.game.screen.x, this.setposstatus && (this.handanim.pos.y = this.handpos[this.curpos].y + ig.game.screen.y)) }, draw: function() { this.parent() }, move: function() { this.setposstatus = this.handanim.rpos = !1; this.handanim.showArrow = !1; this.handanim.tween({ pos: { x: this.handpos[this.curpos].x + ig.game.screen.x, y: this.handpos[this.curpos].y + ig.game.screen.y } }, 0.5, { easing: ig.Tween.Easing.Quartic.EaseOut, onComplete: function() { this.endmove() }.bind(this) }).start() }, endmove: function() { if (4 == this.curpos || 5 == this.curpos) this.setposstatus = !0; 4 == this.curpos && (this.handanim.showArrow = !0) } }) }); ig.baked = !0; ig.module("game.entities.tutorial.button-play-home").requires("impact.entity").defines(function() { EntityTPlay = ig.Entity.extend({ size: { x: 115, y: 44 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/btplay.png", 115, 44), small: !1, big: !1, gravityFactor: 0, name: "btplay", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), ig.game.ballhit = 0, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.popupOpen = "", ig.game.levelNow = 1, eval("ig.game.loadLevel(LevelHole" + ig.game.levelNow + ");"))) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.tutorial").requires("impact.image", "game.entities.pointer", "game.entities.menu.menu-background", "game.entities.tutorial.tcontrol", "game.entities.tutorial.button-play-home").defines(function() { LevelTutorial = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityMenuBackground", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityTButtonPrev", x: 20, y: 200, settings: { zIndex: 10 } }, { type: "EntityTButtonNext", x: 890, y: 200, settings: { zIndex: 10 } }, { type: "EntityTPlay", x: 480, y: 480, settings: { zIndex: 10 } }, { type: "EntityTHome", x: 350, y: 480, settings: { zIndex: 10 } }, { type: "EntityTcontrol", x: 0, y: 0, settings: { zIndex: 10 } }], layer: [] } }); ig.baked = !0; ig.module("game.entities.tutorial.handanim").requires("impact.entity").defines(function() { EntityHandanim = ig.Entity.extend({ size: { x: 80, y: 123 }, animSheet: new ig.AnimationSheet("media/graphics/menu/handtouch.png", 80, 123), gravityFactor: 0, dragarrow: new ig.Image("media/graphics/gameplay/dragarrow.png"), dragarrow2: new ig.Image("media/graphics/gameplay/dragarrow2.png"), showArrow: !1, realpos: { x: 0, y: 0 }, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 0.2, [0, 1, 2]); this.currentAnim = this.anims.idle; this.arrowpos = this.pos.x - 60; this.arrowpos2 = 2E3 }, update: function() { this.parent(); this.rpos && (this.pos.x = this.realpos.x + ig.game.screen.x, this.pos.y = this.realpos.y + ig.game.screen.y, this.showArrow && (this.arrowpos -= 1, this.arrowpos <= this.pos.x - ig.game.screen.x - 100 && (this.arrowpos = this.pos.x - ig.game.screen.x - 60), this.arrowpos2 += 1, this.arrowpos2 >= this.pos.x - ig.game.screen.x + 115 && (this.arrowpos2 = this.pos.x - ig.game.screen.x + 75))) }, draw: function() { this.parent(); this.showArrow && (this.dragarrow.draw(this.arrowpos, this.pos.y), this.dragarrow2.draw(this.arrowpos2, this.pos.y)) } }) }); ig.baked = !0; ig.module("game.entities.tutorial.bgtext").requires("impact.entity").defines(function() { EntityBgtext = ig.Entity.extend({ size: { x: 417, y: 100 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/menu/bgtext.png", 417, 100), gravityFactor: 0, runTextStatus: !0, onrun: !1, nextText: !1, init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle; this.text = _STRINGS.Tutorial; this.textIndex = 1; this.handanim = ig.game.getEntitiesByType(EntityHandanim)[0]; this.tutorialtext = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "tutorialtext", text: "", fontColor: "#FFFFFF", fontStyle: "FredokaOne", fontSize: 18, textAlign: "left", zIndex: this.zIndex + 1, gravityFactor: 0 }); this.btcontinue = ig.game.spawnEntity(EntityTContinue, this.realpos.x, this.realpos.y, { zIndex: this.zIndex + 1, realpos: this.realpos }); this.btconunhidepos = { x: this.realpos.x, y: this.realpos.y }; this.btconhidepos = { x: this.realpos.x, y: this.realpos.y + 500 }; this.btplay = ig.game.spawnEntity(EntityTplay, this.realpos.x, this.realpos.y, { zIndex: this.zIndex + 1, realpos: this.realpos }); this.btplayunhidepos = { x: this.realpos.x, y: this.realpos.y }; this.btplayhidepos = { x: this.realpos.x, y: this.realpos.y + 500 }; this.bthome = ig.game.spawnEntity(EntityThome, this.realpos.x, this.realpos.y, { zIndex: this.zIndex + 1, realpos: this.realpos }); this.bthomeunhidepos = { x: this.realpos.x, y: this.realpos.y }; this.bthomehidepos = { x: this.realpos.x, y: this.realpos.y + 500 }; this.btplay.realpos = this.btplayhidepos; this.bthome.realpos = this.bthomehidepos; this.btleft = ig.game.getEntitiesByType(EntityButtonLeft)[0]; this.btright = ig.game.getEntitiesByType(EntityButtonRight)[0]; this.btgo = ig.game.getEntitiesByType(EntityButtonGo)[0]; this.ball = ig.game.getEntitiesByType(EntityBall)[0]; this.bt5Status = this.bt4Status = this.bt3Status = this.bt2Status = this.bt1Status = !0 }, ready: function() { this.sdrag = ig.game.getEntitiesByType(EntityScreenDrag)[0] }, clicked: function() { 11 == ig.game.levelNow && "" == ig.game.clickContinue && this.btcontinueClick() }, release: function() {}, btcontinueClick: function() { var b = ig.game.getEntitiesByType(EntityTContinue)[0]; 540 > b.realpos.y && b.clicked() }, conhide: function() { this.btleft.tleft && this.bt1Status && (this.nextText = !0, this.btcontinue.small = !0, this.bt1Status = !1); this.btright.tright && this.bt2Status && (this.nextText = !0, this.btcontinue.small = !0, this.bt2Status = !1); this.btgo.tgo && this.bt3Status && (this.nextText = !0, this.btcontinue.small = !0, this.bt3Status = !1); this.btgo.tgo2 && this.bt4Status && (this.nextText = !0, this.btcontinue.small = !0, this.bt4Status = !1); this.ball.tball && this.bt5Status && (this.nextText = !0, this.btcontinue.small = !0, this.bt5Status = !1); if (2 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "btgo", ig.game.popupTraining3 = "dragfalse", ig.game.clickContinue = ""; else if (3 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "btgo", ig.game.popupTraining3 = "dragfalse", ig.game.clickContinue = ""; else if (5 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.clickContinue = "disable", this.sdrag.dragFlag && 50 < this.sdrag.dist && (this.nextText = !0, this.btcontinue.small = !0), ig.game.popupTraining = "", ig.game.popupTraining2 = "btgo", ig.game.popupTraining3 = ""; else if (6 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.popupTraining3 = "", ig.game.clickContinue = ""; else if (7 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.clickContinue = ""; else if (8 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.clickContinue = ""; else if (9 == this.textIndex && !this.nextText) this.btcontinue.realpos = this.btconhidepos, this.btplay.realpos = this.btplayunhidepos, this.bthome.realpos = this.bthomehidepos, ig.game.popupTraining = "", ig.game.popupTraining2 = "btgo", ig.game.clickContinue = ""; else { var b = this.btconunhidepos; setTimeout(function() { try { ig.game.getEntitiesByType(EntityTContinue)[0].realpos = b } catch (c) {} }, 100); this.btplay.realpos = this.btplayhidepos; this.bthome.realpos = this.bthomehidepos; ig.game.popupTraining = "training"; ig.game.clickContinue = ""; 5 == this.textIndex && (this.handanim.showArrow = !1) } }, setText: function(b) { var c = 0; this.onrun = !0; this.tutorialtext = ""; for (var d = 0; d <= this.text[b].length - 1; d++) setTimeout(function() { c += 1; try { ig.game.popupTraining3 = "training"; var d = ig.game.getEntitiesByType(EntityBgtext)[0].text[b]; ig.game.getEntityByName("tutorialtext").text = d.substr(0, c) } catch (f) {} }, 20 * d); setTimeout(function() { try { ig.game.getEntitiesByType(EntityBgtext)[0].onrun = !1, ig.game.popupTraining3 = "" } catch (b) {} }, 20 * (d + 1)) }, update: function() { this.parent(); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y }; this.tutorialtext.pos = { x: this.realpos.x + 10, y: this.realpos.y + 25 }; this.conhide(); this.runTextStatus && (this.setText(this.textIndex), this.runTextStatus = !1) }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.tutorial.button-continue").requires("impact.entity").defines(function() { EntityTContinue = ig.Entity.extend({ size: { x: 85, y: 25 }, type: ig.Entity.TYPE.B, small: !1, big: !1, gravityFactor: 0, name: "btcontinue", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.continue = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "continue", text: _STRINGS.Game.Continue, fontColor: "#3672f8", fontStyle: "FredokaOne", fontSize: 18, textAlign: "left", zIndex: this.zIndex + 1, gravityFactor: 0, fontWeight: "italic" }) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else if (this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b)) { this.big = this.small = !1; ig.soundHandler.sfxPlayer.play("button2"); var b = ig.game.getEntitiesByType(EntityBgtext)[0], c = ig.game.getEntitiesByType(EntityTcontrol)[0]; if (b.onrun) return; 8 == c.curpos ? ig.game.loadLevel(LevelMenu) : (c.curpos += 1, b.textIndex += 1, b.runTextStatus = !0, b.nextText = !1, c.move()) } this.pos = { x: this.realpos.x + ig.game.screen.x + 330, y: this.realpos.y + 70 }; this.continue.pos = { x: this.realpos.x + 330, y: this.realpos.y + 88 } }, draw: function() { this.parent() } }); EntityTplay = ig.Entity.extend({ size: { x: 45, y: 25 }, type: ig.Entity.TYPE.B, small: !1, big: !1, gravityFactor: 0, name: "btcontinue", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.continue = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "continue", text: _STRINGS.Game.Play, fontColor: "#3672f8", fontStyle: "FredokaOne", fontSize: 18, textAlign: "left", zIndex: this.zIndex + 1, gravityFactor: 0, fontWeight: "italic" }) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), ig.game.ballhit = 0, ig.game.box2dPaused = !1, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.popupOpen = "", ig.game.levelNow = 1, ig.game.loadLevel(LevelHole1))); this.pos = { x: this.realpos.x + ig.game.screen.x + 360, y: this.realpos.y + 70 }; this.continue.pos = { x: this.realpos.x + 360, y: this.realpos.y + 88 } }, draw: function() { this.parent() } }); EntityThome = ig.Entity.extend({ size: { x: 45, y: 25 }, type: ig.Entity.TYPE.B, small: !1, big: !1, gravityFactor: 0, name: "btcontinue", ofset: 0, init: function(b, c, d) { this.parent(b, c, d); this.continue = ig.game.spawnEntity(EntityText, this.pos.x, this.pos.y, { name: "continue", text: "Home", fontColor: "#3672f8", fontStyle: "FredokaOne", fontSize: 18, textAlign: "left", zIndex: this.zIndex + 1, gravityFactor: 0, fontWeight: "italic" }) }, clicked: function() { this.small = !0 }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.ofset += 1; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.ofset -= 1, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, ig.soundHandler.sfxPlayer.play("button2"), ig.game.ballhit = 0, ig.game.box2dPaused = !1, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.levelNow = 1, ig.game.loadLevel(LevelMenu))); this.pos = { x: this.realpos.x + ig.game.screen.x + 300, y: this.realpos.y + 70 }; this.continue.pos = { x: this.realpos.x + 300, y: this.realpos.y + 88 } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.entities.tutorial.button-exit").requires("impact.entity").defines(function() { EntityButtonExit = ig.Entity.extend({ size: { x: 44, y: 44 }, type: ig.Entity.TYPE.B, animSheet: new ig.AnimationSheet("media/graphics/gameplay/btexitdemo.png", 44, 44), small: !1, big: !1, gravityFactor: 0, name: "btplay", init: function(b, c, d) { this.parent(b, c, d); this.addAnim("idle", 1, [0]); this.currentAnim = this.anims.idle }, clicked: function() { "" == ig.game.popupOpen && (this.small = !0) }, released: function() {}, update: function() { this.parent(); if (this.small && 0.8 < this.scale.x) { var b = this.scale.x, b = b - 0.02; this.setScale(b, b); 0.95 >= b && (this.small = !1, this.big = !0) } else this.big && 1.2 > this.scale.x && (b = this.scale.x, b += 0.02, this.setScale(b, b), 1 <= b && (this.big = this.small = !1, b = ig.game.getEntitiesByType(EntityBgtext)[0], b.textIndex = 10, b.runTextStatus = !0, b.nextText = !1, ig.game.ballhit = 0, ig.game.box2dPaused = !1, ig.game.popupTraining = "", ig.game.popupTraining2 = "", ig.game.levelNow = 1, ig.soundHandler.sfxPlayer.play("button2"), ig.game.loadLevel(LevelMenu))); this.pos = { x: this.realpos.x + ig.game.screen.x, y: this.realpos.y + ig.game.screen.y } }, draw: function() { this.parent() } }) }); ig.baked = !0; ig.module("game.levels.demo").requires("impact.image", "game.entities.pointer", "game.entities.gameplay.background", "game.entities.gameplay.player", "game.entities.gameplay.ball", "game.entities.gameplay.black-bar", "game.entities.gameplay.button-left", "game.entities.gameplay.button-right", "game.entities.gameplay.button-compas", "game.entities.gameplay.button-go", "game.entities.gameplay.ball-count", "game.entities.gameplay.direction", "game.entities.gameplay.screen-drag", "game.entities.gameplay.control", "game.entities.gameplay.flag", "game.entities.gameplay.money", "game.entities.gameplay.button-pause", "game.entities.gameplay.popup-pause", "game.entities.gameplay.button-resume", "game.entities.gameplay.button-home", "game.entities.menu.button-sfx", "game.entities.menu.button-bgm", "game.entities.gameplay.popup-result", "game.entities.gameplay.result-board", "game.entities.gameplay.button-continue", "game.entities.gameplay.water", "game.entities.gameplay.ball-try", "game.entities.tutorial.handanim", "game.entities.tutorial.tcontrol", "game.entities.tutorial.bgtext", "game.entities.tutorial.button-continue", "game.entities.tutorial.button-exit").defines(function() { LevelDemo = { entities: [{ type: "EntityPointer", x: 0, y: 0, settings: { zIndex: 1 } }, { type: "EntityBackground1", x: 0, y: 0, settings: { zIndex: 2 } }, { type: "EntityBackground2", x: 0, y: 0, settings: { zIndex: 3 } }, { type: "EntityBackground3", x: 0, y: -50, settings: { zIndex: 4 } }, { type: "EntityFlag", x: 981, y: 239, settings: { zIndex: 51 } }, { type: "EntityHole", x: 955, y: 284, settings: { zIndex: 55 } }, { type: "EntityPlayer", x: 123, y: 328, settings: { zIndex: 30 } }, { type: "EntityBall", x: 139, y: 382, settings: { zIndex: 54 } }, { type: "EntityWater", x: 250, y: 600, settings: { zIndex: 49 } }, { type: "EntityDirection", x: -100, y: 0, settings: { zIndex: 46 } }, { type: "EntityScreenDrag", x: 0, y: 0, settings: { zIndex: 90 } }, { type: "EntityControl", x: 0, y: 0, settings: { zIndex: 95 } }, { type: "EntityBlackBar", x: 755, y: 373, settings: { zIndex: 95, realpos: { x: 755, y: 373 } } }, { type: "EntityButtonLeft", x: 10, y: 450, settings: { zIndex: 100, realpos: { x: 10, y: 450 } } }, { type: "EntityButtonRight", x: 100, y: 450, settings: { zIndex: 100, realpos: { x: 100, y: 450 } } }, { type: "EntityButtonGo", x: 820, y: 440, settings: { zIndex: 100, realpos: { x: 820, y: 440 } } }, { type: "EntityHandanim", x: -100, y: 0, settings: { zIndex: 150 } }, { type: "EntityTcontrol", x: 0, y: 0, settings: { zIndex: 10 } }, { type: "EntityBgtext", x: 230, y: 430, settings: { zIndex: 115, realpos: { x: 230, y: 430 } } }, { type: "EntityButtonExit", x: 900, y: 10, settings: { zIndex: 115, realpos: { x: 900, y: 10 } } }], layer: [] } }); ig.baked = !0; ig.module("game.main").requires("impact.game", "impact.debug.debug", "plugins.patches.webkit-image-smoothing-patch", "plugins.patches.windowfocus-onMouseDown-patch", "plugins.handlers.dom-handler", "plugins.handlers.size-handler", "plugins.handlers.api-handler", "plugins.audio.sound-handler", "plugins.io.io-manager", "plugins.splash-loader", "plugins.tween", "plugins.url-parameters", "plugins.director", "plugins.impact-storage", "plugins.fake-storage", "plugins.scale", "plugins.animation-scaling", "plugins.box2d.game", "plugins.camera", "plugins.curve-level", "plugins.branding.splash", "game.entities.branding-logo-placeholder", "game.entities.buttons.button-more-games", "game.entities.opening-shield", "game.entities.opening-kitty", "game.entities.pointer", "game.entities.pointer-selector", "game.entities.select", "game.entities.text", "game.entities.landmarker", "game.levels.opening", "game.levels.test-desktop", "game.levels.test-mobile", "game.levels.menu", "game.levels.hole1", "game.levels.hole2", "game.levels.hole3", "game.levels.hole4", "game.levels.hole5", "game.levels.hole6", "game.levels.hole7", "game.levels.hole8", "game.levels.hole9", "game.levels.hole10", "game.levels.hole11", "game.levels.result", "game.levels.land-editor", "game.levels.tutorial", "game.levels.demo").defines(function() { this.FRAMEBREAKER; MyGame = ig.Box2DGame.extend({ io: null, paused: !1, popupOpen: "", pauseClick: !0, freeCtxVault: [], ctxVault: [], gravity: 712.5, power: 0, maxpower: 35, camfollow: 0, landpoints: [], makeLand: !0, screenRec: { x: 0, y: 0 }, landEle: null, ballhit: 0, levelNow: 1, yoffset: 0, valpar: { "0": 4, 1: 4, 2: 3, 3: 3, 4: 3, 5: 4, 6: 5, 7: 6, 8: 5, 9: 4, 10: 0 }, valstroke: { "0": "-", 1: "-", 2: "-", 3: "-", 4: "-", 5: "-", 6: "-", 7: "-", 8: "-", 9: "-", 10: "-" }, intoWater: !1, playerChar: 1, ballSelect: 1, gameMoney: 0, posHats: { "0": { x: 125, y: 140 }, 1: { x: 250, y: 140 }, 2: { x: 375, y: 140 } }, posVal: { "0": 1, 1: 2, 2: 3 }, popupTraining: "", popupTraining2: "", popupTraining3: "", clickContinue: "", init: function() { this.setupmobiltrGameCenter(); this.setupLocalStorage(); this.io = new IoManager; this.setupUrlParams = new ig.UrlParameters; this.removeLoadingWheel(); this.finalize(); ig.game.levelList = new CurveLevel; ig.game.levelList.loadLand() }, setupLocalStorage: function() { try { window.localStorage.setItem("test", "test"), this.storage = new ig.Storage } catch (b) { console.log("using fake storage"), this.storage = new ig.FakeStorage }(null == this.storage.get("hat") || "" == this.storage.get("hat")) && this.storage.set("hat", 1); (null == this.storage.get("ballshop") || "" == this.storage.get("ballshop")) && this.storage.set("ballshop", 1); (null == this.storage.get("money") || "" == this.storage.get("money")) && this.storage.set("money", 0); null == this.storage.get("firstPlay") && this.storage.set("firstPlay", !0); for (i = 2; 10 >= i; i++)(null == this.storage.get("hatlock" + i.toString()) || "" == this.storage.get("hatlock" + i.toString())) && this.storage.set("hatlock" + i.toString(), 0); this.gameMoney = this.storage.get("money"); this.playerChar = this.storage.get("hat"); null == this.storage.get("bgmMute") && this.storage.set("bgmMute", !1); null == this.storage.get("sfxMute") && this.storage.set("sfxMute", !1); null == this.storage.get("bestScore") && this.storage.set("bestScore", 0); 1 == this.storage.get("ballshop") && (this.maxpower = 35) }, setupmobiltrGameCenter: function() { if (_SETTINGS) if (_SETTINGS.mobiltrGameCenter) { var b = ig.domHandler.getElementByClass("gamecenter-activator"); _SETTINGS.mobiltrGameCenter.Activator.Enabled && _SETTINGS.mobiltrGameCenter.Activator.Position && (console.log("mobiltrGameCenter activator settings present ...."), ig.domHandler.css(b, { position: "absolute", left: _SETTINGS.mobiltrGameCenter.Activator.Position.Left, top: _SETTINGS.mobiltrGameCenter.Activator.Position.Top, "z-index": 3 })); ig.domHandler.show(b) } else console.log("mobiltrGameCenter settings not defined in game settings") }, finalize: function() { if (ig.ua.mobile) { var b = ig.domHandler.getElementById("#play"); ig.domHandler.attr(b, "onclick", 'ig.soundHandler.sfxPlayer.play("staticSound");ig.game.splashClick();'); ig.domHandler.show(b) } else this.start(); ig.sizeHandler.reorient() }, removeLoadingWheel: function() { try { $("#ajaxbar").css("background", "none") } catch (b) { console.log(b) } }, showDebugMenu: function() { console.log("showing debug menu ..."); ig.Entity._debugShowBoxes = !0; $(".ig_debug").show() }, start: function() { this.resetPlayerStats(); this.director = ig.ua.mobile ? new ig.Director(this, [LevelOpening, LevelMenu, LevelTestMobile]) : new ig.Director(this, [LevelOpening, LevelMenu, LevelTestDesktop]); if (_SETTINGS.Branding.Splash.Disabled) try { this.branding = new ig.BrandingSplash } catch (b) { console.log(b), console.log("Loading original levels ..."), this.director.loadLevel(this.director.currentLevel) } else this.director.loadLevel(this.director.currentLevel); this.spawnEntity(EntityPointerSelector, 50, 50); ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.background); this.storage.get("bgmMute") && ig.soundHandler.bgmPlayer.mute(!0) }, fpsCount: function() { this.fpsTimer || (this.fpsTimer = new ig.Timer(1)); this.fpsTimer && 0 > this.fpsTimer.delta() ? null != this.fpsCounter ? this.fpsCounter++ : this.fpsCounter = 0 : (ig.game.fps = this.fpsCounter, this.fpsCounter = 0, this.fpsTimer.reset()) }, endGame: function() { console.log("End game"); ig.soundHandler.bgmPlayer.stop(); ig.apiHandler.run("MJSEnd") }, resetPlayerStats: function() { ig.log("resetting player stats ..."); this.playerStats = { id: this.playerStats ? this.playerStats.id : null } }, splashClick: function() { var b = ig.domHandler.getElementById("#play"); ig.domHandler.hide(b); ig.apiHandler.run("MJSFooter"); ig.apiHandler.run("MJSHeader"); ig.game.start() }, pauseGame: function() { ig.system.stopRunLoop.call(ig.system); console.log("Game Paused") }, resumeGame: function() { ig.system.startRunLoop.call(ig.system); console.log("Game Resumed") }, showOverlay: function(b) { for (i = 0; i < b.length; i++) $("#" + b[i]) && $("#" + b[i]).show(), document.getElementById(b[i]) && (document.getElementById(b[i]).style.visibility = "visible") }, hideOverlay: function(b) { for (i = 0; i < b.length; i++) $("#" + b[i]) && $("#" + b[i]).hide(), document.getElementById(b[i]) && (document.getElementById(b[i]).style.visibility = "hidden") }, currentBGMVolume: 1, addition: 0.1, update: function() { this.paused ? this.updateWhilePaused() : (this.parent(), ig.ua.mobile && ig.soundHandler && ig.soundHandler.forceLoopBGM()) }, updateWhilePaused: function() { for (var b = 0; b < this.entities.length; b++) this.entities[b].ignorePause && this.entities[b].update() }, draw: function() { this.parent() }, clearCanvas: function(b, c, d) { var e = b.canvas; b.clearRect(0, 0, c, d); e.style.display = "none"; e.offsetHeight; e.style.display = "inherit" }, drawDebug: function() { if (!ig.global.wm && (this.debugEnable(), this.viewDebug && (ig.system.context.fillStyle = "#000000", ig.system.context.globalAlpha = 0.35, ig.system.context.fillRect(0, 0, ig.system.width / 4, ig.system.height), ig.system.context.globalAlpha = 1, this.debug && 0 < this.debug.length))) for (i = 0; i < this.debug.length; i++) ig.system.context.font = "10px Arial", ig.system.context.fillStyle = "#ffffff", ig.system.context.fillText(this.debugLine - this.debug.length + i + ": " + this.debug[i], 10, 50 + 10 * i) }, debugCL: function(b) { this.debug ? (50 > this.debug.length || this.debug.splice(0, 1), this.debug.push(b), this.debugLine++) : (this.debug = [], this.debugLine = 1, this.debug.push(b)); console.log(b) }, debugEnable: function() { ig.input.pressed("click") && (this.debugEnableTimer = new ig.Timer(2)); this.debugEnableTimer && 0 > this.debugEnableTimer.delta() ? ig.input.released("click") && (this.debugEnableTimer = null) : this.debugEnableTimer && 0 < this.debugEnableTimer.delta() && (this.debugEnableTimer = null, this.viewDebug = this.viewDebug ? !1 : !0) } }); ig.domHandler = null; ig.domHandler = new ig.DomHandler; ig.domHandler.forcedDeviceDetection(); ig.domHandler.forcedDeviceRotation(); ig.apiHandler = new ig.ApiHandler; ig.sizeHandler = new ig.SizeHandler(ig.domHandler); ig.ua.mobile ? (ig.Sound.enabled = !1, ig.main("#canvas", MyGame, 60, ig.sizeHandler.mobile.actualResolution.x, ig.sizeHandler.mobile.actualResolution.y, ig.sizeHandler.scale, ig.SplashLoader), ig.sizeHandler.resize()) : ig.main("#canvas", MyGame, 60, ig.sizeHandler.desktop.actualResolution.x, ig.sizeHandler.desktop.actualResolution.y, ig.sizeHandler.scale, ig.SplashLoader); ig.soundHandler = null; ig.soundHandler = new ig.SoundHandler; ig.sizeHandler.reorient() });