-
-
Save jkiss/1e553acc1adc12a14b7eeb020a794edf to your computer and use it in GitHub Desktop.
cargo pixelate
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| define("text", ["module"], function(t) { | |
| "use strict"; | |
| var e, a, i = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0"], o = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, s = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im, r = "undefined" != typeof location && location.href, n = r && location.protocol && location.protocol.replace(/\:/, ""), d = r && location.hostname, h = r && (location.port || void 0), m = [], l = t.config && t.config() || {}; | |
| return e = { | |
| version: "2.0.1", | |
| strip: function(t) { | |
| if (t) { | |
| t = t.replace(o, ""); | |
| var e = t.match(s); | |
| e && (t = e[1]) | |
| } else | |
| t = ""; | |
| return t | |
| }, | |
| jsEscape: function(t) { | |
| return t.replace(/(['\\])/g, "\\$1").replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r").replace(/[\u2028]/g, "\\u2028").replace(/[\u2029]/g, "\\u2029") | |
| }, | |
| createXhr: l.createXhr || function() { | |
| var t, e, a; | |
| if ("undefined" != typeof XMLHttpRequest) | |
| return new XMLHttpRequest; | |
| if ("undefined" != typeof ActiveXObject) | |
| for (e = 0; e < 3; e += 1) { | |
| a = i[e]; | |
| try { | |
| t = new ActiveXObject(a) | |
| } catch (t) {} | |
| if (t) { | |
| i = [a]; | |
| break | |
| } | |
| } | |
| return t | |
| } | |
| , | |
| parseName: function(t) { | |
| var e = !1 | |
| , a = t.indexOf(".") | |
| , i = t.substring(0, a) | |
| , o = t.substring(a + 1, t.length); | |
| return a = o.indexOf("!"), | |
| -1 !== a && (e = o.substring(a + 1, o.length), | |
| e = "strip" === e, | |
| o = o.substring(0, a)), | |
| { | |
| moduleName: i, | |
| ext: o, | |
| strip: e | |
| } | |
| }, | |
| xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, | |
| useXhr: function(t, a, i, o) { | |
| var s, r, n, d = e.xdRegExp.exec(t); | |
| return !d || (s = d[2], | |
| r = d[3], | |
| r = r.split(":"), | |
| n = r[1], | |
| r = r[0], | |
| !(s && s !== a || r && r.toLowerCase() !== i.toLowerCase() || (n || r) && n !== o)) | |
| }, | |
| finishLoad: function(t, a, i, o) { | |
| i = a ? e.strip(i) : i, | |
| l.isBuild && (m[t] = i), | |
| o(i) | |
| }, | |
| load: function(t, a, i, o) { | |
| if (o.isBuild && !o.inlineText) | |
| return void i(); | |
| l.isBuild = o.isBuild; | |
| var s = e.parseName(t) | |
| , m = s.moduleName + "." + s.ext | |
| , u = a.toUrl(m) | |
| , c = l.useXhr || e.useXhr; | |
| !r || c(u, n, d, h) ? e.get(u, function(a) { | |
| e.finishLoad(t, s.strip, a, i) | |
| }, function(t) { | |
| i.error && i.error(t) | |
| }) : a([m], function(t) { | |
| e.finishLoad(s.moduleName + "." + s.ext, s.strip, t, i) | |
| }) | |
| }, | |
| write: function(t, a, i, o) { | |
| if (m.hasOwnProperty(a)) { | |
| var s = e.jsEscape(m[a]); | |
| i.asModule(t + "!" + a, "define(function () { return '" + s + "';});\n") | |
| } | |
| }, | |
| writeFile: function(t, a, i, o, s) { | |
| var r = e.parseName(a) | |
| , n = r.moduleName + "." + r.ext | |
| , d = i.toUrl(r.moduleName + "." + r.ext) + ".js"; | |
| e.load(n, i, function(a) { | |
| var i = function(t) { | |
| return o(d, t) | |
| }; | |
| i.asModule = function(t, e) { | |
| return o.asModule(t, d, e) | |
| } | |
| , | |
| e.write(t, n, i, s) | |
| }, s) | |
| } | |
| }, | |
| "undefined" != typeof process && process.versions && process.versions.node ? (a = require.nodeRequire("fs"), | |
| e.get = function(t, e) { | |
| var i = a.readFileSync(t, "utf8"); | |
| 0 === i.indexOf("\ufeff") && (i = i.substring(1)), | |
| e(i) | |
| } | |
| ) : e.createXhr() ? e.get = function(t, a, i) { | |
| var o = e.createXhr(); | |
| o.open("GET", t, !0), | |
| l.onXhr && l.onXhr(o, t), | |
| o.onreadystatechange = function(e) { | |
| var s, r; | |
| 4 === o.readyState && (s = o.status, | |
| s > 399 && s < 600 ? (r = new Error(t + " HTTP status: " + s), | |
| r.xhr = o, | |
| i(r)) : a(o.responseText)) | |
| } | |
| , | |
| o.send(null) | |
| } | |
| : "undefined" != typeof Packages && (e.get = function(t, e) { | |
| var a, i, o = new java.io.File(t), s = java.lang.System.getProperty("line.separator"), r = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(o),"utf-8")), n = ""; | |
| try { | |
| for (a = new java.lang.StringBuffer, | |
| i = r.readLine(), | |
| i && i.length() && 65279 === i.charAt(0) && (i = i.substring(1)), | |
| a.append(i); null !== (i = r.readLine()); ) | |
| a.append(s), | |
| a.append(i); | |
| n = String(a.toString()) | |
| } finally { | |
| r.close() | |
| } | |
| e(n) | |
| } | |
| ), | |
| e | |
| }), | |
| define("text!pixelation/template.html", [], function() { | |
| return "" | |
| }), | |
| define("global_libs/require/normalize", [], function() { | |
| function t(t, i, o) { | |
| if (t.match(n) || t.match(r)) | |
| return t; | |
| t = s(t); | |
| var d = o.match(r) | |
| , h = i.match(r); | |
| return !h || d && d[1] == h[1] && d[2] == h[2] ? a(e(t, i), o) : e(t, i) | |
| } | |
| function e(t, e) { | |
| if ("./" == t.substr(0, 2) && (t = t.substr(2)), | |
| t.match(n) || t.match(r)) | |
| return t; | |
| var a = e.split("/") | |
| , i = t.split("/"); | |
| for (a.pop(); curPart = i.shift(); ) | |
| ".." == curPart ? a.pop() : a.push(curPart); | |
| return a.join("/") | |
| } | |
| function a(t, e) { | |
| var a = e.split("/"); | |
| for (a.pop(), | |
| e = a.join("/") + "/", | |
| i = 0; e.substr(i, 1) == t.substr(i, 1); ) | |
| i++; | |
| for (; "/" != e.substr(i, 1); ) | |
| i--; | |
| e = e.substr(i + 1), | |
| t = t.substr(i + 1), | |
| a = e.split("/"); | |
| var o = t.split("/"); | |
| for (out = ""; a.shift(); ) | |
| out += "../"; | |
| for (; curPart = o.shift(); ) | |
| out += curPart + "/"; | |
| return out.substr(0, out.length - 1) | |
| } | |
| var o = /([^:])\/+/g | |
| , s = function(t) { | |
| return t.replace(o, "$1/") | |
| } | |
| , r = /[^\:\/]*:\/\/([^\/])*/ | |
| , n = /^(\/|data:)/ | |
| , d = function(e, a, i) { | |
| a = s(a), | |
| i = s(i); | |
| for (var o, r, e, n = /@import\s*("([^"]*)"|'([^']*)')|url\s*\((?!#)\s*(\s*"([^"]*)"|'([^']*)'|[^\)]*\s*)\s*\)/gi; o = n.exec(e); ) { | |
| r = o[3] || o[2] || o[5] || o[6] || o[4]; | |
| var d; | |
| d = t(r, a, i); | |
| var h = o[5] || o[6] ? 1 : 0; | |
| e = e.substr(0, n.lastIndex - r.length - h - 1) + d + e.substr(n.lastIndex - h - 1), | |
| n.lastIndex = n.lastIndex + (d.length - r.length) | |
| } | |
| return e | |
| }; | |
| return d.convertURIBase = t, | |
| d.absoluteURI = e, | |
| d.relativeURI = a, | |
| d | |
| }), | |
| define("css", [], function() { | |
| if ("undefined" == typeof window) | |
| return { | |
| load: function(t, e, a) { | |
| a() | |
| } | |
| }; | |
| var t = document.getElementsByTagName("head")[0] | |
| , e = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0 | |
| , a = !1 | |
| , i = !0; | |
| e[1] || e[7] ? a = parseInt(e[1]) < 6 || parseInt(e[7]) <= 9 : e[2] || e[8] ? i = !1 : e[4] && (a = parseInt(e[4]) < 18); | |
| var o = {}; | |
| o.pluginBuilder = "global_libs/require/css-builder"; | |
| var s, r, n, d = function() { | |
| s = document.createElement("style"), | |
| t.appendChild(s), | |
| r = s.styleSheet || s.sheet | |
| }, h = 0, m = [], l = function(t) { | |
| h++, | |
| 32 == h && (d(), | |
| h = 0), | |
| r.addImport(t), | |
| s.onload = function() { | |
| u() | |
| } | |
| }, u = function() { | |
| n(); | |
| var t = m.shift(); | |
| return t ? (n = t[1], | |
| void l(t[0])) : void (n = null) | |
| }, c = function(t, e) { | |
| if (r && r.addImport || d(), | |
| r && r.addImport) | |
| n ? m.push([t, e]) : (l(t), | |
| n = e); | |
| else { | |
| s.textContent = '@import "' + t + '";'; | |
| var a = setInterval(function() { | |
| try { | |
| s.sheet.cssRules, | |
| clearInterval(a), | |
| e() | |
| } catch (t) {} | |
| }, 10) | |
| } | |
| }, _ = function(e, a) { | |
| var o = document.createElement("link"); | |
| if (o.type = "text/css", | |
| o.rel = "stylesheet", | |
| i) | |
| o.onload = function() { | |
| o.onload = function() {} | |
| , | |
| setTimeout(a, 7) | |
| } | |
| ; | |
| else | |
| var s = setInterval(function() { | |
| for (var t = 0; t < document.styleSheets.length; t++) { | |
| if (document.styleSheets[t].href == o.href) | |
| return clearInterval(s), | |
| a() | |
| } | |
| }, 10); | |
| o.href = e, | |
| t.appendChild(o) | |
| }; | |
| return o.normalize = function(t, e) { | |
| return ".css" == t.substr(t.length - 4, 4) && (t = t.substr(0, t.length - 4)), | |
| e(t) | |
| } | |
| , | |
| o.load = function(t, e, i) { | |
| (a ? c : _)(e.toUrl(t + ".css"), i) | |
| } | |
| , | |
| o | |
| }), | |
| define("pixelation/main", ["text!pixelation/template.html", "_libs/pixi.min", "css!/_jsapps/backdrop/pixelation/style"], function(t, e) { | |
| return Backbone.View.extend({ | |
| template: _.template(t), | |
| deferredLoadEventName: "pixelation-load-complete", | |
| defaults: { | |
| hex: "#000000", | |
| alpha: 0, | |
| mouse_interaction: !0, | |
| mouse_sensitivity: 6, | |
| image_url: "//static.cargocollective.com/assets/backdrop/default_1024.jpg", | |
| image: "", | |
| image_size: 1024, | |
| requires_webgl: "true", | |
| rows: 64, | |
| columns: 64, | |
| zoom: 100, | |
| horiz_stretch: 100, | |
| vert_stretch: 97, | |
| layout_mode: "grid_mode", | |
| grid_size: 44, | |
| flip_it: !1, | |
| elasticity: 35, | |
| stir_freq: 74, | |
| stir_strength: 4, | |
| stir_disorder: 76, | |
| tolerance: 86, | |
| mouse_zoom: 0, | |
| stir_grid: !0, | |
| posterize: !1, | |
| plugin_id: 23, | |
| size: "cover" | |
| }, | |
| drawFrameID: null, | |
| initialize: function() { | |
| this.image_load_queue = [], | |
| this.data = { | |
| renderer: null, | |
| stage: null, | |
| texture: null, | |
| composition: null, | |
| sprites_num: 0, | |
| mouse_in: !1, | |
| image_size: { | |
| width: 100, | |
| height: 100 | |
| }, | |
| row_num: 1, | |
| col_num: 1, | |
| mouse_vector: [{ | |
| x: 0, | |
| y: 0 | |
| }, { | |
| x: 0, | |
| y: 0 | |
| }], | |
| texture_size: { | |
| width: 100, | |
| height: 100 | |
| }, | |
| is_mobile: !1, | |
| image_loaded: !1, | |
| model_speed: { | |
| x: 0, | |
| y: 0 | |
| }, | |
| lastClientPos: { | |
| x: 0, | |
| y: 0 | |
| }, | |
| skip_delta: !1, | |
| mouse_sensitivity: 0, | |
| backdrop_size: { | |
| w: 800, | |
| h: 600, | |
| top: 0, | |
| left: 0, | |
| resolution: 1 | |
| }, | |
| movement_offset: { | |
| x: 0, | |
| y: 0 | |
| }, | |
| mouse_prev: { | |
| x: -1, | |
| y: -1 | |
| }, | |
| mouse_cur: { | |
| x: 0, | |
| y: 0 | |
| }, | |
| mouse_cache: { | |
| x: 0, | |
| y: 0 | |
| }, | |
| mouse_delta: { | |
| x: 0, | |
| y: 0, | |
| smooth_x: 0, | |
| smooth_y: 0, | |
| long_tail: 0 | |
| } | |
| }; | |
| var t = _.defaults(this.model.get("data"), this.defaults); | |
| this.model.set("data", t), | |
| this.listenTo(this.model, "reset", this.Init), | |
| this.scrollCallback = this.updateScroll.bind(this), | |
| this.mouseCallback = this.updateMouseOffset.bind(this), | |
| this.mouseEnterCallback = this.mouseEnter.bind(this), | |
| this.mouseLeaveCallback = this.mouseLeave.bind(this) | |
| }, | |
| render: function() { | |
| var t = Cargo.Core.Handlebars.Render("{{>loading_animation}}", {}); | |
| return this.$el.html(t), | |
| this | |
| }, | |
| loadImage: function() { | |
| $(".loading_animation", this.el).removeClass("hidden"); | |
| var t = this.model.get("data") | |
| , a = this | |
| , i = Cargo.Collection.Images.fetchWebGLImage(t.image, this.defaults.image_size); | |
| i ? i.id = t.image : (i = { | |
| w: 1500, | |
| h: 1500, | |
| url: this.defaults.image_url, | |
| id: 0 | |
| }, | |
| t.image = 0, | |
| this.model.set("data", t)); | |
| var o = new Image; | |
| o.crossOrigin = "", | |
| this.data.image_loaded = !1, | |
| this.image_load_queue.push(i.id), | |
| o.onload = function() { | |
| if (!a.destroyed) { | |
| var t = a.image_load_queue.pop(); | |
| if (a.model.get("data").image != t) | |
| return void a.loadImage(); | |
| t == i.id && (a.image_load_queue = [], | |
| a.data.image_size.width = parseInt(i.w), | |
| a.data.image_size.height = parseInt(i.h), | |
| a.data.texture_size = { | |
| width: o.width, | |
| height: o.height | |
| }, | |
| a.data.texture = new e.Texture.fromImage(o.src), | |
| a.data.image_loaded = !0, | |
| a.updateWindow(!0), | |
| a.makeSprites()) | |
| } | |
| } | |
| , | |
| o.src = i.url | |
| }, | |
| isPowerOfTwo: function(t) { | |
| return 0 == (t & t - 1) | |
| }, | |
| nextHighestPowerOfTwo: function(t) { | |
| --t; | |
| for (var e = 1; e < 32; e <<= 1) | |
| t |= t >> e; | |
| return Math.min(t + 1, 1024) | |
| }, | |
| makeSprites: function() { | |
| var t, a = this.model.get("data"), i = this.data.row_num = a.rows, o = this.data.col_num = a.columns, s = a.grid_size, r = a.layout_mode, n = 0; | |
| "grid_mode" == r ? (this.data.row_num = i = s, | |
| this.data.col_num = o = s) : "row_mode" == r ? this.data.col_num = o = 1 : "column_mode" == r && (this.data.row_num = i = 1); | |
| var d = i * o | |
| , h = this.data.composition.children.length | |
| , m = d - h; | |
| if (m < 0) | |
| for (var l = h - 1; l > d - 1; l--) | |
| this.data.composition.removeChildAt(l); | |
| else if (m > 0) | |
| for (var l = h; l < d; l++) | |
| t = new e.Sprite, | |
| this.data.composition.addChild(t); | |
| for (var l = 0; l < o; l++) | |
| for (var u = 0; u < i; u++) | |
| t = this.data.composition.children[n], | |
| t.anchor = { | |
| x: .5, | |
| y: .5 | |
| }, | |
| t.coords = { | |
| x: l, | |
| y: u | |
| }, | |
| t.max_frame = { | |
| x: 0, | |
| y: 0, | |
| w: 1, | |
| h: 1 | |
| }, | |
| t.min_frame = { | |
| x: 0, | |
| y: 0, | |
| w: 1, | |
| h: 1 | |
| }, | |
| t.base_frame = { | |
| x: 0, | |
| y: 0, | |
| w: 1, | |
| h: 1 | |
| }, | |
| t.zoom_in_min_frame = { | |
| x: 0, | |
| y: 0, | |
| w: 1, | |
| h: 1 | |
| }, | |
| t.zoom_in_max_frame = { | |
| x: 0, | |
| y: 0, | |
| w: 1, | |
| h: 1 | |
| }, | |
| t.movement = { | |
| x: 0, | |
| y: 0 | |
| }, | |
| t.mouse_over = !1, | |
| t.mouse_zoom = 0, | |
| t.animating = !1, | |
| t.speed = { | |
| x: 0, | |
| y: 0 | |
| }, | |
| t.interactive = !0, | |
| n++; | |
| this.setSpritePosition(), | |
| this.resizeImage(), | |
| $(".loading_animation", this.el).addClass("hidden"), | |
| Cargo.Event.trigger(this.deferredLoadEventName), | |
| this.paused && this.in_viewport && this.Resume() | |
| }, | |
| spriteMouseMove: function() { | |
| var t = this.model.get("data"); | |
| if (0 != this.data.composition.children.length && t.mouse_interaction) { | |
| var e, a = this.data.row_num, i = this.data.col_num, o = this.data.backdrop_size.w, s = this.data.backdrop_size.h, r = this.data.composition.position.x, n = this.data.composition.position.y, d = this.data.mouse_sensitivity, h = [], m = .01 * t.tolerance, m = m * Math.max(a, i) * 2 + 1.5 * (1 - m); | |
| e = this.data.composition.width / this.data.composition.height > o / s ? { | |
| x: (this.data.mouse_cur.x - r) / this.data.composition.width * i, | |
| y: (this.data.mouse_cur.y - n) / s * a | |
| } : { | |
| x: (this.data.mouse_cur.x - r) / o * i, | |
| y: (this.data.mouse_cur.y - n) / this.data.composition.height * a | |
| }, | |
| this.data.mouse_vector.unshift(e), | |
| this.data.mouse_vector.pop(); | |
| var l = 0 | |
| , u = this.data.mouse_vector[0].x | |
| , c = this.data.mouse_vector[1].x; | |
| c < u && (l = u, | |
| u = c, | |
| c = l); | |
| var _ = this.data.mouse_vector[0].y | |
| , f = this.data.mouse_vector[1].y; | |
| f < _ && (l = _, | |
| _ = f, | |
| f = l); | |
| for (var p, x, g, v, y = Math.sqrt(m * m + m * m), w = Math.abs(m / y), b = this.data.mouse_in ? 1 : this.data.mouse_delta.long_tail, z = u + -.01; z < c; z++) | |
| for (var M = _ + -.01; M < f; M++) { | |
| h = this.data.composition.children.filter(function(t) { | |
| return Math.floor(z) <= t.coords.x + m && Math.floor(z) >= t.coords.x - m && Math.floor(M) <= t.coords.y + m && Math.floor(M) >= t.coords.y - m | |
| }); | |
| for (var k = 0; k < h.length; k++) | |
| p = z + -.5 - h[k].coords.x, | |
| x = M + -.5 - h[k].coords.y, | |
| g = Math.sqrt(p * p + x * x), | |
| v = Math.max(m * w - g, 0) / (.5 * y), | |
| h[k].mouse_zoom = Math.min(Math.max(0, h[k].mouse_zoom * (1 - v) + (h[k].mouse_zoom + .1 * v) * v), 1) * b, | |
| h[k].speed.x += Math.min(Math.max(-1, this.data.mouse_delta.smooth_x * v * d * .1), 1), | |
| h[k].speed.y += Math.min(Math.max(-1, this.data.mouse_delta.smooth_y * v * d * .1), 1) | |
| } | |
| } | |
| }, | |
| updateScroll: function() { | |
| this.data.backdrop_size.top = this.el.getBoundingClientRect().top | |
| }, | |
| mouseEnter: function() { | |
| this.data.mouse_in = !0, | |
| this.data.backdrop_size.left = this.el.getBoundingClientRect().left | |
| }, | |
| mouseLeave: function() { | |
| this.data.mouse_in = !1 | |
| }, | |
| stirPixels: function() { | |
| var t = this.model.get("data"); | |
| if (0 != this.data.composition.children.length && t.stir_grid) { | |
| var e, a = this.data.composition.children.length, i = (this.data.col_num, | |
| this.data.row_num, | |
| .05 * t.stir_freq), o = .1 * t.stir_disorder + 1, s = .001 * t.stir_strength * .25, r = Math.sin(.005 * i * this.counter), n = Math.cos(.005 * i * this.counter); | |
| if ("grid_mode" == t.layout_mode) | |
| for (var d = 0; d < a; d++) | |
| e = this.data.composition.children[d], | |
| n = Math.sin(n + (o - 1) * d * 10), | |
| e.speed.x += (Math.sin(.003 * this.counter * i + .1 * (e.coords.x + n * e.coords.y * .5 * o)) * n + Math.cos(-.0031 * this.counter * i + -.1 * (e.coords.x - n * e.coords.y * .5 * o) + .7) * r) * s, | |
| e.speed.y += (Math.sin(.0031 * this.counter * i + .1 * (e.coords.y - n * e.coords.x * .5 * o)) * n + Math.cos(-.003 * this.counter * i + -.1 * (e.coords.y - n * e.coords.x * .5 * o) + .7) * r) * s; | |
| else | |
| for (var d = 0; d < a; d++) | |
| e = this.data.composition.children[d], | |
| n = Math.sin(n + (o - 1) * d * 10), | |
| e.speed.x += (Math.sin(.009 * this.counter * i + .1 * (e.coords.x + n * e.coords.y * .5 * o * 40)) * n + Math.cos(-.0091 * this.counter * i + -.1 * (e.coords.x - n * e.coords.y * .5 * o * 40) + .7) * r) * s * 2, | |
| e.speed.y += (Math.sin(.0091 * this.counter * i + .1 * (e.coords.y - n * e.coords.x * .5 * o * 40)) * n + Math.cos(-.009 * this.counter * i + -.1 * (e.coords.y - n * e.coords.x * .5 * o * 40) + .7) * r) * s * 2 | |
| } | |
| }, | |
| animateFrame: function() { | |
| if (this.data.image_loaded && 0 != this.data.composition.children.length) | |
| for (var t, a, i, o, s, r, n = .01 * this.model.get("data").mouse_zoom, d = this.data.composition.children.length, h = (this.data.col_num, | |
| this.data.row_num), m = 0, l = { | |
| x: 0, | |
| y: 0 | |
| }, u = 0, c = 0, _ = 1 - .15 * this.data.elasticity / 100, f = .5 * (1 - this.data.elasticity / 100) + .49, p = 0; p < d; p++) { | |
| t = this.data.composition.children[p], | |
| t.speed.x = Math.min(1, Math.max(-1, t.speed.x * _)), | |
| t.speed.y = Math.min(1, Math.max(-1, t.speed.y * _)); | |
| var x = p + h | |
| , g = p - h | |
| , v = p + 1 | |
| , y = p - 1; | |
| m = 0, | |
| l = { | |
| x: 0, | |
| y: 0 | |
| }, | |
| 0 != Math.floor(v % h) && (l.x += this.data.composition.children[v].movement.x, | |
| l.y += this.data.composition.children[v].movement.y, | |
| m++), | |
| Math.floor(y % h) != h - 1 && Math.floor(y % h) > -1 && (l.x += this.data.composition.children[y].movement.x, | |
| l.y += this.data.composition.children[y].movement.y, | |
| m++), | |
| x < d && (l.x += this.data.composition.children[x].movement.x, | |
| l.y += this.data.composition.children[x].movement.y, | |
| m++), | |
| g >= 0 && (l.x += this.data.composition.children[g].movement.x, | |
| l.y += this.data.composition.children[g].movement.y, | |
| m++), | |
| m > 0 && (t.movement.x = l.x / m * f + t.speed.x * (1 - f), | |
| t.movement.y = l.y / m * f + t.speed.y * (1 - f)), | |
| u = Math.abs(t.movement.x), | |
| c = Math.abs(t.movement.y); | |
| var w, b, z = .5 * t.movement.x + .5, M = .5 * t.movement.y + .5; | |
| i = (t.max_frame.x * (1 - z) + t.min_frame.x * z) * u + t.base_frame.x * (1 - u), | |
| o = (t.max_frame.y * (1 - M) + t.min_frame.y * M) * c + t.base_frame.y * (1 - c), | |
| t.movement.x > 0 ? (i = t.min_frame.x * u + t.base_frame.x * (1 - u), | |
| w = t.zoom_in_min_frame.x * u + t.zoom_in_frame_base.x * (1 - u)) : (i = t.max_frame.x * u + t.base_frame.x * (1 - u), | |
| w = t.zoom_in_max_frame.x * u + t.zoom_in_frame_base.x * (1 - u)), | |
| t.movement.y > 0 ? (o = t.min_frame.y * c + t.base_frame.y * (1 - c), | |
| b = t.zoom_in_min_frame.y * c + t.zoom_in_frame_base.y * (1 - c)) : (o = t.max_frame.y * c + t.base_frame.y * (1 - c), | |
| b = t.zoom_in_max_frame.y * c + t.zoom_in_frame_base.y * (1 - c)), | |
| s = t.base_frame.w, | |
| r = t.base_frame.h; | |
| var k = t.mouse_zoom * Math.abs(n) | |
| , I = .5 * n + .5; | |
| i = (1 - k) * i + k * ((1 - I) * t.zoom_out_frame.x + I * w), | |
| o = (1 - k) * o + k * ((1 - I) * t.zoom_out_frame.y + I * b), | |
| s = (1 - k) * s + k * ((1 - I) * t.zoom_out_frame.w + I * t.zoom_in_frame_base.w), | |
| r = (1 - k) * r + k * ((1 - I) * t.zoom_out_frame.h + I * t.zoom_in_frame_base.h), | |
| t.mouse_zoom = Math.max(.95 * t.mouse_zoom, 0), | |
| (u > 1e-5 || c > 1e-5 || k > 1e-4) && (a = new e.Rectangle(i,o,s,r), | |
| t.texture = new e.Texture(this.data.texture.baseTexture,a)) | |
| } | |
| }, | |
| setSpritePosition: function() { | |
| var t = this.model.get("data"); | |
| if (this.data.image_loaded && 0 != this.data.composition.children.length) { | |
| var a, i, o, s, r, n, d, h, m, l, u, c, _, f, p, x, g, v, y, w, a, b = this.data.texture_size.width, z = this.data.texture_size.height, M = t.rows, k = t.columns, I = t.grid_size, C = t.layout_mode, L = 0, E = 0, P = .01 * t.zoom, T = t.flip_it, S = []; | |
| T ? "grid_mode" == C ? S = [[-1, 1], [-1, 1]] : "row_mode" == C ? S = [[1, 1], [-1, 1]] : "column_mode" == C && (S = [[-1, 1], [1, 1]]) : S = [[1, 1], [1, 1]], | |
| "grid_mode" == C ? (M = I, | |
| k = I, | |
| L = Math.max(1 - (I - 3) / 29 * 2, 0), | |
| E = .5 * (1 - (I - 3) / 29) + .5, | |
| P < 0 && (P *= E), | |
| h_zoom = P, | |
| v_zoom = P, | |
| f = tex_cell_w = b / (k + 2), | |
| p = tex_cell_h = z / (M + 2)) : "row_mode" == C ? (k = 1, | |
| L = Math.max(1 - (M - 3) / 59 * 2, 0), | |
| E = .5 * (1 - (M - 3) / 59) + .5, | |
| P < 0 && (P *= E), | |
| h_zoom = 0, | |
| v_zoom = P, | |
| tex_cell_w = b, | |
| f = 0, | |
| p = tex_cell_h = z / (M + 2), | |
| tex_cell_h = z / (M + 2)) : "column_mode" == C && (M = 1, | |
| L = Math.max(1 - (k - 3) / 59 * 2, 0), | |
| E = .5 * (1 - (k - 3) / 59) + .5, | |
| P < 0 && (P *= E), | |
| h_zoom = P, | |
| v_zoom = 0, | |
| tex_cell_w = b / (k + 2), | |
| f = tex_cell_w = b / (k + 2), | |
| p = 0, | |
| tex_cell_h = z); | |
| for (var s = 1 / b, r = 1 / z, X = 0; X < M * k; X++) | |
| w = this.data.composition.children[X], | |
| x = 1 == k ? .5 : w.coords.x / (k - 1), | |
| g = 1 == M ? .5 : w.coords.y / (M - 1), | |
| v = Math.sin(x * Math.PI), | |
| y = Math.sin(g * Math.PI), | |
| h = f + 1 / b, | |
| m = p + 1 / z, | |
| n = f + w.coords.x * tex_cell_w, | |
| d = p + w.coords.y * tex_cell_h, | |
| i = n + tex_cell_w / 2 + .5 * -s, | |
| o = d + tex_cell_h / 2 + .5 * -r, | |
| h_zoom > 0 ? (l = h_zoom * i + (1 - h_zoom) * n, | |
| c = h_zoom * s + (1 - h_zoom) * h) : (l = -h_zoom * tex_cell_w + (1 + h_zoom) * n, | |
| c = -h_zoom * (b - 2 * tex_cell_w) + (1 + h_zoom) * h), | |
| v_zoom > 0 ? (u = v_zoom * o + (1 - v_zoom) * d, | |
| _ = v_zoom * r + (1 - v_zoom) * m) : (u = -v_zoom * tex_cell_h + (1 + v_zoom) * d, | |
| _ = -v_zoom * (z - 2 * tex_cell_h) + (1 + v_zoom) * m), | |
| "grid_mode" == C ? (w.min_frame = { | |
| x: Math.max(0, (l - .5 * b * v) * (1 - L) + (l - .5 * b) * L), | |
| y: Math.max(0, (u - .5 * z * y) * (1 - L) + (u - .5 * z) * L), | |
| w: c, | |
| h: _ | |
| }, | |
| w.max_frame = { | |
| x: Math.min((l + .5 * b * v) * (1 - L) + (l + .5 * b) * L, b - c), | |
| y: Math.min((u + .5 * z * y) * (1 - L) + (u + .5 * z) * L, z - _), | |
| w: c, | |
| h: _ | |
| }, | |
| w.base_frame = { | |
| x: l, | |
| y: u, | |
| w: c, | |
| h: _ | |
| }, | |
| w.zoom_in_frame_base = { | |
| x: i, | |
| y: o, | |
| w: s, | |
| h: r | |
| }, | |
| w.zoom_in_min_frame = { | |
| x: 0, | |
| y: 0, | |
| w: s, | |
| h: r | |
| }, | |
| w.zoom_in_max_frame = { | |
| x: b - s, | |
| y: z - o, | |
| w: s, | |
| h: r | |
| }, | |
| w.zoom_out_frame = { | |
| x: 0, | |
| y: 0, | |
| w: b, | |
| h: z | |
| }) : "row_mode" == C ? (w.min_frame = { | |
| x: 0, | |
| y: Math.max(0, (u - .5 * z * y) * (1 - L) + (u - .5 * z) * L), | |
| w: b, | |
| h: _ | |
| }, | |
| w.max_frame = { | |
| x: 0, | |
| y: Math.min((u + .5 * z * y) * (1 - L) + (u + .5 * z) * L, z - _), | |
| w: b, | |
| h: _ | |
| }, | |
| w.base_frame = { | |
| x: 0, | |
| y: u, | |
| w: b, | |
| h: _ | |
| }, | |
| w.zoom_in_frame_base = { | |
| x: 0, | |
| y: o, | |
| w: b, | |
| h: r | |
| }, | |
| w.zoom_in_min_frame = { | |
| x: 0, | |
| y: 0, | |
| w: b, | |
| h: r | |
| }, | |
| w.zoom_in_max_frame = { | |
| x: 0, | |
| y: z - o, | |
| w: b, | |
| h: r | |
| }, | |
| w.zoom_out_frame = { | |
| x: 0, | |
| y: 0, | |
| w: b, | |
| h: z | |
| }) : "column_mode" == C && (w.min_frame = { | |
| x: Math.max(0, (l - .5 * b * v) * (1 - L) + (l - .5 * b) * L), | |
| y: 0, | |
| w: c, | |
| h: z | |
| }, | |
| w.max_frame = { | |
| x: Math.min((l + .5 * b * v) * (1 - L) + (l + .5 * b) * L, b - c), | |
| y: 0, | |
| w: c, | |
| h: z | |
| }, | |
| w.base_frame = { | |
| x: l, | |
| y: 0, | |
| w: c, | |
| h: z | |
| }, | |
| w.zoom_in_frame_base = { | |
| x: i, | |
| y: 0, | |
| w: s, | |
| h: z | |
| }, | |
| w.zoom_in_min_frame = { | |
| x: 0, | |
| y: 0, | |
| w: s, | |
| h: z | |
| }, | |
| w.zoom_in_max_frame = { | |
| x: b - s, | |
| y: 0, | |
| w: s, | |
| h: z | |
| }, | |
| w.zoom_out_frame = { | |
| x: 0, | |
| y: 0, | |
| w: b, | |
| h: z | |
| }), | |
| a = new e.Rectangle(w.base_frame.x,w.base_frame.y,w.base_frame.w,w.base_frame.h), | |
| w.texture = new e.Texture(this.data.texture.baseTexture,a), | |
| w.width = this.data.backdrop_size.w / k * S[0][w.coords.x % 2], | |
| w.height = this.data.backdrop_size.h / M * S[1][w.coords.y % 2], | |
| w.position = { | |
| x: Math.abs(w.width * w.coords.x) + .5 * Math.abs(w.width), | |
| y: Math.abs(w.height * w.coords.y) + .5 * Math.abs(w.height) | |
| } | |
| } | |
| }, | |
| resizeImage: function() { | |
| if (this.data.image_loaded) { | |
| var t = (this.data.image_size.height, | |
| this.data.image_size.width, | |
| 0) | |
| , e = 0 | |
| , a = 0 | |
| , i = 0 | |
| , o = null | |
| , s = { | |
| h: this.data.backdrop_size.h + 4, | |
| w: this.data.backdrop_size.w + 4 | |
| } | |
| , r = { | |
| y: this.data.image_size.width / this.data.image_size.height, | |
| x: this.data.image_size.height / this.data.image_size.width | |
| }; | |
| o = s.w / s.h < r.y, | |
| o ? (t = Math.ceil(s.h), | |
| e = Math.ceil(s.h * r.y)) : (t = Math.ceil(s.w * r.x), | |
| e = Math.ceil(s.w)), | |
| a = Math.ceil((s.h - t) / 2 - 2), | |
| i = Math.ceil((s.w - e) / 2 - 2), | |
| this.data.composition.width = e, | |
| this.data.composition.height = t, | |
| this.data.composition.x = i, | |
| this.data.composition.y = a | |
| } | |
| }, | |
| changeBGColor: function() { | |
| var t = this.model.get("data"); | |
| this.data.renderer.backgroundColor = t.hex.replace("#", "0x"), | |
| this.data.stage.alpha = 1 - t.alpha | |
| }, | |
| updateMouseOffset: function(t) { | |
| if (!this.mouse_calced && this.model.get("data").mouse_interaction) { | |
| if (this.data.mouse_prev = { | |
| x: this.data.mouse_cur.x, | |
| y: this.data.mouse_cur.y | |
| }, | |
| this.data.is_mobile && t) | |
| t.target.classList.contains("canvas_pixelation") && t.preventDefault(), | |
| this.data.mouse_cur = { | |
| x: (t.layerX || t.touches[0].clientX) - this.data.backdrop_size.left, | |
| y: (t.layerY || t.touches[0].clientY) - this.data.backdrop_size.top | |
| }; | |
| else if (t) { | |
| if (this.data.lastClientPos.x === t.clientX && this.data.lastClientPos.y === t.clientY) | |
| return; | |
| this.data.lastClientPos.x = t.clientX, | |
| this.data.lastClientPos.y = t.clientY, | |
| this.data.mouse_in = !0, | |
| this.data.mouse_cur = { | |
| x: t.clientX - this.data.backdrop_size.left, | |
| y: t.clientY - this.data.backdrop_size.top | |
| } | |
| } | |
| this.mouse_calced = !0 | |
| } | |
| }, | |
| setMouseDelta: function() { | |
| var t = { | |
| x: this.data.mouse_cur.x - this.data.mouse_prev.x, | |
| y: this.data.mouse_cur.y - this.data.mouse_prev.y | |
| }; | |
| if (!(Math.abs(t.x) > .9 * this.data.backdrop_size.w || Math.abs(t.y) > .9 * this.data.backdrop_size.h)) | |
| if (this.data.mouse_cache.x == this.data.mouse_cur.x && (this.data.mouse_prev.x = this.data.mouse_cur.x, | |
| t.x = 0), | |
| this.data.mouse_cache.y == this.data.mouse_cur.y && (this.data.mouse_prev.y = this.data.mouse_cur.y, | |
| t.y = 0), | |
| this.data.mouse_cache.x = this.data.mouse_cur.x, | |
| this.data.mouse_cache.y = this.data.mouse_cur.y, | |
| -1 == this.data.mouse_prev.x) | |
| this.data.mouse_delta = { | |
| x: 0, | |
| y: 0, | |
| smooth_x: 0, | |
| smooth_y: 0, | |
| long_tail: 0 | |
| }; | |
| else { | |
| var e = { | |
| x: this.data.mouse_delta.smooth_x, | |
| y: this.data.mouse_delta.smooth_y, | |
| long_tail: this.data.mouse_delta.long_tail | |
| }; | |
| this.data.mouse_delta = { | |
| x: t.x, | |
| y: t.y, | |
| smooth_x: .1 * this.data.mouse_delta.x + .9 * e.x, | |
| smooth_y: .1 * this.data.mouse_delta.y + .9 * e.y, | |
| long_tail: 1 | |
| }, | |
| this.data.mouse_in ? this.data.mouse_delta.long_tail = 1 : this.data.mouse_delta.long_tail = Math.min(.008 * Math.max(Math.abs(this.data.mouse_delta.x), Math.abs(this.data.mouse_delta.y)) + .992 * e.long_tail, 1) | |
| } | |
| }, | |
| updateWindow: function(t) { | |
| var e = this.$el.closest(".backdrop").get(0); | |
| if (null !== e && void 0 !== e && null !== this.data.renderer) { | |
| var a = Math.max(e.offsetWidth, 1) | |
| , i = Math.max(e.offsetHeight, 1); | |
| this.data.backdrop_size.w == a && this.data.backdrop_size.h == i && 2 == this.data.backdrop_size.resolution && 1 != t || (this.data.backdrop_size.w = a, | |
| this.data.backdrop_size.h = i, | |
| this.data.backdrop_size.left = e.offsetLeft, | |
| this.data.backdrop_size.resolution = 2, | |
| this.data.renderer.resize(a, i), | |
| this.resizeImage()) | |
| } | |
| }, | |
| Pause: function() { | |
| window.cancelAnimationFrame(this.drawFrameID), | |
| this.paused = !0 | |
| }, | |
| Resume: function() { | |
| window.cancelAnimationFrame(this.drawFrameID), | |
| this.inited && (this.draw(), | |
| this.paused = !1) | |
| }, | |
| counter: 0, | |
| draw: function() { | |
| var t = this; | |
| this.drawFrameID = window.requestAnimationFrame(function() { | |
| t.draw() | |
| }), | |
| this.updateWindow(), | |
| this.setMouseDelta(), | |
| this.stirPixels(), | |
| this.spriteMouseMove(), | |
| this.animateFrame(), | |
| this.counter++, | |
| this.data.renderer.render(this.data.stage), | |
| this.mouse_calced = !1 | |
| }, | |
| Init: function() { | |
| var t = document.getElementsByTagName("body")[0] | |
| , a = this.model.get("data"); | |
| void 0 == a.image && (a.image = this.defaults.image, | |
| this.model.set("data", a)), | |
| this.data.renderer = e.autoDetectRenderer(800, 600, { | |
| resolution: 2 | |
| }), | |
| this.data.stage = new e.Container, | |
| this.data.composition = new e.Container, | |
| this.data.stage.addChild(this.data.composition), | |
| this.loadImage(), | |
| this.el.appendChild(this.data.renderer.view), | |
| this.data.renderer.view.classList.add("canvas_pixelation"), | |
| this.changeBGColor(), | |
| Cargo.Helper.isMobile() ? (this.data.is_mobile = !0, | |
| window.addEventListener("touchmove", this.mouseCallback), | |
| this.data.mouse_in = !1) : (window.addEventListener("mousemove", this.mouseCallback), | |
| t.addEventListener("mouseenter", this.mouseEnterCallback), | |
| t.addEventListener("mouseleave", this.mouseLeaveCallback)), | |
| window.addEventListener("scroll", this.scrollCallback), | |
| this.data.elasticity = a.elasticity, | |
| this.data.mouse_sensitivity = .05 * Math.pow(.01 * a.mouse_sensitivity, 2), | |
| this.updateWindow(!0), | |
| this.inited = !0, | |
| this.in_viewport ? this.Resume() : this.Pause() | |
| }, | |
| Update: function(t, e) { | |
| var a = this.model.get("data"); | |
| if (e != a[t]) { | |
| if (a[t] = e, | |
| this.model.set("data", a), | |
| "image" == t && (this.data.image_loaded = !1, | |
| this.loadImage()), | |
| "image_delete" == t && a.image == e && (a.image = "", | |
| this.model.set("data", a), | |
| this.loadImage()), | |
| "rows" == t || "columns" == t || "grid_size" == t || "layout_mode" == t || "flip_it" == t) { | |
| if (!this.data.image_loaded) | |
| return; | |
| this.makeSprites() | |
| } | |
| "zoom" == t && (this.setSpritePosition(), | |
| this.resizeImage()), | |
| "elasticity" == t && (this.data.elasticity = e), | |
| "hex" != t && "alpha" != t || this.changeBGColor(), | |
| "mouse_sensitivity" == t && (this.data.mouse_sensitivity = .05 * Math.pow(.01 * a.mouse_sensitivity, 2)) | |
| } | |
| }, | |
| destroy: function() { | |
| this.image_load_queue = []; | |
| var t = document.getElementsByTagName("body")[0]; | |
| window.cancelAnimationFrame(this.drawFrameID), | |
| window.removeEventListener("mousemove", this.mouseCallback), | |
| window.removeEventListener("touchmove", this.mouseCallback), | |
| t.removeEventListener("mouseenter", this.mouseEnterCallback), | |
| t.removeEventListener("mouseleave", this.mouseLeaveCallback), | |
| window.removeEventListener("scroll", this.scrollCallback), | |
| this.data.stage = null, | |
| this.data.renderer.destroy(), | |
| this.loadImage = null, | |
| this.data = null, | |
| this.destroyed = !0 | |
| } | |
| }) | |
| }), | |
| Backdrop.Data.require_loaded = !0; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment