var app; function loadVue() { // data = a function returning the content (actually HTML) Vue.component('display-text', { props: ['layer', 'data'], template: ` ` }) // data = a function returning the content (actually HTML) Vue.component('raw-html', { props: ['layer', 'data'], template: ` ` }) // Blank space, data = optional height in px or pair with width and height in px Vue.component('blank', { props: ['layer', 'data'], template: `

` }) // Displays an image, data is the URL Vue.component('display-image', { props: ['layer', 'data'], template: ` ` }) // data = an array of Components to be displayed in a row Vue.component('row', { props: ['layer', 'data'], computed: { key() {return this.$vnode.key} }, template: `
` }) // data = an array of Components to be displayed in a column Vue.component('column', { props: ['layer', 'data'], computed: { key() {return this.$vnode.key} }, template: `
` }) // data [other layer, tabformat for within proxy] Vue.component('layer-proxy', { props: ['layer', 'data'], computed: { key() {return this.$vnode.key} }, template: `
` }) Vue.component('infobox', { props: ['layer', 'data'], template: `
` }) // Data = width in px, by default fills the full area Vue.component('h-line', { props: ['layer', 'data'], template:`
` }) // Data = height in px, by default is bad Vue.component('v-line', { props: ['layer', 'data'], template: `
` }) Vue.component('challenges', { props: ['layer'], template: `
` }) // data = id Vue.component('challenge', { props: ['layer', 'data'], template: `






Goal: {{format(tmp[layer].challenges[data].goal)}} {{tmp[layer].challenges[data].currencyDisplayName ? tmp[layer].challenges[data].currencyDisplayName : "points"}}
Reward:
Currently:
` }) Vue.component('upgrades', { props: ['layer', 'data'], template: `

` }) // data = id Vue.component('upgrade', { props: ['layer', 'data'], template: ` ` }) Vue.component('milestones', { props: ['layer'], template: `

` }) // data = id Vue.component('milestone', { props: ['layer', 'data'], template: `



  ` }) Vue.component('toggle', { props: ['layer', 'data'], template: ` ` }) // data = function to return the text describing the reset before the amount gained (optional) Vue.component('prestige-button', { props: ['layer', 'data'], template: ` ` }) // Displays the main resource for the layer Vue.component('main-display', { props: ['layer', 'data'], template: `
You have

{{data ? format(player[layer].points, data) : formatWhole(player[layer].points)}}

{{tmp[layer].resource}},

` }) // Displays the base resource for the layer, as well as the best and total values for the layer's currency, if tracked Vue.component('resource-display', { props: ['layer'], template: `

You have {{formatWhole(tmp[layer].baseAmount)}} {{tmp[layer].baseResource}}

You are gaining {{formatWhole(tmp[layer].resetGain.times(tmp[layer].passiveGeneration))}} {{tmp[layer].resource}} per second


Your best {{tmp[layer].resource}} is {{formatWhole(player[layer].best)}}
You have made a total of {{formatWhole(player[layer].total)}} {{tmp[layer].resource}}
` }) // data = button size, in px Vue.component('buyables', { props: ['layer', 'data'], template: `

` }) // data = id of buyable Vue.component('buyable', { props: ['layer', 'data', 'size'], template: `

`, data() { return { interval: false, time: 0,}}, methods: { start() { if (!this.interval) { this.interval = setInterval((function() { if(this.time >= 5) buyBuyable(this.layer, this.data) this.time = this.time+1 }).bind(this), 50)} }, stop() { clearInterval(this.interval) this.interval = false this.time = 0 } }, }) Vue.component('respec-button', { props: ['layer', 'data'], template: `
` }) // data = button size, in px Vue.component('clickables', { props: ['layer', 'data'], template: `

` }) // data = id of clickable Vue.component('clickable', { props: ['layer', 'data', 'size'], template: ` `, data() { return { interval: false, time: 0,}}, methods: { start() { if (!this.interval && layers[this.layer].clickables[this.data].onHold) { this.interval = setInterval((function() { let c = layers[this.layer].clickables[this.data] if(this.time >= 5 && run(c.canClick, c)) { run(c.onHold, c) } this.time = this.time+1 }).bind(this), 50)} }, stop() { clearInterval(this.interval) this.interval = false this.time = 0 } }, }) Vue.component('master-button', { props: ['layer', 'data'], template: ` ` }) // data = button size, in px Vue.component('grid', { props: ['layer', 'data'], template: `

` }) Vue.component('gridable', { props: ['layer', 'data'], template: ` `, data() { return { interval: false, time: 0,}}, computed: { canClick() { return gridRun(this.layer, 'getCanClick', player[this.layer].grid[this.data], this.data)} }, methods: { start() { if (!this.interval && layers[this.layer].grid.onHold) { this.interval = setInterval((function() { if(this.time >= 5 && gridRun(this.layer, 'getCanClick', player[this.layer].grid[this.data], this.data)) { gridRun(this.layer, 'onHold', player[this.layer].grid[this.data], this.data) } this.time = this.time+1 }).bind(this), 50)} }, stop() { clearInterval(this.interval) this.interval = false this.time = 0 } }, }) // data = button size, in px Vue.component('microtabs', { props: ['layer', 'data'], computed: { currentTab() {return player.subtabs[layer][data]} }, template: `
` }) // data = id of the bar Vue.component('bar', { props: ['layer', 'data'], computed: { style() {return constructBarStyle(this.layer, this.data)} }, template: `
` }) Vue.component('achievements', { props: ['layer'], template: `

` }) // data = id Vue.component('achievement', { props: ['layer', 'data'], template: `


` }) // Data is an array with the structure of the tree Vue.component('tree', { props: ['layer', 'data'], computed: { key() {return this.$vnode.key} }, template: `
` }) // Updates the value in player[layer][data] Vue.component('text-input', { props: ['layer', 'data'], template: ` ` }) // Updates the value in player[layer][data] Vue.component('slider', { props: ['layer', 'data'], template: `
` }) // These are for buyables, data is the id of the corresponding buyable Vue.component('sell-one', { props: ['layer', 'data'], template: ` ` }) Vue.component('sell-all', { props: ['layer', 'data'], template: ` ` }) // SYSTEM COMPONENTS Vue.component('node-mark', systemComponents['node-mark']) Vue.component('tab-buttons', systemComponents['tab-buttons']) Vue.component('tree-node', systemComponents['tree-node']) Vue.component('layer-tab', systemComponents['layer-tab']) Vue.component('overlay-head', systemComponents['overlay-head']) Vue.component('info-tab', systemComponents['info-tab']) Vue.component('options-tab', systemComponents['options-tab']) Vue.component('tooltip', systemComponents['tooltip']) Vue.component('particle', systemComponents['particle']) app = new Vue({ el: "#app", data: { player, tmp, Decimal, format, formatWhole, formatTime, formatSmall, focused, getThemeName, layerunlocked, doReset, buyUpg, buyUpgrade, startChallenge, milestoneShown, keepGoing, hasUpgrade, hasMilestone, hasAchievement, hasChallenge, maxedChallenge, getBuyableAmount, getClickableState, inChallenge, canAffordUpgrade, canBuyBuyable, canCompleteChallenge, subtabShouldNotify, subtabResetNotify, challengeStyle, challengeButtonText, constructBarStyle, constructParticleStyle, VERSION, LAYERS, hotkeys, activePopups, particles, mouseX, mouseY, shiftDown, ctrlDown, }, }) }