function Config() {} function startup() { game = new Phaser.Game(Config.WIDTH, Config.HEIGHT, Phaser.CANVAS, "gameArea"), game.state.add("Boot", App.BootState), game.state.add("Preloader", App.PreloaderState), game.state.add("MainMenu", App.MainMenuState), game.state.add("LevelSelect", App.LevelSelectState), game.state.add("Gameplay", App.GameplayState), game.state.add("GameComplete", App.GameCompleteState), game.state.start("Boot") } App.Commands = Class.extend({ init: function() {}, gameStart: function() { SG_Hooks.start(), Config.TEST_GAME_COMPLETE ? cmd.gameComplete() : cookies.isNewGame ? cmd.levelStart(Config.START_LEVEL) : game.state.start("LevelSelect") }, levelStart: function(a) { data.curLevel = data.levels[a], data.levelStartTime = game.time.now, data.pauseTime = 0, game.state.start("Gameplay") }, levelComplete: function() { SG_Hooks.levelUp(data.curLevel.id + 1, 1000), game.state.getCurrentState().levelComplete(), data.curLevel.complete(), cookies.levelComplete(), stateSlider.levelComplete(); }, gameComplete: function() { SG_Hooks.gameOver(data.curLevel.id + 1, 1000); fader.fade(this.doGameComplete, this); }, doGameComplete: function() { game.state.start("GameComplete") } }), Config.VERSION = "0.99", Config.WIDTH = 640, Config.HEIGHT = 712, Config.FONT_LEVEL_SELECT_ID = "Arial", Config.FONT_GAMEPLAY_LEVEL_ID = "Titan One", Config.TOUCH_BOUNDS = { x: 0, y: 100, width: Config.WIDTH, height: Config.HEIGHT - 100 }, Config.BITMAP_LINES = !0, Config.USE_PARTICLES = !0, Config.ANIMATION = !0, Config.SOUNDS_ENABLED = !1, Config.TRANSPARENT = !1, Config.START_LEVEL = 0, Config.TEST_GAME_COMPLETE = !1, Config.SHOW_FPS = !0, Config.OPEN_ALL_LEVELS = !0, Config.DEBUG_PHYSICS = !1, Config.ENABLE_CHEAT = !0, Config.RELEASE = !0, Config.RELEASE && (Config.ANIMATION = !0, Config.SOUNDS_ENABLED = !0, Config.TRANSPARENT = !1, Config.START_LEVEL = 0, Config.TEST_GAME_COMPLETE = !1, Config.SHOW_FPS = !1, Config.OPEN_ALL_LEVELS = !1, Config.DEBUG_PHYSICS = !1, Config.ENABLE_CHEAT = !1), App.Cookies = Class.extend({ init: function() { this.gameStorageKey = "doodleconnect", this.initSound(), this.isNewGame = !0, this.initLevels() }, isSupported: function() { var a = "test", b = window.sessionStorage; try { return b.setItem(a, "1"), b.removeItem(a), !0 } catch (c) { return !1 } }, getStorage: function(a) { return localStorage[this.gameStorageKey + "." + a] }, setStorage: function(a, b) { this.isSupported() && (localStorage[this.gameStorageKey + "." + a] = b) }, initSound: function() { Config.SOUNDS_ENABLED = "false" == this.getStorage("soundEnabled") ? !1 : !0 }, saveSound: function() { this.setStorage("soundEnabled", Config.SOUNDS_ENABLED) }, initLevels: function() { if (void 0 != this.getStorage("levels")) for (var a = 0; a < data.levels.length; a++) { var b = data.levels[a]; "true" == this.getStorage("levels." + a + ".isCompleted") && (b.isOpen = !0, b.isCompleted = !0, this.isNewGame = !1) } this.updateOpenLevels() }, updateOpenLevels: function() { var a, b; if (Config.OPEN_ALL_LEVELS) for (a = 0; a < data.levels.length; a++) b = data.levels[a], b.isOpen = !0; else for (a = 0; a < data.levels.length; a++) if (b = data.levels[a], !b.isCompleted) { b.isOpen = !0; break } }, levelComplete: function() { this.setStorage("levels", "true"); var a = data.curLevel.id; this.setStorage("levels." + a + ".isCompleted", "true"), this.isNewGame = !1, this.updateOpenLevels() }, clear: function() { localStorage.clear(), this.isNewGame = !0, this.uncompleteLevels(), this.updateOpenLevels() }, uncompleteLevels: function() { for (var a = 0; a < data.levels.length; a++) { var b = data.levels[a]; b.reset() } } }), App.Data = Class.extend({ init: function(a) { this.lang = a, this.texts = JSON.parse(game.cache.getText("textData")), this.curLevel = null, this.levelStartTime = 0, this.levelStartTime = 0, this.pauseTime = 0, this.pausedByUser = !1, this.initLevels(), this.sndPiano = game.add.audio("sndPiano"); for (var b = 0; 24 > b; b++) this.sndPiano.addMarker("note" + b, b, 1); this.atlasName = "pics" }, getAtlasKey: function(a) { return this.atlasName + "/" + a + "_0000" }, addAtlasSprite: function(a, b) { var c = 0, d = 0, e = game.world; return b && (void 0 != b.x && (c = b.x), void 0 != b.y && (d = b.y), void 0 != b.parent && (e = b.parent)), game.add.sprite(c, d, this.atlasName, this.getAtlasKey(a), e) }, initLevels: function() { this.levels = [], this.addLevel({ name: "P1", items: [{ id: 0, x: 160, y: 240 }, { id: 1, x: 480, y: 240 }, { id: 2, x: 160, y: 560 }, { id: 3, x: 480, y: 560 }], links: [{ p1: 3, p2: 2 }, { p1: 1, p2: 3 }, { p1: 0, p2: 1 }, { p1: 2, p2: 0 }], decor: { name: "pic1", x: 239, y: 333 } }), this.addLevel({ name: "Star", items: [{ id: 0, x: 80, y: 320 }, { id: 1, x: 323, y: 161 }, { id: 2, x: 160, y: 600 }, { id: 3, x: 480, y: 600 }, { id: 4, x: 560, y: 320 }], links: [{ p1: 3, p2: 0 }, { p1: 1, p2: 3 }, { p1: 2, p2: 1 }, { p1: 4, p2: 2 }, { p1: 0, p2: 4 }], decor: { name: "pic2", x: 117, y: 153 } }), this.addLevel({ name: "Three Rombs", items: [{ id: 0, x: 80, y: 389 }, { id: 1, x: 320, y: 629 }, { id: 2, x: 560, y: 389 }, { id: 3, x: 480, y: 389 }, { id: 4, x: 320, y: 549 }, { id: 5, x: 160, y: 389 }, { id: 6, x: 320, y: 149 }, { id: 7, x: 320, y: 229 }, { id: 8, x: 320, y: 469 }, { id: 9, x: 400, y: 389 }, { id: 10, x: 240, y: 389 }, { id: 11, x: 320, y: 309 }], links: [{ p1: 2, p2: 6 }, { p1: 1, p2: 2 }, { p1: 0, p2: 1 }, { p1: 6, p2: 0 }, { p1: 7, p2: 6 }, { p1: 3, p2: 7 }, { p1: 4, p2: 3 }, { p1: 5, p2: 4 }, { p1: 7, p2: 5 }, { p1: 11, p2: 7 }, { p1: 9, p2: 11 }, { p1: 8, p2: 9 }, { p1: 10, p2: 8 }, { p1: 11, p2: 10 }], decor: { name: "pic3", x: 97, y: 495 } }), this.addLevel({ name: "Possible Quad", items: [{ id: 0, x: 320, y: 361 }, { id: 1, x: 120, y: 160 }, { id: 2, x: 120, y: 560 }, { id: 3, x: 520, y: 560 }, { id: 4, x: 520, y: 160 }], links: [{ p1: 1, p2: 4 }, { p1: 0, p2: 3 }, { p1: 0, p2: 2 }, { p1: 2, p2: 1 }, { p1: 4, p2: 3 }, { p1: 0, p2: 4 }, { p1: 1, p2: 0 }], decor: { name: "pic4", x: 191, y: 494 } }), this.addLevel({ name: "Resistor", items: [{ id: 0, x: 440, y: 332 }, { id: 1, x: 200, y: 332 }, { id: 2, x: 560, y: 332 }, { id: 3, x: 80, y: 332 }, { id: 4, x: 200, y: 172 }, { id: 5, x: 440, y: 172 }, { id: 6, x: 200, y: 492 }, { id: 7, x: 440, y: 492 }], links: [{ p1: 0, p2: 2 }, { p1: 1, p2: 0 }, { p1: 1, p2: 3 }, { p1: 1, p2: 4 }, { p1: 6, p2: 1 }, { p1: 7, p2: 6 }, { p1: 0, p2: 7 }, { p1: 5, p2: 0 }, { p1: 4, p2: 5 }], decor: { name: "pic5", x: 388, y: 518 } }), this.addLevel({ name: "Pyramid", items: [{ id: 0, x: 560, y: 560 }, { id: 1, x: 320, y: 560 }, { id: 2, x: 80, y: 560 }, { id: 3, x: 440, y: 400 }, { id: 4, x: 320, y: 240 }, { id: 5, x: 200, y: 400 }], links: [{ p1: 1, p2: 5 }, { p1: 3, p2: 1 }, { p1: 5, p2: 3 }, { p1: 3, p2: 4 }, { p1: 0, p2: 3 }, { p1: 1, p2: 0 }, { p1: 2, p2: 1 }, { p1: 5, p2: 2 }, { p1: 4, p2: 5 }], decor: { name: "pic6", x: 424, y: 131 } }), this.addLevel({ name: "House", items: [{ id: 0, x: 100, y: 350 }, { id: 1, x: 300, y: 150 }, { id: 2, x: 101, y: 601 }, { id: 3, x: 548, y: 600 }, { id: 4, x: 550, y: 350 }], links: [{ p1: 4, p2: 0 }, { p1: 2, p2: 4 }, { p1: 0, p2: 3 }, { p1: 2, p2: 0 }, { p1: 3, p2: 2 }, { p1: 4, p2: 3 }, { p1: 1, p2: 4 }, { p1: 0, p2: 1 }], decor: { name: "pic7", x: 198, y: 200 } }), this.addLevel({ name: "Triangle Down", items: [{ id: 0, x: 387, y: 440 }, { id: 1, x: 480, y: 200 }, { id: 2, x: 160, y: 200 }, { id: 3, x: 320, y: 560 }, { id: 4, x: 253, y: 440 }, { id: 5, x: 160, y: 320 }, { id: 6, x: 480, y: 320 }], links: [{ p1: 0, p2: 6 }, { p1: 3, p2: 0 }, { p1: 4, p2: 3 }, { p1: 5, p2: 4 }, { p1: 0, p2: 4 }, { p1: 6, p2: 5 }, { p1: 2, p2: 6 }, { p1: 1, p2: 5 }, { p1: 1, p2: 6 }, { p1: 2, p2: 5 }], decor: { name: "pic8", x: 386, y: 494 } }), this.addLevel({ name: "Star2", items: [{ id: 0, x: 560, y: 480 }, { id: 1, x: 480, y: 200 }, { id: 2, x: 160, y: 200 }, { id: 3, x: 80, y: 480 }, { id: 4, x: 320, y: 680 }, { id: 5, x: 80, y: 320 }, { id: 6, x: 323, y: 161 }, { id: 7, x: 160, y: 600 }, { id: 8, x: 480, y: 600 }, { id: 9, x: 560, y: 320 }], links: [{ p1: 2, p2: 5 }, { p1: 6, p2: 2 }, { p1: 1, p2: 6 }, { p1: 9, p2: 1 }, { p1: 0, p2: 9 }, { p1: 8, p2: 0 }, { p1: 3, p2: 5 }, { p1: 7, p2: 3 }, { p1: 4, p2: 7 }, { p1: 4, p2: 8 }, { p1: 7, p2: 8 }, { p1: 8, p2: 5 }, { p1: 6, p2: 8 }, { p1: 7, p2: 6 }, { p1: 9, p2: 7 }, { p1: 5, p2: 9 }], decor: { name: "pic9", x: 265, y: 325 } }), this.addLevel({ name: "Rocket", items: [{ id: 0, x: 107, y: 640 }, { id: 1, x: 107, y: 200 }, { id: 2, x: 107, y: 400 }, { id: 3, x: 307, y: 400 }, { id: 4, x: 427, y: 480 }, { id: 5, x: 427, y: 320 }, { id: 6, x: 547, y: 400 }], links: [{ p1: 1, p2: 5 }, { p1: 3, p2: 2 }, { p1: 2, p2: 1 }, { p1: 0, p2: 2 }, { p1: 4, p2: 0 }, { p1: 3, p2: 4 }, { p1: 5, p2: 3 }, { p1: 4, p2: 6 }, { p1: 5, p2: 4 }, { p1: 6, p2: 5 }], decor: { name: "pic10", x: 418, y: 499 } }), this.addLevel({ name: "P3", items: [{ id: 0, x: 320, y: 360 }, { id: 1, x: 560, y: 360 }, { id: 2, x: 80, y: 360 }, { id: 3, x: 440, y: 480 }, { id: 4, x: 200, y: 480 }, { id: 5, x: 440, y: 240 }, { id: 6, x: 200, y: 240 }], links: [{ p1: 0, p2: 5 }, { p1: 3, p2: 0 }, { p1: 0, p2: 4 }, { p1: 6, p2: 0 }, { p1: 1, p2: 3 }, { p1: 5, p2: 1 }, { p1: 2, p2: 4 }, { p1: 6, p2: 2 }, { p1: 4, p2: 6 }, { p1: 3, p2: 4 }, { p1: 5, p2: 3 }, { p1: 6, p2: 5 }], decor: { name: "pic11", x: 78, y: 527 } }), this.addLevel({ name: "Romb", items: [{ id: 0, x: 120, y: 560 }, { id: 1, x: 520, y: 560 }, { id: 2, x: 520, y: 160 }, { id: 3, x: 120, y: 160 }, { id: 4, x: 240, y: 440 }, { id: 5, x: 400, y: 440 }, { id: 6, x: 400, y: 280 }, { id: 7, x: 240, y: 280 }], links: [{ p1: 5, p2: 7 }, { p1: 5, p2: 1 }, { p1: 2, p2: 3 }, { p1: 1, p2: 2 }, { p1: 0, p2: 1 }, { p1: 3, p2: 0 }, { p1: 7, p2: 3 }, { p1: 5, p2: 4 }, { p1: 6, p2: 5 }, { p1: 7, p2: 6 }, { p1: 4, p2: 7 }], decor: { name: "pic12", x: 439, y: 573 } }), this.addLevel({ name: "P8", items: [{ id: 0, x: 560, y: 400 }, { id: 1, x: 320, y: 640 }, { id: 2, x: 80, y: 400 }, { id: 3, x: 320, y: 160 }, { id: 4, x: 440, y: 400 }, { id: 5, x: 320, y: 520 }, { id: 6, x: 200, y: 400 }, { id: 7, x: 320, y: 280 }, { id: 8, x: 80, y: 160 }, { id: 9, x: 80, y: 640 }, { id: 10, x: 560, y: 640 }, { id: 11, x: 560, y: 160 }, { id: 12, x: 200, y: 280 }, { id: 13, x: 440, y: 280 }, { id: 14, x: 200, y: 520 }, { id: 15, x: 440, y: 520 }], links: [{ p1: 5, p2: 6 }, { p1: 4, p2: 5 }, { p1: 7, p2: 4 }, { p1: 6, p2: 7 }, { p1: 14, p2: 2 }, { p1: 1, p2: 14 }, { p1: 15, p2: 1 }, { p1: 0, p2: 15 }, { p1: 13, p2: 0 }, { p1: 3, p2: 13 }, { p1: 12, p2: 3 }, { p1: 2, p2: 12 }, { p1: 3, p2: 8 }, { p1: 11, p2: 3 }, { p1: 0, p2: 11 }, { p1: 10, p2: 0 }, { p1: 1, p2: 10 }, { p1: 9, p2: 1 }, { p1: 2, p2: 9 }, { p1: 8, p2: 2 }, { p1: 6, p2: 12 }, { p1: 14, p2: 6 }, { p1: 5, p2: 14 }, { p1: 15, p2: 5 }, { p1: 4, p2: 15 }, { p1: 13, p2: 4 }, { p1: 7, p2: 13 }, { p1: 12, p2: 7 }], decor: { name: "pic13", x: 272, y: 315 } }), this.addLevel({ name: "House3", items: [{ id: 0, x: 240, y: 280 }, { id: 1, x: 400, y: 280 }, { id: 2, x: 80, y: 600 }, { id: 3, x: 80, y: 400 }, { id: 4, x: 560, y: 600 }, { id: 5, x: 560, y: 400 }, { id: 6, x: 240, y: 400 }, { id: 7, x: 400, y: 400 }, { id: 8, x: 240, y: 600 }, { id: 9, x: 400, y: 600 }], links: [{ p1: 1, p2: 5 }, { p1: 6, p2: 1 }, { p1: 0, p2: 7 }, { p1: 3, p2: 0 }, { p1: 8, p2: 7 }, { p1: 6, p2: 9 }, { p1: 5, p2: 7 }, { p1: 4, p2: 5 }, { p1: 9, p2: 4 }, { p1: 2, p2: 8 }, { p1: 3, p2: 2 }, { p1: 6, p2: 3 }, { p1: 8, p2: 6 }, { p1: 9, p2: 8 }, { p1: 7, p2: 9 }], decor: { name: "pic14", x: 428, y: 109 } }), this.addLevel({ name: "P6", items: [{ id: 0, x: 380, y: 460 }, { id: 1, x: 260, y: 460 }, { id: 2, x: 380, y: 260 }, { id: 3, x: 260, y: 260 }, { id: 4, x: 440, y: 360 }, { id: 5, x: 320, y: 560 }, { id: 6, x: 200, y: 360 }, { id: 7, x: 320, y: 160 }, { id: 8, x: 560, y: 360 }, { id: 9, x: 440, y: 160 }, { id: 10, x: 440, y: 560 }, { id: 11, x: 80, y: 360 }, { id: 12, x: 320, y: 360 }, { id: 13, x: 200, y: 160 }, { id: 14, x: 200, y: 560 }], links: [{ p1: 0, p2: 10 }, { p1: 12, p2: 0 }, { p1: 1, p2: 14 }, { p1: 12, p2: 1 }, { p1: 1, p2: 6 }, { p1: 5, p2: 1 }, { p1: 0, p2: 5 }, { p1: 4, p2: 0 }, { p1: 2, p2: 4 }, { p1: 7, p2: 2 }, { p1: 2, p2: 9 }, { p1: 12, p2: 2 }, { p1: 3, p2: 7 }, { p1: 6, p2: 3 }, { p1: 3, p2: 13 }, { p1: 12, p2: 3 }, { p1: 8, p2: 10 }, { p1: 9, p2: 8 }, { p1: 14, p2: 11 }, { p1: 11, p2: 13 }], decor: { name: "pic15", x: 374, y: 553 } }), this.addLevel({ name: "P14", items: [{ id: 0, x: 440, y: 520 }, { id: 1, x: 200, y: 520 }, { id: 2, x: 440, y: 360 }, { id: 3, x: 200, y: 360 }, { id: 4, x: 440, y: 200 }, { id: 5, x: 440, y: 680 }, { id: 6, x: 560, y: 600 }, { id: 7, x: 560, y: 440 }, { id: 8, x: 560, y: 280 }, { id: 9, x: 320, y: 440 }, { id: 10, x: 200, y: 680 }, { id: 11, x: 320, y: 600 }, { id: 12, x: 80, y: 600 }, { id: 13, x: 80, y: 440 }, { id: 14, x: 200, y: 200 }, { id: 15, x: 320, y: 280 }, { id: 16, x: 80, y: 280 }], links: [{ p1: 3, p2: 15 }, { p1: 13, p2: 3 }, { p1: 3, p2: 16 }, { p1: 9, p2: 3 }, { p1: 2, p2: 8 }, { p1: 9, p2: 2 }, { p1: 2, p2: 15 }, { p1: 7, p2: 2 }, { p1: 0, p2: 7 }, { p1: 11, p2: 0 }, { p1: 0, p2: 6 }, { p1: 9, p2: 0 }, { p1: 1, p2: 9 }, { p1: 12, p2: 1 }, { p1: 1, p2: 13 }, { p1: 11, p2: 1 }, { p1: 5, p2: 6 }, { p1: 11, p2: 5 }, { p1: 4, p2: 8 }, { p1: 15, p2: 4 }, { p1: 8, p2: 15 }, { p1: 7, p2: 8 }, { p1: 6, p2: 7 }, { p1: 11, p2: 6 }, { p1: 10, p2: 11 }, { p1: 12, p2: 10 }, { p1: 14, p2: 15 }, { p1: 16, p2: 14 }, { p1: 12, p2: 13 }, { p1: 11, p2: 12 }, { p1: 9, p2: 11 }, { p1: 16, p2: 13 }, { p1: 15, p2: 16 }, { p1: 9, p2: 15 }], decor: { name: "pic16", x: 246, y: 108 } }), this.addLevel({ name: "Arrow Quad", items: [{ id: 0, x: 480, y: 560 }, { id: 1, x: 160, y: 560 }, { id: 2, x: 480, y: 280 }, { id: 3, x: 160, y: 280 }], links: [{ p1: 1, p2: 3, arrow: !0 }, { p1: 0, p2: 1, arrow: !0 }, { p1: 2, p2: 0, arrow: !0 }, { p1: 3, p2: 2, arrow: !0 }], decor: { name: "pic17", x: 256, y: 301 } }), this.addLevel({ name: "Spiral", items: [{ id: 0, x: 560, y: 560 }, { id: 1, x: 240, y: 320 }, { id: 2, x: 240, y: 480 }, { id: 3, x: 480, y: 480 }, { id: 4, x: 160, y: 560 }, { id: 5, x: 480, y: 240 }, { id: 6, x: 160, y: 240 }, { id: 7, x: 80, y: 160 }, { id: 8, x: 80, y: 640 }, { id: 9, x: 560, y: 640 }, { id: 10, x: 560, y: 160 }], links: [{ p1: 2, p2: 1, arrow: !0 }, { p1: 10, p2: 7, arrow: !0 }, { p1: 3, p2: 2 }, { p1: 5, p2: 3 }, { p1: 6, p2: 5 }, { p1: 0, p2: 10 }, { p1: 4, p2: 6 }, { p1: 0, p2: 4 }, { p1: 9, p2: 0 }, { p1: 8, p2: 7 }, { p1: 9, p2: 8 }], decor: { name: "pic18", x: 284, y: 278 } }), this.addLevel({ name: "Arrow Romb", items: [{ id: 0, x: 280, y: 600 }, { id: 1, x: 360, y: 200 }, { id: 2, x: 480, y: 400 }, { id: 3, x: 160, y: 400 }, { id: 4, x: 480, y: 600 }, { id: 5, x: 160, y: 600 }, { id: 6, x: 480, y: 200 }, { id: 7, x: 160, y: 200 }], links: [{ p1: 2, p2: 1, arrow: !0 }, { p1: 0, p2: 3, arrow: !0 }, { p1: 2, p2: 0 }, { p1: 3, p2: 1 }, { p1: 3, p2: 2 }, { p1: 5, p2: 3 }, { p1: 0, p2: 5 }, { p1: 4, p2: 0 }, { p1: 2, p2: 4 }, { p1: 6, p2: 2 }, { p1: 1, p2: 6 }, { p1: 7, p2: 1 }, { p1: 3, p2: 7 }], decor: { name: "pic19", x: 196, y: 399 } }), this.addLevel({ name: "House2", items: [{ id: 0, x: 320, y: 560 }, { id: 1, x: 320, y: 360 }, { id: 2, x: 520, y: 560 }, { id: 3, x: 120, y: 560 }, { id: 4, x: 520, y: 360 }, { id: 5, x: 120, y: 360 }, { id: 6, x: 320, y: 200 }], links: [{ p1: 5, p2: 6, arrow: !0 }, { p1: 4, p2: 6, arrow: !0 }, { p1: 1, p2: 4, arrow: !0 }, { p1: 1, p2: 5, arrow: !0 }, { p1: 1, p2: 0 }, { p1: 0, p2: 5 }, { p1: 4, p2: 0 }, { p1: 2, p2: 4 }, { p1: 0, p2: 2 }, { p1: 3, p2: 0 }, { p1: 5, p2: 3 }, { p1: 6, p2: 1 }], decor: { name: "pic20", x: 409, y: 132 } }), this.addLevel({ name: "Jail", items: [{ id: 0, x: 320, y: 160 }, { id: 1, x: 320, y: 640 }, { id: 2, x: 320, y: 560 }, { id: 3, x: 320, y: 240 }, { id: 4, x: 440, y: 400 }, { id: 5, x: 200, y: 400 }, { id: 6, x: 520, y: 560 }, { id: 7, x: 120, y: 560 }, { id: 8, x: 520, y: 240 }, { id: 9, x: 120, y: 240 }], links: [{ p1: 4, p2: 2, arrow: !0 }, { p1: 3, p2: 4, arrow: !0 }, { p1: 5, p2: 3, arrow: !0 }, { p1: 2, p2: 5, arrow: !0 }, { p1: 9, p2: 7, arrow: !0 }, { p1: 6, p2: 8, arrow: !0 }, { p1: 9, p2: 6 }, { p1: 7, p2: 8 }, { p1: 1, p2: 6 }, { p1: 7, p2: 1 }, { p1: 2, p2: 6 }, { p1: 7, p2: 2 }, { p1: 0, p2: 9 }, { p1: 8, p2: 0 }, { p1: 3, p2: 8 }, { p1: 9, p2: 3 }], decor: { name: "pic21", x: 423, y: 566 } }), this.addLevel({ name: "P4 copy", items: [{ id: 0, x: 560, y: 600 }, { id: 1, x: 400, y: 600 }, { id: 2, x: 240, y: 600 }, { id: 3, x: 80, y: 600 }, { id: 4, x: 480, y: 480 }, { id: 5, x: 320, y: 480 }, { id: 6, x: 160, y: 480 }, { id: 7, x: 400, y: 360 }, { id: 8, x: 320, y: 240 }, { id: 9, x: 240, y: 360 }], links: [{ p1: 7, p2: 9, arrow: !0 }, { p1: 5, p2: 4, arrow: !0 }, { p1: 6, p2: 5, arrow: !0 }, { p1: 1, p2: 0, arrow: !0 }, { p1: 2, p2: 1, arrow: !0 }, { p1: 3, p2: 2, arrow: !0 }, { p1: 4, p2: 0 }, { p1: 1, p2: 4 }, { p1: 5, p2: 1 }, { p1: 2, p2: 5 }, { p1: 6, p2: 2 }, { p1: 3, p2: 6 }, { p1: 7, p2: 4 }, { p1: 5, p2: 7 }, { p1: 5, p2: 9 }, { p1: 9, p2: 6 }, { p1: 7, p2: 8 }, { p1: 8, p2: 9 }], decor: { name: "pic22", x: 372, y: 108 } }), this.addLevel({ name: "Romb2", items: [{ id: 0, x: 160, y: 480 }, { id: 1, x: 480, y: 480 }, { id: 2, x: 480, y: 320 }, { id: 3, x: 80, y: 400 }, { id: 4, x: 160, y: 320 }, { id: 5, x: 320, y: 640 }, { id: 6, x: 320, y: 160 }, { id: 7, x: 560, y: 400 }, { id: 8, x: 320, y: 520 }, { id: 9, x: 320, y: 280 }], links: [{ p1: 8, p2: 5, arrow: !0 }, { p1: 9, p2: 8, arrow: !0 }, { p1: 6, p2: 9, arrow: !0 }, { p1: 2, p2: 1 }, { p1: 5, p2: 1 }, { p1: 0, p2: 5 }, { p1: 6, p2: 2 }, { p1: 4, p2: 6 }, { p1: 2, p2: 9 }, { p1: 7, p2: 2 }, { p1: 1, p2: 7 }, { p1: 8, p2: 1 }, { p1: 4, p2: 0 }, { p1: 4, p2: 9 }, { p1: 3, p2: 4 }, { p1: 0, p2: 3 }, { p1: 8, p2: 0 }], decor: { name: "pic23", x: 418, y: 99 } }), this.addLevel({ name: "P13 copy", items: [{ id: 0, x: 440, y: 480 }, { id: 1, x: 480, y: 560 }, { id: 2, x: 520, y: 480 }, { id: 3, x: 380, y: 520 }, { id: 4, x: 200, y: 480 }, { id: 5, x: 280, y: 480 }, { id: 6, x: 240, y: 560 }, { id: 7, x: 160, y: 560 }, { id: 8, x: 120, y: 480 }, { id: 9, x: 320, y: 240 }, { id: 10, x: 240, y: 240 }, { id: 11, x: 280, y: 320 }, { id: 12, x: 380, y: 280 }, { id: 13, x: 200, y: 640 }, { id: 14, x: 80, y: 400 }, { id: 15, x: 200, y: 400 }, { id: 16, x: 440, y: 640 }, { id: 17, x: 560, y: 400 }, { id: 18, x: 480, y: 400 }, { id: 19, x: 400, y: 400 }, { id: 20, x: 320, y: 400 }, { id: 21, x: 440, y: 160 }, { id: 22, x: 360, y: 160 }, { id: 23, x: 280, y: 160 }, { id: 24, x: 200, y: 160 }], links: [{ p1: 20, p2: 11, arrow: !0 }, { p1: 20, p2: 19, arrow: !0 }, { p1: 20, p2: 15, arrow: !0 }, { p1: 23, p2: 10 }, { p1: 3, p2: 1 }, { p1: 19, p2: 3 }, { p1: 2, p2: 18 }, { p1: 0, p2: 2 }, { p1: 18, p2: 0 }, { p1: 0, p2: 19 }, { p1: 1, p2: 0 }, { p1: 2, p2: 17 }, { p1: 1, p2: 2 }, { p1: 16, p2: 1 }, { p1: 3, p2: 16 }, { p1: 20, p2: 3 }, { p1: 18, p2: 17 }, { p1: 19, p2: 18 }, { p1: 6, p2: 4 }, { p1: 7, p2: 6 }, { p1: 4, p2: 7 }, { p1: 4, p2: 5 }, { p1: 8, p2: 4 }, { p1: 15, p2: 5 }, { p1: 8, p2: 15 }, { p1: 7, p2: 13 }, { p1: 8, p2: 7 }, { p1: 14, p2: 8 }, { p1: 5, p2: 20 }, { p1: 6, p2: 5 }, { p1: 13, p2: 6 }, { p1: 12, p2: 11 }, { p1: 22, p2: 12 }, { p1: 9, p2: 10 }, { p1: 22, p2: 21 }, { p1: 23, p2: 22 }, { p1: 24, p2: 23 }, { p1: 23, p2: 9 }, { p1: 9, p2: 22 }, { p1: 11, p2: 9 }, { p1: 10, p2: 24 }, { p1: 11, p2: 10 }, { p1: 12, p2: 21 }, { p1: 20, p2: 12 }, { p1: 15, p2: 14 }], decor: { name: "pic24", x: 385, y: 186 } }), this.addLevel({ name: "Doit", items: [{ id: 0, x: 320, y: 240 }, { id: 1, x: 480, y: 240 }, { id: 2, x: 480, y: 560 }, { id: 3, x: 160, y: 560 }, { id: 4, x: 160, y: 240 }, { id: 5, x: 240, y: 480 }, { id: 6, x: 400, y: 480 }, { id: 7, x: 400, y: 320 }, { id: 8, x: 240, y: 320 }], links: [{ p1: 4, p2: 3, arrow: !0 }, { p1: 1, p2: 2, arrow: !0 }, { p1: 5, p2: 8, arrow: !0 }, { p1: 6, p2: 5, arrow: !0 }, { p1: 7, p2: 6, arrow: !0 }, { p1: 7, p2: 8, arrow: !0 }, { p1: 0, p2: 7 }, { p1: 0, p2: 8 }, { p1: 8, p2: 6 }, { p1: 5, p2: 7 }, { p1: 1, p2: 7 }, { p1: 6, p2: 2 }, { p1: 3, p2: 5 }, { p1: 8, p2: 4 }], decor: { name: "pic25", x: 243, y: 489 } }), this.addLevel({ name: "P9 copy", items: [{ id: 0, x: 421, y: 400 }, { id: 1, x: 221, y: 400 }, { id: 2, x: 320, y: 520 }, { id: 3, x: 320, y: 280 }, { id: 4, x: 600, y: 400 }, { id: 5, x: 40, y: 400 }, { id: 6, x: 520, y: 520 }, { id: 7, x: 120, y: 520 }, { id: 8, x: 520, y: 280 }, { id: 9, x: 120, y: 280 }], links: [{ p1: 8, p2: 3, arrow: !0 }, { p1: 9, p2: 3, arrow: !0 }, { p1: 2, p2: 6, arrow: !0 }, { p1: 2, p2: 7, arrow: !0 }, { p1: 0, p2: 6 }, { p1: 0, p2: 2 }, { p1: 0, p2: 8 }, { p1: 3, p2: 0 }, { p1: 1, p2: 7 }, { p1: 1, p2: 9 }, { p1: 1, p2: 3 }, { p1: 2, p2: 1 }, { p1: 3, p2: 2 }, { p1: 6, p2: 8 }, { p1: 4, p2: 6 }, { p1: 8, p2: 4 }, { p1: 5, p2: 7 }, { p1: 9, p2: 5 }, { p1: 7, p2: 9 }], decor: { name: "pic26", x: 259, y: 58 } }), this.addLevel({ name: "P11 copy", items: [{ id: 0, x: 320, y: 293 }, { id: 1, x: 380, y: 260 }, { id: 2, x: 260, y: 260 }, { id: 3, x: 440, y: 572 }, { id: 4, x: 531, y: 520 }, { id: 5, x: 200, y: 572 }, { id: 6, x: 109, y: 520 }, { id: 7, x: 320, y: 640 }, { id: 8, x: 600, y: 640 }, { id: 9, x: 40, y: 640 }, { id: 10, x: 320, y: 160 }, { id: 11, x: 200, y: 640 }, { id: 12, x: 440, y: 640 }, { id: 13, x: 440, y: 360 }, { id: 14, x: 200, y: 360 }], links: [{ p1: 1, p2: 2, arrow: !0 }, { p1: 13, p2: 14, arrow: !0 }, { p1: 11, p2: 9, arrow: !0 }, { p1: 7, p2: 11, arrow: !0 }, { p1: 12, p2: 7, arrow: !0 }, { p1: 8, p2: 12, arrow: !0 }, { p1: 4, p2: 13 }, { p1: 8, p2: 4 }, { p1: 6, p2: 14 }, { p1: 9, p2: 6 }, { p1: 1, p2: 10 }, { p1: 13, p2: 1 }, { p1: 2, p2: 10 }, { p1: 14, p2: 2 }, { p1: 3, p2: 13 }, { p1: 12, p2: 3 }, { p1: 5, p2: 14 }, { p1: 11, p2: 5 }, { p1: 7, p2: 13 }, { p1: 7, p2: 14 }, { p1: 0, p2: 1 }, { p1: 14, p2: 0 }, { p1: 0, p2: 2 }, { p1: 13, p2: 0 }, { p1: 3, p2: 4 }, { p1: 7, p2: 3 }, { p1: 5, p2: 6 }, { p1: 7, p2: 5 }, { p1: 12, p2: 4 }, { p1: 11, p2: 6 }], decor: { name: "pic27", x: 378, y: 101 } }), this.addLevel({ name: "P10", items: [{ id: 0, x: 480, y: 400 }, { id: 1, x: 560, y: 400 }, { id: 2, x: 560, y: 480 }, { id: 3, x: 560, y: 560 }, { id: 4, x: 480, y: 560 }, { id: 5, x: 400, y: 480 }, { id: 6, x: 400, y: 560 }, { id: 7, x: 320, y: 560 }, { id: 8, x: 240, y: 560 }, { id: 9, x: 240, y: 480 }, { id: 10, x: 240, y: 320 }, { id: 11, x: 400, y: 320 }, { id: 12, x: 400, y: 400 }, { id: 13, x: 320, y: 400 }, { id: 14, x: 240, y: 400 }, { id: 15, x: 160, y: 400 }, { id: 16, x: 80, y: 400 }, { id: 17, x: 80, y: 320 }, { id: 18, x: 400, y: 240 }, { id: 19, x: 320, y: 240 }, { id: 20, x: 160, y: 240 }, { id: 21, x: 80, y: 240 }, { id: 22, x: 240, y: 240 }], links: [{ p1: 9, p2: 14, arrow: !0 }, { p1: 10, p2: 14, arrow: !0 }, { p1: 14, p2: 15, arrow: !0 }, { p1: 14, p2: 13, arrow: !0 }, { p1: 12, p2: 11, arrow: !0 }, { p1: 0, p2: 12, arrow: !0 }, { p1: 13, p2: 12, arrow: !0 }, { p1: 12, p2: 5, arrow: !0 }, { p1: 5, p2: 4 }, { p1: 0, p2: 5 }, { p1: 2, p2: 0 }, { p1: 4, p2: 2 }, { p1: 7, p2: 9 }, { p1: 5, p2: 7 }, { p1: 13, p2: 5 }, { p1: 9, p2: 13 }, { p1: 13, p2: 10 }, { p1: 11, p2: 13 }, { p1: 19, p2: 11 }, { p1: 10, p2: 19 }, { p1: 15, p2: 17 }, { p1: 10, p2: 15 }, { p1: 20, p2: 10 }, { p1: 17, p2: 20 }, { p1: 4, p2: 6 }, { p1: 3, p2: 4 }, { p1: 2, p2: 3 }, { p1: 1, p2: 2 }, { p1: 0, p2: 1 }, { p1: 6, p2: 5 }, { p1: 7, p2: 6 }, { p1: 8, p2: 7 }, { p1: 9, p2: 8 }, { p1: 18, p2: 11 }, { p1: 19, p2: 18 }, { p1: 22, p2: 19 }, { p1: 17, p2: 21 }, { p1: 16, p2: 17 }, { p1: 15, p2: 16 }, { p1: 22, p2: 10 }, { p1: 20, p2: 22 }, { p1: 21, p2: 20 }], decor: { name: "pic28", x: 410, y: 103 } }), this.addLevel({ name: "Krest", items: [{ id: 0, x: 160, y: 320 }, { id: 1, x: 160, y: 440 }, { id: 2, x: 280, y: 560 }, { id: 3, x: 400, y: 560 }, { id: 4, x: 520, y: 440 }, { id: 5, x: 520, y: 320 }, { id: 6, x: 400, y: 200 }, { id: 7, x: 280, y: 200 }, { id: 8, x: 280, y: 440 }, { id: 9, x: 400, y: 440 }, { id: 10, x: 280, y: 320 }, { id: 11, x: 400, y: 320 }], links: [{ p1: 6, p2: 11, arrow: !0 }, { p1: 9, p2: 3, arrow: !0 }, { p1: 5, p2: 4, arrow: !0 }, { p1: 10, p2: 8, arrow: !0 }, { p1: 11, p2: 9, arrow: !0 }, { p1: 11, p2: 7 }, { p1: 4, p2: 11 }, { p1: 8, p2: 3 }, { p1: 8, p2: 11 }, { p1: 3, p2: 4 }, { p1: 0, p2: 7 }, { p1: 2, p2: 3 }, { p1: 8, p2: 2 }, { p1: 0, p2: 10 }, { p1: 1, p2: 0 }, { p1: 8, p2: 1 }, { p1: 4, p2: 9 }, { p1: 11, p2: 5 }, { p1: 7, p2: 6 }, { p1: 10, p2: 7 }, { p1: 9, p2: 8 }, { p1: 10, p2: 11 }], decor: { name: "pic29", x: 82, y: 485 } }), this.addLevel({ name: "Two Quads", items: [{ id: 0, x: 120, y: 240 }, { id: 1, x: 360, y: 160 }, { id: 2, x: 520, y: 320 }, { id: 3, x: 200, y: 640 }, { id: 4, x: 440, y: 560 }, { id: 5, x: 200, y: 480 }, { id: 6, x: 280, y: 560 }, { id: 7, x: 120, y: 560 }, { id: 8, x: 120, y: 400 }, { id: 9, x: 360, y: 320 }, { id: 10, x: 440, y: 400 }, { id: 11, x: 280, y: 400 }, { id: 12, x: 440, y: 240 }, { id: 13, x: 280, y: 240 }], links: [{ p1: 8, p2: 7, arrow: !0 }, { p1: 6, p2: 7, arrow: !0 }, { p1: 12, p2: 10, arrow: !0 }, { p1: 12, p2: 13, arrow: !0 }, { p1: 11, p2: 10, arrow: !0 }, { p1: 8, p2: 11, arrow: !0 }, { p1: 11, p2: 13, arrow: !0 }, { p1: 6, p2: 11, arrow: !0 }, { p1: 0, p2: 13 }, { p1: 8, p2: 0 }, { p1: 4, p2: 10 }, { p1: 6, p2: 4 }, { p1: 3, p2: 7 }, { p1: 6, p2: 3 }, { p1: 10, p2: 6 }, { p1: 13, p2: 8 }, { p1: 1, p2: 13 }, { p1: 12, p2: 1 }, { p1: 2, p2: 12 }, { p1: 10, p2: 2 }, { p1: 9, p2: 10 }, { p1: 13, p2: 9 }, { p1: 9, p2: 12 }, { p1: 11, p2: 9 }, { p1: 5, p2: 6 }, { p1: 8, p2: 5 }, { p1: 5, p2: 7 }, { p1: 11, p2: 5 }], decor: { name: "pic30", x: 426, y: 514 } }), this.addLevel({ name: "P12 copy", items: [{ id: 0, x: 400, y: 640 }, { id: 1, x: 240, y: 640 }, { id: 2, x: 440, y: 200 }, { id: 3, x: 200, y: 200 }, { id: 4, x: 560, y: 280 }, { id: 5, x: 440, y: 280 }, { id: 6, x: 200, y: 280 }, { id: 7, x: 80, y: 280 }, { id: 8, x: 440, y: 360 }, { id: 9, x: 320, y: 360 }, { id: 10, x: 200, y: 360 }, { id: 11, x: 560, y: 440 }, { id: 12, x: 440, y: 440 }, { id: 13, x: 320, y: 440 }, { id: 14, x: 200, y: 440 }, { id: 15, x: 80, y: 440 }, { id: 16, x: 560, y: 520 }, { id: 17, x: 440, y: 520 }, { id: 18, x: 200, y: 520 }, { id: 19, x: 80, y: 520 }], links: [{ p1: 4, p2: 11, arrow: !0 }, { p1: 15, p2: 7, arrow: !0 }, { p1: 0, p2: 1, arrow: !0 }, { p1: 18, p2: 17, arrow: !0 }, { p1: 16, p2: 12 }, { p1: 2, p2: 4 }, { p1: 5, p2: 2 }, { p1: 3, p2: 6 }, { p1: 7, p2: 3 }, { p1: 0, p2: 16 }, { p1: 19, p2: 1 }, { p1: 13, p2: 17 }, { p1: 18, p2: 13 }, { p1: 9, p2: 12 }, { p1: 9, p2: 14 }, { p1: 9, p2: 5 }, { p1: 6, p2: 9 }, { p1: 10, p2: 7 }, { p1: 15, p2: 10 }, { p1: 6, p2: 7 }, { p1: 10, p2: 6 }, { p1: 14, p2: 10 }, { p1: 8, p2: 4 }, { p1: 11, p2: 8 }, { p1: 5, p2: 4 }, { p1: 8, p2: 5 }, { p1: 12, p2: 8 }, { p1: 11, p2: 16 }, { p1: 12, p2: 11 }, { p1: 12, p2: 17 }, { p1: 13, p2: 12 }, { p1: 14, p2: 13 }, { p1: 14, p2: 18 }, { p1: 15, p2: 14 }, { p1: 19, p2: 15 }, { p1: 18, p2: 19 }, { p1: 16, p2: 17 }], decor: { name: "pic31", x: 200, y: 146 } }), this.addLevel({ name: "P7", items: [{ id: 0, x: 560, y: 520 }, { id: 1, x: 320, y: 520 }, { id: 2, x: 440, y: 520 }, { id: 3, x: 80, y: 520 }, { id: 4, x: 200, y: 520 }, { id: 5, x: 560, y: 400 }, { id: 6, x: 320, y: 400 }, { id: 7, x: 440, y: 400 }, { id: 8, x: 80, y: 400 }, { id: 9, x: 200, y: 400 }, { id: 10, x: 560, y: 280 }, { id: 11, x: 320, y: 280 }, { id: 12, x: 440, y: 280 }, { id: 13, x: 560, y: 160 }, { id: 14, x: 440, y: 160 }, { id: 15, x: 80, y: 280 }, { id: 16, x: 200, y: 280 }, { id: 17, x: 200, y: 160 }, { id: 18, x: 80, y: 160 }, { id: 19, x: 320, y: 160 }], links: [{ p1: 4, p2: 1, arrow: !0 }, { p1: 6, p2: 7, arrow: !0 }, { p1: 17, p2: 19, arrow: !0 }, { p1: 4, p2: 8 }, { p1: 5, p2: 2 }, { p1: 14, p2: 10 }, { p1: 15, p2: 17 }, { p1: 7, p2: 2 }, { p1: 12, p2: 7 }, { p1: 14, p2: 12 }, { p1: 6, p2: 1 }, { p1: 11, p2: 6 }, { p1: 19, p2: 11 }, { p1: 9, p2: 4 }, { p1: 16, p2: 9 }, { p1: 17, p2: 16 }, { p1: 7, p2: 5 }, { p1: 9, p2: 6 }, { p1: 8, p2: 9 }, { p1: 12, p2: 10 }, { p1: 11, p2: 12 }, { p1: 16, p2: 11 }, { p1: 15, p2: 16 }, { p1: 15, p2: 18 }, { p1: 8, p2: 15 }, { p1: 3, p2: 8 }, { p1: 4, p2: 3 }, { p1: 2, p2: 1 }, { p1: 0, p2: 2 }, { p1: 5, p2: 0 }, { p1: 10, p2: 5 }, { p1: 13, p2: 10 }, { p1: 14, p2: 13 }, { p1: 19, p2: 14 }, { p1: 18, p2: 17 }], decor: { name: "pic32", x: 407, y: 532 } }) }, addLevel: function(a) { var b = this.levels.length, c = new App.Level(b, a); this.levels.push(c) }, getLevelTime: function() { return Math.round(game.time.elapsedSince(this.levelStartTime) - data.pauseTime) }, getTotalTime: function() { for (var a = 0, b = 0; b < this.levels.length; b++) { var c = this.levels[b]; c.isCompleted && (a += c.bestTime) } return a } }), App.Dialog = Class.extend({ init: function(a, b, c) { this.game = a; var d = 0, e = 0, f = !1, g = !0; if (c && (void 0 != c.x && (d = c.x), void 0 != c.y && (e = c.y), 1 == c.blockBack && (f = !0), 0 == c.doTween && (g = !1)), this.holder = new Phaser.Group(this.game, this.game.world), f && (this.block = new Phaser.Sprite(this.game, 0, 0, "blackBack"), this.block.inputEnabled = !0, this.holder.add(this.block)), this.boxHolder = new Phaser.Group(this.game, this.holder), this.boxHolder.x = d, this.boxHolder.y = e, this.box = new Phaser.Sprite(this.game, 0, 0, b), this.boxHolder.add(this.box), g) { var h = this.boxHolder.y; this.boxHolder.y = Config.HEIGHT, this.game.add.tween(this.boxHolder).to({ y: h }, 1e3, Phaser.Easing.Back.Out, !0), f && (this.block.alpha = 0, this.game.add.tween(this.block).to({ alpha: 1 }, 500, Phaser.Easing.Linear.None, !0)) } }, destroy: function() { this.holder.destroy() } }), App.GameLogic = Class.extend({ init: function(a, b, c, d, e, f) { this.game = a, this.parentGroup = b, this.dotsGroup = c, this.linksGroup = d, this.dots = e, this.staticLinks = f, this.drawLine = null, this.userLinks = [], this.game.input.onDown.add(this.touchDownHandler, this), this.game.input.onUp.add(this.touchUpHandler, this), sounds.startLevel(), this.game.world.setBounds(-Config.WIDTH, 0, 4 * Config.WIDTH, Config.HEIGHT), Config.USE_PARTICLES && (this.vfx = new App.VisualFX(this.game)) }, addStaticLink: function(a, b) { var c = this.getDotById(a), d = this.getDotById(b), e = new App.StaticLink(this.game, this.linksGroup, c, d); this.staticLinks.push(e) }, removeStaticLink: function(a) { var b = this.staticLinks.indexOf(a); this.staticLinks.splice(b, 1), a.destroy() }, getDotById: function(a) { for (var b = 0; b < this.dots.length; b++) { var c = this.dots[b]; if (c.id === a) return c } return null }, touchDownHandler: function(a) { if (!data.pausedByUser && this.touchInsideBounds(a.x, a.y)) if (this.drawLine) this.drawLine.startFollow(); else { var b = Math.round(a.x), c = Math.round(a.y), d = this.getTapDotUnderPoint(b, c); d && (this.partyDot(d), this.startDrawingLine(d)) } }, partyDot: function(a) { a.wobble(), sounds.playPiano(), Config.USE_PARTICLES && this.vfx.explodeStars(a.getX(), a.getY()) }, touchInsideBounds: function(a, b) { var c = Config.TOUCH_BOUNDS.x, d = Config.TOUCH_BOUNDS.y, e = Config.TOUCH_BOUNDS.width, f = Config.TOUCH_BOUNDS.height; return a >= c && c + e >= a && b >= d && d + f >= b ? !0 : !1 }, fitPointInBounds: function(a, b) { var c = Config.TOUCH_BOUNDS.x, d = Config.TOUCH_BOUNDS.y, e = Config.TOUCH_BOUNDS.width, f = Config.TOUCH_BOUNDS.height; return c > a ? a = c : a > c + e && (a = c + e), d > b ? b = d : b > d + f && (b = d + f), { x: a, y: b } }, startDrawingLine: function(a) { this.drawLine = new App.DrawLine(this.game, a, this.parentGroup) }, touchUpHandler: function() { this.drawLine && this.drawLine.stopFollow() }, getTapDotUnderPoint: function(a, b) { for (var c = 40, d = void 0, e = 0; e < this.dots.length; e++) { var f = this.dots[e], g = a - f.getX(), h = b - f.getY(), i = Math.sqrt(g * g + h * h); c >= i && (c = i, d = f) } return d }, getNearestDotUnderPoint: function(a, b) { for (var c = 30, d = void 0, e = 0; e < this.dots.length; e++) { var f = this.dots[e]; if (f != this.drawLine.dot) { var g = a - f.getX(), h = b - f.getY(), i = Math.sqrt(g * g + h * h); c >= i && (c = i, d = f) } } return d }, getStaticLinkByDots: function(a, b) { for (var c = 0; c < this.staticLinks.length; c++) { var d = this.staticLinks[c]; if (d.a1 === a && d.a2 === b || d.a1 === b && d.a2 === a) return d } return null }, update: function() { if (this.drawLine && (this.drawLine.update(), this.drawLine.isFollowing())) { var a = this.game.input.activePointer.worldX, b = this.game.input.activePointer.worldY, c = this.getNearestDotUnderPoint(a, b); if (c) { var d = this.getStaticLinkByDots(this.drawLine.dot, c); if (d) if (d.isArrow) if (this.drawLine.dot === d.a1) this.connectTwoDots(c, d); else { var e = this.fitPointInBounds(a, b); this.drawLine.setEndPos(e.x, e.y) } else this.connectTwoDots(c, d); else { var e = this.fitPointInBounds(a, b); this.drawLine.setEndPos(e.x, e.y) } } else { var e = this.fitPointInBounds(a, b); this.drawLine.setEndPos(e.x, e.y) } } }, connectTwoDots: function(a, b) { var c = new App.UserLink(this.game, this.linksGroup, this.drawLine.dot, a, b.isArrow); this.userLinks.push(c), this.partyDot(a), this.drawLine.destroy(), this.drawLine = null, this.removeStaticLink(b), 0 == this.staticLinks.length ? this.playerSolvedLevel() : this.startDrawingLine(a) }, playerSolvedLevel: function() { sounds.play("sndLevelComplete"), this.game.input.onDown.remove(this.touchDownHandler, this), this.game.input.onUp.add(this.touchUpHandler, this), cmd.levelComplete() }, undo: function() { if (this.userLinks.length > 0) { var a = this.userLinks.pop(); this.addStaticLink(a.a1.id, a.a2.id), this.drawLine.destroy(), this.startDrawingLine(a.a1), this.drawLine.stopFollow(), a.destroy() } else this.drawLine && (this.drawLine.destroy(), this.drawLine = null) } }), App.Level = Class.extend({ init: function(a, b) { this.id = a, this.data = b, this.reset() }, reset: function() { this.isCompleted = !1, this.isOpen = !1 }, complete: function() { this.isCompleted = !0 }, getTitle: function() { return this.data.name } }); var game, cmd, data, cookies, fader, stateSlider, parser, sounds, util; App.Parser = Class.extend({ init: function() {}, generateLevel: function(a, b, c) { this.game = a, this.parentGroup = b, this.game.add.sprite(0, 0, "background", 0, b), this.paper = new App.Paper(this.game, this.parentGroup); var d = c.id + 1, e = this.game.add.bitmapText(0, 0, "eras", d.toString(), 50, this.parentGroup); e.x = Config.WIDTH / 2 - .5 * e.textWidth, e.y = Config.HEIGHT - 50, this.linksGroup = new Phaser.Group(this.game, this.parentGroup), this.dotsGroup = new Phaser.Group(this.game, this.parentGroup), this.parseLevelData(c.data); var f = { dotsGroup: this.dotsGroup, linksGroup: this.linksGroup, dots: this.dots, staticLinks: this.staticLinks }; return this.decorObj && this.paper.addDecor(this.decorObj.name, this.decorObj.x, this.decorObj.y), f }, parseLevelData: function(a) { this.dots = [], this.staticLinks = []; var b, c = a.items, d = a.links, e = a.decor, f = 6, g = 1; if (c) for (b = 0; b < c.length; b++) { var h = c[b], i = h.id, j = c[b].x, k = c[b].y, l = "dotBase" + g; this.addDot(i, j, k, l), g++, g > f && (g = 1) } if (d) for (b = 0; b < d.length; b++) this.addStaticLink(d[b].p1, d[b].p2, d[b].arrow); if (this.decorObj = null, e) { var m = e.name, n = e.x, o = e.y; this.decorObj = { name: m, x: n, y: o } } }, addDot: function(a, b, c, d) { var e = new App.Dot(this.game, this.dotsGroup, a, b, c, d); this.dots.push(e) }, addStaticLink: function(a, b, c) { var d = this.getDotById(a), e = this.getDotById(b), f = new App.StaticLink(this.game, this.linksGroup, d, e, c); this.staticLinks.push(f) }, getDotById: function(a) { for (var b = 0; b < this.dots.length; b++) { var c = this.dots[b]; if (c.id === a) return c } return null } }), App.Sounds = Class.extend({ init: function() { this.musicChannel = void 0 }, startMusic: function() { Config.SOUNDS_ENABLED && (game.device.desktop ? (this.musicChannel = game.add.audio("music", 1, !0), this.musicChannel.play()) : game.device.webAudio && (this.musicChannel = game.add.audio("music", 1, !0), this.musicChannel.play())) }, stopMusic: function() { this.musicChannel && this.musicChannel.pause() }, play: function(a, b) { var c = 1; void 0 != b && (c = b), Config.SOUNDS_ENABLED && (game.device.desktop ? game.sound.play(a, c) : game.device.webAudio && game.sound.play(a, c)) }, startLevel: function() { this.pianoMin = 0, this.pianoMax = 23, this.pianoIndex = 2 + Math.floor(8 * Math.random()), this.pianoIncrement = 1 }, playPiano: function() { Config.SOUNDS_ENABLED && (game.device.desktop ? data.sndPiano.play("note" + this.pianoIndex) : game.device.webAudio && data.sndPiano.play("note" + this.pianoIndex)), this.pianoIndex += this.pianoIncrement, this.pianoIndex == this.pianoMin - 1 ? (this.pianoIndex = this.pianoIndex + 1, this.pianoIncrement = 1) : this.pianoIndex == this.pianoMax + 1 && (this.pianoIndex = this.pianoMax - 1, this.pianoIncrement = -1) } }), App.Util = Class.extend({ init: function() {}, pulse: function(a, b) { void 0 == b && (b = 1.2), game.add.tween(a.scale).to({ x: b, y: b }, 1e3, Phaser.Easing.Sinusoidal.InOut).to({ x: 1, y: 1 }, 1e3, Phaser.Easing.Sinusoidal.InOut).loop().start() }, wobble: function(a, b) { void 0 == b && (b = 1); for (var c = game.add.tween(a.scale), d = 0; b > d; d++) { var c = c.to({ x: 1.2, y: .8 }, 100, Phaser.Easing.Sinusoidal.InOut); c.to({ x: 1, y: 1 }, 100, Phaser.Easing.Sinusoidal.InOut) } c.start() }, formatTime: function(a) { var b = Math.floor(a / 1e3), c = Math.floor(b / 3600), d = Math.floor((b - 3600 * c) / 60), e = b - 3600 * c - 60 * d; return 10 > c && (c = "0" + c), 10 > d && (d = "0" + d), 10 > e && (e = "0" + e), d + ":" + e }, randomizeArray: function(a) { for (var b = [], c = a.length; c--;) { var d = Math.floor(Math.random() * a.length), e = a.splice(d, 1)[0]; b.unshift(e) } return b } }), App.BitmapLine = Class.extend({ init: function(a, b, c, d, e) { this.game = a, this.group = b, this.bitmapAsset = c, this.startX = d, this.startY = e, this.bmdGroup = new Phaser.Group(this.game, this.group), this.bmdGroup.x = this.startX, this.bmdGroup.y = this.startY }, createDynamicBitmap: function() { this.bmdWidth = 800, this.bmdHeight = 18, this.bmd = this.game.add.bitmapData(this.bmdWidth, this.bmdHeight), this.game.add.sprite(0, -this.bmdHeight / 2, this.bmd, 0, this.bmdGroup) }, createStaticBitmap: function(a, b) { var c = a - this.startX, d = b - this.startY, e = Math.round(Math.sqrt(c * c + d * d)), f = Math.atan2(d, c); this.bmdWidth = e, this.bmdHeight = 18, this.bmd = this.game.add.bitmapData(this.bmdWidth, this.bmdHeight), this.game.add.sprite(0, -this.bmdHeight / 2, this.bmd, 0, this.bmdGroup), this.bmdGroup.rotation = f, this.render(a, b) }, render: function(a, b) { var c = a - this.startX, d = b - this.startY, e = Math.round(Math.sqrt(c * c + d * d)); if (e > 2) { var f = Math.atan2(d, c); this.bmdGroup.rotation = f, this.bmd.clear(); var g = new Phaser.Rectangle(0, 0, e, this.bmdHeight); this.bmd.copyPixels(this.bitmapAsset, g, 0, 0) } } }), App.CreditsView = App.Dialog.extend({ init: function(a) { this._super(a, "creditsBox", { x: 147, y: 200, blockBack: !0 }), this.closeBt = new App.MyButton(this.game, "closeButton", this.closeClick, this, { x: 335, y: 25, center: !0, parentGroup: this.boxHolder }); var b = data.texts[data.lang].credits, c = a.add.text(173, 70, b, { font: "50px Fredericka the Great", fill: "#373572", align: "center" }, this.boxHolder); c.anchor.set(.5, .5), this.logoBt = new App.MyButton(this.game, "postepennoLogo", this.logoClick, this, { x: 13, y: 160, parentGroup: this.boxHolder }); var d = data.texts[data.lang].credits_code; this.gameByTxt = new Phaser.Text(this.game, 125, 156, d, { font: "bold 18px Arial" }), this.boxHolder.add(this.gameByTxt); var e = data.texts[data.lang].credits_art; this.artTxt = new Phaser.Text(this.game, 125, 200, e, { font: "bold 18px Arial" }), this.boxHolder.add(this.artTxt) }, closeClick: function() { this.destroy() }, logoClick: function() { Play68.goHome(); } }), App.DeleteProgressView = App.Dialog.extend({ init: function() { this._super(game, "clearProgressBox", { x: 147, y: 200, blockBack: !0 }); var a = data.texts[data.lang].clear_progress, b = game.add.text(173, 70, a, { font: "50px Fredericka the Great", fill: "#373572", align: "center" }, this.boxHolder); b.anchor.set(.5, .5), this.yesBt = new App.MyButton(this.game, "yesButton", this.yesClick, this, { x: 85, y: 245, center: !0, parentGroup: this.boxHolder }), this.noBt = new App.MyButton(this.game, "noButton", this.noClick, this, { x: 270, y: 245, center: !0, parentGroup: this.boxHolder }) }, yesClick: function() { cookies.clear(), this.destroy() }, noClick: function() { this.destroy() } }), App.Dot = Class.extend({ init: function(a, b, c, d, e, f) { this.game = a, this.id = c, this.baseAssetName = f, this.group = new Phaser.Group(this.game, b), this.group.x = d, this.group.y = e, this.lastSprite = void 0, this.setState(App.Dot.BASE) }, getX: function() { return this.group.x }, getY: function() { return this.group.y }, setState: function(a) { this.state = a, this.sprite && this.sprite.destroy(), this.setSprite(this.baseAssetName) }, setSprite: function(a) { this.sprite = data.addAtlasSprite(a, { parent: this.group }), this.sprite.pivot.x = .5 * this.sprite.width, this.sprite.pivot.y = .5 * this.sprite.height, this.group.addAt(this.sprite, 0) }, setLast: function(a) { 1 == a ? (this.lastSprite = new Phaser.Sprite(this.game, 0, 0, "dotLast"), this.lastSprite.anchor.set(.5, .5), this.group.add(this.lastSprite)) : 0 == a && this.lastSprite.destroy() }, wobble: function() { util.wobble(this.group, 2) } }), App.Dot.BASE = "AnchorBase", App.Dot.ACTIVE = "AnchorActive", App.Dot.VISITED = "AnchorVisited", App.DrawLine = Class.extend({ init: function(a, b, c) { this.game = a, this.followPointer = !1, this.dot = b, this.ex = this.dot.getX(), this.ey = this.dot.getY(), this.group = new Phaser.Group(this.game, c), Config.BITMAP_LINES ? (this.view = new App.BitmapLine(this.game, this.group, "drawLine", this.ex, this.ey), this.view.createDynamicBitmap()) : this.view = new App.GraphicLine(this.game, this.group, "0xFF0000", this.ex, this.ey), this.endSprite = data.addAtlasSprite("drawLineEnd", { parent: this.group }), this.endSprite.anchor.set(.5, .5), this.render(), this.startFollow() }, setEndPos: function(a, b) { this.ex = a, this.ey = b, this.render() }, render: function() { this.view.render(this.ex, this.ey), this.endSprite.x = this.ex, this.endSprite.y = this.ey }, update: function() { this.endSprite.rotation += .1 }, startFollow: function() { this.followPointer = !0 }, stopFollow: function() { this.followPointer = !1 }, isFollowing: function() { return this.followPointer }, destroy: function() { this.group.destroy() } }), App.FPS = Class.extend({ init: function(a, b) { this.game = a, this.parentGroup = b, this.game.time.advancedTiming = !0, this.fpsTxt = new Phaser.Text(this.game, 0, 0, "FPS: XXX", { font: "bold 20px Arial", fill: "#FF0000" }), this.parentGroup.add(this.fpsTxt), this.update(), this.game.time.events.loop(Phaser.Timer.SECOND, this.update, this) }, update: function() { this.fpsTxt.setText("FPS: " + this.game.time.fps) } }), App.Fader = Class.extend({ init: function(a) { this.game = a }, fade: function(a, b) { this.callback = a, this.scope = b, this.pic = game.add.sprite(0, 0, "fader"), this.pic.alpha = 0, this.pic.inputEnabled = !0; var c = game.add.tween(this.pic).to({ alpha: .8 }, 300, Phaser.Easing.Linear.None, !0); c.onComplete.addOnce(this.fadeInComplete, this) }, fadeInComplete: function() { App.Fader.SHOULD_FADE_OUT = !0, this.callback.call(this.scope) }, fadeOut: function() { App.Fader.SHOULD_FADE_OUT = !1, this.pic = game.add.sprite(0, 0, "fader"), this.pic.inputEnabled = !0; var a = game.add.tween(this.pic).to({ alpha: 0 }, 300, Phaser.Easing.Linear.None, !0); a.onComplete.addOnce(this.fadeOutComplete, this) }, fadeOutComplete: function() { this.pic.destroy() } }), App.Fader.SHOULD_FADE_OUT = !1, App.GraphicLine = Class.extend({ init: function(a, b, c, d, e) { this.game = a, this.group = b, this.color = c, this.startX = d, this.startY = e, this.g = new Phaser.Graphics(this.game, 0, 0), this.group.add(this.g) }, render: function(a, b) { this.g.clear(), this.g.lineStyle(5, this.color), this.g.moveTo(this.startX, this.startY), this.g.lineTo(a, b) } }), App.LevelItem = Class.extend({ init: function(a, b, c, d, e) { if (this.game = a, this.level = c, this.parentGroup = b, this.group = new Phaser.Group(this.game, this.parentGroup), this.group.x = d, this.group.y = e, c.isOpen) { var f, g = 0; c.isCompleted ? (f = "levelItemCompleteBack", g = 3757085) : (f = "levelItemBack", g = 16777215), this.bt = new App.MyButton(this.game, f, this.click, this, { center: !0, parentGroup: this.group }); var h = this.game.add.bitmapText(0, 0, "eras", (this.level.id + 1).toString(), 50, this.group); h.x = .5 * -h.textWidth - 6, h.y = .3 * -h.textHeight - 6, h.tint = g } else { var i = data.addAtlasSprite("levelItemLockedBack", { x: 0, y: 0, parent: this.group }); i.anchor.set(.5, .5) } }, click: function() { util.wobble(this.group), fader.fade(this.go, this) }, go: function() { cmd.levelStart(this.level.id) } }), App.LevelsGroup = Class.extend({ init: function(a, b, c) { this.game = a, this.id = b, this.parentGroup = c, this.group = new Phaser.Group(this.game, this.parentGroup), this.group.y = this.id * Config.HEIGHT; var d = 106, e = 106; this.rows = 4, this.cols = 4, this.boundsRect = { x: 70, y: 120, width: 500, height: 460 }; for (var f = this.rows * this.cols, g = (this.boundsRect.width - d) / (this.cols - 1), h = (this.boundsRect.height - e) / (this.rows - 1), i = this.id * f, j = (this.id + 1) * f, k = 0, l = i; j > l; l++) { var m = data.levels[l]; if (m) { var n = this.boundsRect.x + d / 2 + k % this.cols * g, o = this.boundsRect.y + e / 2 + Math.floor(k / this.cols) * h; new App.LevelItem(this.game, this.group, m, n, o) } k++ } }, drawBounds: function() { this.g = game.add.graphics(0, 0, this.group), this.g.clear(), this.g.lineStyle(5, this.color), this.g.drawRect(this.boundsRect.x, this.boundsRect.y, this.boundsRect.width, this.boundsRect.height) } }), App.MyButton = Class.extend({ init: function(a, b, c, d, e) { this.game = a; var f = 0, g = 0; this.callback = c, this.callbackContext = d; var h = !1, i = a.world, j = !0; if (this.wobble = !1, e && (void 0 != e.x && (f = e.x), void 0 != e.y && (g = e.y), 1 == e.center && (h = !0), void 0 != e.parentGroup && (i = e.parentGroup), e.atlas === !1 && (j = !1), 1 == e.wobble && (this.wobble = !0)), j) { var k = data.getAtlasKey(b); this.bt = a.add.button(f, g, data.atlasName, this.clickHandler, this, k, k, k, k, i) } else this.bt = a.add.button(f, g, b, this.clickHandler, this, null, null, null, null, i); this.bt.input.useHandCursor = !0, h && this.bt.anchor.set(.5, .5) }, clickHandler: function() { sounds.play("sndClick"), this.wobble && util.wobble(this.bt), this.callback.call(this.callbackContext) }, scaleHide: function() { this.game.add.tween(this.bt.scale).to({ x: 0, y: 0 }, 200, Phaser.Easing.Linear.None, !0) }, scaleShow: function() { this.game.add.tween(this.bt.scale).to({ x: 1, y: 1 }, 200, Phaser.Easing.Linear.None, !0) }, hide: function() { this.bt.scale.x = this.bt.scale.y = 0 }, show: function() { this.bt.scale.x = this.bt.scale.y = 1 }, disableClick: function() { this.bt.inputEnabled = !1 }, enableClick: function() { this.bt.inputEnabled = !0 } }), App.Paper = Class.extend({ init: function(a, b) { this.game = a, this.parentGroup = b }, addDecor: function(a, b, c) { data.addAtlasSprite(a, { x: b, y: c, parent: this.parentGroup }) } }), App.PauseView = App.Dialog.extend({ init: function(a) { this.parentState = a, this._super(game, "pauseBox", { x: 147, y: 200, blockBack: !0 }); var b = data.texts[data.lang].pause, c = game.add.text(173, 70, b, { font: "50px Fredericka the Great", fill: "#373572", align: "center" }, this.boxHolder); c.anchor.set(.5, .5), this.exitBt = new App.MyButton(this.game, "levelsButton", this.exitClick, this, { x: 96, y: 212, center: !0, parentGroup: this.boxHolder, wobble: !0 }), this.nextBt = new App.MyButton(this.game, "nextButton", this.resumeClick, this, { x: 252, y: 210, center: !0, parentGroup: this.boxHolder }), this.startTime = game.time.now, data.pausedByUser = !0 }, exitClick: function() { data.pausedByUser = !1, fader.fade(this.gotoMenu, this) }, gotoMenu: function() { game.state.start("LevelSelect") }, resumeClick: function() { data.pausedByUser = !1, data.pauseTime += Math.round(game.time.now - this.startTime), this.parentState.resumeGame(), this.destroy() } }), App.SoundIcon = Class.extend({ init: function(a, b) { var c = 0, d = 0, e = 1, f = a.world; void 0 != b && (void 0 != b.x && (c = b.x), void 0 != b.y && (d = b.y), void 0 != b.scale && (e = b.scale), void 0 != b.parentGroup && (f = b.parentGroup)), this.group = a.add.group(f), this.group.x = c, this.group.y = d, this.group.scale.x = this.group.scale.y = e, this.btOn = new App.MyButton(a, "soundIconOn", this.sndClick, this, { center: !0, parentGroup: this.group }), this.btOff = new App.MyButton(a, "soundIconOff", this.sndClick, this, { center: !0, parentGroup: this.group }), this.updateIcon(), a.device.desktop || a.device.webAudio || this.hide() }, updateIcon: function() { Config.SOUNDS_ENABLED ? (this.btOn.show(), this.btOff.hide()) : (this.btOn.hide(), this.btOff.show()) }, hide: function() { this.group.visible = !1 }, sndClick: function() { Config.SOUNDS_ENABLED = !Config.SOUNDS_ENABLED, Config.SOUNDS_ENABLED ? sounds.startMusic() : sounds.stopMusic(), cookies.saveSound(), this.updateIcon(), util.wobble(this.group) }, disableClick: function() { this.btOn.disableClick(), this.btOff.disableClick() } }), App.StateSlider = Class.extend({ init: function() { this.transitionTime = 1500, this.easingIn = Phaser.Easing.Cubic.In, this.easingOut = Phaser.Easing.Cubic.Out }, levelComplete: function() { var a = data.curLevel.id, b = data.levels[a + 1]; b ? this.slideToNextLevel(b) : cmd.gameComplete() }, slideToNextLevel: function(a) { var b = game.state.getCurrentState().getCoreGroup(); this.transitionGroup = new Phaser.Group(game, b), this.transitionGroup.x = Config.WIDTH, parser.generateLevel(game, this.transitionGroup, a); var c = new Phaser.Tween(game.camera, game, game.tweens); c.to({ x: Config.WIDTH }, this.transitionTime, Phaser.Easing.Cubic.InOut), c.onComplete.addOnce(this.levelSlideComplete, this), c.start() }, levelSlideComplete: function() { var a = data.curLevel.id + 1; cmd.levelStart(a) } }), App.StaticLink = Class.extend({ init: function(a, b, c, d, e) { this.game = a, this.a1 = c, this.a2 = d, this.isArrow = e, this.group = new Phaser.Group(this.game, b); var f = this.a1.getX(), g = this.a1.getY(), h = this.a2.getX(), i = this.a2.getY(); if (Config.BITMAP_LINES ? (this.view = new App.BitmapLine(this.game, this.group, "staticLink", f, g), this.view.createStaticBitmap(h, i)) : (this.view = new App.GraphicLine(this.game, this.group, "0x999999", f, g), this.view.render(h, i)), this.isArrow) { var j = h - f, k = i - g, l = Math.atan2(k, j), m = data.addAtlasSprite("arrow", { x: f + j / 2, y: g + k / 2, parent: this.group }); m.anchor.set(.5, .5), m.rotation = l } }, destroy: function() { this.group.destroy() } }), App.Tutorial = Class.extend({ init: function(a) { this.game = a; var b = Config.WIDTH / 2; if (0 == data.curLevel.id) this.addText(data.texts[data.lang].tutorial1, { x: b, y: 130, delay: 500 }); else if (1 == data.curLevel.id) { var c = { font: "20px Arial", fill: "#000000", align: "center" }; this.addText(data.texts[data.lang].tutorial2a, { x: 450, y: 100, delay: 1e3, style: c }), this.addText(data.texts[data.lang].tutorial2b, { x: 570, y: 100, delay: 2e3, style: c }) } else 16 == data.curLevel.id && this.addText(data.texts[data.lang].tutorial3, { x: b, y: 150, delay: 500 }) }, addSprite: function(a, b, c) { var d = data.addAtlasSprite(a, { x: b, y: c - 10 }); d.alpha = 0, game.add.tween(d).to({ alpha: 1, y: c }, 1e3, Phaser.Easing.Quadratic.Out, !0) }, addText: function(a, b) { var c = 0, d = 0, e = 500, f = { font: "34px Arial", fill: "#000000" }; b && (void 0 != b.x && (c = b.x), void 0 != b.y && (d = b.y), void 0 != b.delay && (e = b.delay), void 0 != b.style && (f = b.style)); var g = this.game.add.text(c, d, a, f); g.align = "center", g.anchor.set(.5, 0), g.alpha = 0, g.y -= 10, this.game.add.tween(g).delay(e).to({ alpha: 1, y: d }, 1e3, Phaser.Easing.Quadratic.Out, !0) } }), App.UserLink = Class.extend({ init: function(a, b, c, d, e) { this.game = a, this.a1 = c, this.a2 = d, this.isArrow = e, this.group = new Phaser.Group(this.game, b); var f = this.a1.getX(), g = this.a1.getY(), h = this.a2.getX(), i = this.a2.getY(); if (Config.BITMAP_LINES ? (this.view = new App.BitmapLine(this.game, this.group, "userLink", this.a1.getX(), this.a1.getY()), this.view.createStaticBitmap(d.getX(), d.getY())) : (this.view = new App.GraphicLine(this.game, this.group, "0x000000", this.a1.getX(), this.a1.getY()), this.view.render(this.a2.getX(), this.a2.getY())), this.isArrow) { var j = h - f, k = i - g, l = Math.atan2(k, j), m = data.addAtlasSprite("arrow", { x: f + j / 2, y: g + k / 2, parent: this.group }); m.anchor.set(.5, .5), m.rotation = l } }, destroy: function() { this.group.destroy() } }), App.VisualFX = Class.extend({ init: function(a) { this.game = a, this.emitter = this.game.add.emitter(0, 0, 100); for (var b = [], c = 1; 4 >= c; c++) b.push("pics/starParticle" + c + "_0000"); this.emitter.makeParticles("pics", b), this.emitter.gravity = 0, this.emitter.setAlpha(1, 0, 4e3), this.emitter.setScale(.3, 1.5, .3, 1.5, 2e3), this.emitter.forEach(this.tune, this, !1) }, tune: function(a) { a.anchor.set(0, 0), a.pivot.x = .5 * a.width, a.pivot.y = .5 * a.height }, explodeStars: function(a, b) { this.emitter.x = a, this.emitter.y = b, this.emitter.start(!0, 2e3, null, 5) } }), App.BootState = function() {}, App.BootState.prototype = { preload: function() { this.load.image("preloadBar", "assets/images/preloadBar.png"), this.load.image("preloadBarHolder", "assets/images/preloadBarHolder.png"), this.load.image("background", "assets/images/background.jpg"), game.stage.backgroundColor = "#EBE7DA" }, create: function() { this.game.input.maxPointers = 1, this.game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL, this.game.scale.pageAlignHorizontally = !0, this.game.scale.pageAlignVertically = !0, this.game.scale.enterPortrait.add(this.rescale, this), this.game.scale.enterLandscape.add(this.rescale, this), this.game.scale.setScreenSize(!0), SG_Hooks.setOrientationHandler(this.rescale), SG_Hooks.setResizeHandler(this.rescale), Config.TRANSPARENT && (this.game.world.alpha = .5), this.game.device.android && !this.game.device.chrome && (Config.BITMAP_LINES = !1, Config.USE_PARTICLES = !1), this.game.state.start("Preloader") }, rescale: function() { var a = this.game; setTimeout(function() { a.scale.refresh() }, 500) } }, App.GameCompleteState = function() {}, App.GameCompleteState.prototype = { create: function() { this.add.sprite(0, 0, "gameCompleteBack.jpg"), this.backBt = new App.MyButton(this.game, "homeButton", this.backClick, this, { x: 116, y: 640, center: !0, wobble: !0 }), this.tweenAlphaButton(this.backBt.bt, 2e3), App.Fader.SHOULD_FADE_OUT && fader.fadeOut() }, tweenAlphaButton: function(a, b) { a.alpha = 0, this.add.tween(a).to({ alpha: 1 }, 500, Phaser.Easing.Linear.None, !0, b) }, backClick: function() { fader.fade(this.gotoMenu, this) }, gotoMenu: function() { game.state.start("MainMenu") } }, App.GameplayState = function() {}, App.GameplayState.prototype = { create: function() { this.coreGroup = new Phaser.Group(this.game, this.game.world); var a = parser.generateLevel(this.game, this.coreGroup, data.curLevel); this.logic = new App.GameLogic(this.game, this.coreGroup, a.dotsGroup, a.linksGroup, a.dots, a.staticLinks), this.uiGroup = new Phaser.Group(this.game, this.game.world), this.uiGroup.fixedToCamera = !0, this.restartBt = new App.MyButton(this.game, "restartButton", this.restartClick, this, { x: 454, y: 52, center: !0, parentGroup: this.uiGroup }), this.pauseBt = new App.MyButton(this.game, "pauseButton", this.pauseClick, this, { x: 79, y: 53, center: !0, parentGroup: this.uiGroup, wobble: !0 }), this.undoBt = new App.MyButton(this.game, "undoButton", this.undoClick, this, { x: 572, y: 52, center: !0, parentGroup: this.uiGroup, wobble: !0 }), this.soundIcon = new App.SoundIcon(this.game, { x: 197, y: 56, parentGroup: this.uiGroup }), Config.ENABLE_CHEAT && (this.cheatBt = new App.MyButton(this.game, "cheatButton", this.cheatClick, this, { x: 320, y: 56, center: !0, parentGroup: this.uiGroup })), Config.SHOW_FPS && (this.fps = new App.FPS(this.game, this.uiGroup)), this.game.onPause.add(this.globalPauseOn, this), this.game.onResume.add(this.globalPauseOff, this), this.tutorial = new App.Tutorial(this.game), App.Fader.SHOULD_FADE_OUT && fader.fadeOut() }, cheatClick: function() { cmd.levelComplete() }, undoClick: function() { this.logic.undo() }, globalPauseOn: function() { this.globalPauseStart = game.time.now }, globalPauseOff: function() { data.pausedByUser || (data.pauseTime += Math.round(game.time.now - this.globalPauseStart)) }, addTimerEvent: function() { this.timerEvent = this.game.time.events.loop(Phaser.Timer.SECOND, this.updateUI, this) }, removeTimerEvent: function() { this.game.time.events.remove(this.timerEvent) }, updateUI: function() { this.timer.setTime(data.getLevelTime()) }, levelComplete: function() { this.disableButtons() }, disableButtons: function() { this.undoBt.disableClick(), this.soundIcon.disableClick(), this.restartBt.disableClick(), this.pauseBt.disableClick() }, getCoreGroup: function() { return this.coreGroup }, update: function() { this.logic.update() }, restartClick: function() { cmd.levelStart(data.curLevel.id, !1) }, pauseClick: function() { this.removeTimerEvent(), this.pauseView = new App.PauseView(this) }, resumeGame: function() {} }, App.LevelSelectState = function() {}, App.LevelSelectState.prototype = { create: function() { this.add.sprite(0, 0, "background"), this.itemsHolder = new Phaser.Group(this.game, this.game.world), this.groupsNum = 2; for (var a = 0; a < this.groupsNum; a++) { new App.LevelsGroup(this.game, a, this.itemsHolder) } var b = data.texts[data.lang].select_level, c = game.add.text(Config.WIDTH / 2, 70, b, { font: "50px Fredericka the Great", fill: "#373572" }); c.anchor.set(.5, .5), this.homeBt = new App.MyButton(this.game, "homeButton", this.homeClick, this, { x: 113, y: 660, center: !0, wobble: !0 }), this.scrollUp = new App.MyButton(this.game, "upButton", this.scrollUpClick, this, { x: 555, y: 650, center: !0 }), this.scrollDown = new App.MyButton(this.game, "downButton", this.scrollDownClick, this, { x: 445, y: 650, center: !0 }), this.itemsHolder.y = -Config.HEIGHT * App.LevelSelectState.CURRENT_GROUP_ID, 0 == App.LevelSelectState.CURRENT_GROUP_ID ? this.scrollUp.hide() : App.LevelSelectState.CURRENT_GROUP_ID == this.groupsNum - 1 && this.scrollDown.hide(), App.Fader.SHOULD_FADE_OUT && fader.fadeOut() }, scrollUpClick: function() { 1 == App.LevelSelectState.CURRENT_GROUP_ID && this.scrollUp.scaleHide(), App.LevelSelectState.CURRENT_GROUP_ID == this.groupsNum - 1 && this.scrollDown.scaleShow(), App.LevelSelectState.CURRENT_GROUP_ID--, this.scrollUp.disableClick(), this.scrollDown.disableClick(); var a = this.game.add.tween(this.itemsHolder); a.to({ y: -Config.HEIGHT * App.LevelSelectState.CURRENT_GROUP_ID }, 500, Phaser.Easing.Quadratic.InOut, !0), a.onComplete.addOnce(this.scrollComplete, this) }, scrollDownClick: function() { 0 == App.LevelSelectState.CURRENT_GROUP_ID && this.scrollUp.scaleShow(), App.LevelSelectState.CURRENT_GROUP_ID == this.groupsNum - 2 && this.scrollDown.scaleHide(), App.LevelSelectState.CURRENT_GROUP_ID++, this.scrollUp.disableClick(), this.scrollDown.disableClick(); var a = this.game.add.tween(this.itemsHolder); a.to({ y: -Config.HEIGHT * App.LevelSelectState.CURRENT_GROUP_ID }, 500, Phaser.Easing.Quadratic.InOut, !0), a.onComplete.addOnce(this.scrollComplete, this) }, scrollComplete: function() { this.scrollUp.enableClick(), this.scrollDown.enableClick() }, homeClick: function() { fader.fade(this.gotoMainMenu, this) }, gotoMainMenu: function() { this.game.state.start("MainMenu") } }, App.LevelSelectState.CURRENT_GROUP_ID = 0, App.MainMenuState = function() {}, App.MainMenuState.prototype = { create: function() { this.add.sprite(0, 0, "background"), this.title = data.addAtlasSprite("gameTitle", { x: 250, y: 19 }), this.playBt = new App.MyButton(this.game, "playButton2", this.playClick, this, { x: 490, y: 390, center: !0 }), util.pulse(this.playBt.bt, 1.1), this.character = data.addAtlasSprite("menuCharacter", { x: 40, y: 30 }), this.soundIcon = new App.SoundIcon(this.game, { x: 65, y: 660 }), this.deleteProgressBt = new App.MyButton(this.game, "clearProgressButton", this.deleteProgressClick, this, { x: 554, y: 638, center: !0, wobble: !0 }), this.creditsBt = new App.MyButton(this.game, "creditsButton", this.creditsClick, this, { x: 438, y: 638, center: !0, wobble: !0 }), this.moreGames = new App.MyButton(this.game, "moreGamesButton", this.moreGamesClick, this, { x: 320, y: 638, center: !0, wobble: !0 }); var a = "v " + Config.VERSION; this.add.text(5, Config.HEIGHT - 15, a, { font: "12px Arial", fill: "#000000" }), Config.SHOW_FPS && (this.fps = new App.FPS(this.game, this.game.world)), Config.RELEASE || this.add.text(20, 30, "DEVELOPMENT VERSION", { font: "30px Arial", fill: "#FF0000" }); var b = game.add.text(300, 250, "SELECT LEVEL", { font: "32px Fredericka the Great", fill: "#373572" }); b.visible = !1, this.showWithTweens(), App.Fader.SHOULD_FADE_OUT && fader.fadeOut() }, moreGamesClick: function() { //window.open("http://m.softgames.de", "_blank") // clickMore(); Play68.goHome(); }, showWithTweens: function() { this.title.alpha = 0, this.add.tween(this.title).to({ alpha: 1 }, 800, Phaser.Easing.Linear.None, !0), this.character.alpha = 0, this.add.tween(this.character).to({ alpha: 1 }, 800, Phaser.Easing.Linear.None, !0, 500), this.tweenScaleButton(this.soundIcon.group, 1300), this.tweenScaleButton(this.moreGames.bt, 1500), this.tweenScaleButton(this.creditsBt.bt, 1700), this.tweenScaleButton(this.deleteProgressBt.bt, 1900), this.tweenAlphaButton(this.playBt.bt, 2100) }, tweenScaleButton: function(a, b) { a.scale.x = a.scale.y = 0, this.add.tween(a.scale).to({ x: 1, y: 1 }, 500, Phaser.Easing.Back.Out, !0, b) }, tweenAlphaButton: function(a, b) { a.alpha = 0, this.add.tween(a).to({ alpha: 1 }, 500, Phaser.Easing.Linear.None, !0, b) }, playClick: function() { fader.fade(this.startGame, this) }, startGame: function() { cmd.gameStart() }, deleteProgressClick: function() { new App.DeleteProgressView(this.game) }, creditsClick: function() { new App.CreditsView(this.game) } }, App.PreloaderState = function() {}, App.PreloaderState.prototype = { preload: function() { this.add.sprite(0, 0, "background"); var a, b = ["fader", "blackBack", "creditsBox", "clearProgressBox", "staticLink", "userLink", "drawLine", "pauseBox", "gameCompleteBack.jpg"], c = ["sndClick", "sndLevelComplete", "sndPiano", "music"]; for (a = 0; a < b.length; a++) { var d = -1 == b[a].indexOf(".jpg") ? b[a] + ".png" : b[a]; this.load.image(b[a], "assets/images/" + d) } for (a = 0; a < c.length; a++) { var e = c[a] + ".mp3", f = c[a] + ".ogg"; this.load.audio(c[a], ["assets/sounds/" + e, "assets/sounds/" + f]) } this.load.atlasJSONHash("pics", "assets/images/pics.png", "assets/images/pics.json"), this.load.bitmapFont("eras", "assets/fonts/eras.png", "assets/fonts/eras.fnt"), this.load.text("textData", "release/TextData.json"), this.holder = this.game.add.group(), this.preloadBar = this.add.sprite(60, 269, "preloadBar", null, this.holder), this.add.sprite(60, 264, "preloadBarHolder", null, this.holder), this.progressTxt = this.game.add.text(Config.WIDTH / 2, 210, "0%", { font: "bold 50px Arial", fill: "#432291" }, this.holder), this.progressTxt.anchor.set(.5, 0), this.load.setPreloadSprite(this.preloadBar), this.load.onFileComplete.add(this.fileLoaded, this) }, fileLoaded: function(a) { this.progressTxt.setText(a + "%") }, create: function() { this.preloaderComplete() }, preloaderComplete: function() { var a = SG.lang; //SG_Hooks.getLanguage(["en", "ru"]); fader = new App.Fader(this.game), cmd = new App.Commands, data = new App.Data(a), cookies = new App.Cookies, sounds = new App.Sounds, sounds.startMusic(), stateSlider = new App.StateSlider, parser = new App.Parser, util = new App.Util, this.game.state.start("MainMenu") } };