2020-08-19 02:50:24 +00:00
var app ;
function loadVue ( ) {
2020-09-11 02:15:05 +00:00
Vue . component ( 'layer-node' , {
props : [ 'layer' , 'abb' ] ,
template : `
< button v - if = "nodeShown(layer)"
v - bind : id = "layer"
v - on : click = " function ( ) {
showTab ( layer )
} "
v - bind : tooltip = "
2020-09-24 15:54:41 +00:00
player [ layer ] . unl ? formatWhole ( player [ layer ] . points ) + ' ' + layers [ layer ] . resource
: 'Reach ' + formatWhole ( tmp . layerReqs [ layer ] ) + ' ' + layers [ layer ] . baseResource + ' to unlock (You have ' + formatWhole ( tmp . layerAmt [ layer ] ) + ' ' + layers [ layer ] . baseResource + ')'
2020-09-11 02:15:05 +00:00
"
v - bind : class = " {
treeNode : true ,
[ layer ] : true ,
2020-10-03 19:45:47 +00:00
hidden : ! tmp . layerShown [ layer ] ,
2020-10-03 20:47:56 +00:00
locked : ! player [ layer ] . unl && ! tmp . layerAmt [ layer ] . gte ( tmp . layerReqs [ layer ] ) ,
2020-09-24 15:54:41 +00:00
can : layerUnl ( layer ) ,
} "
v - bind : style = " {
2020-10-03 19:45:47 +00:00
'background-color' : tmp . layerColor [ layer ] ,
2020-09-11 02:15:05 +00:00
} " >
{ { abb } }
< / b u t t o n >
`
} )
2020-09-28 01:00:10 +00:00
2020-10-03 23:50:03 +00:00
// data = a function returning the content
Vue . component ( 'display-text' , {
props : [ 'layer' , 'data' ] ,
template : `
< span > { { readData ( data ) } } < / s p a n >
`
} )
// data = a function returning html content, with some limited functionality
Vue . component ( 'raw-html' , {
props : [ 'layer' , 'data' ] ,
template : `
< span v - html = "readData(data)" > < / s p a n >
`
} )
// Blank lines, data = optional height in px or pair with width and height in px
Vue . component ( 'blank' , {
props : [ 'layer' , 'data' ] ,
template : `
< div >
< div v - if = "!data" v - bind : style = "{'width': '8px', 'height': '17px'}" > < / d i v >
< div v - else - if = "Array.isArray(data)" v - bind : style = "{'width': data[0], 'height': data[1]}" > < / d i v >
< div v - else v - bind : style = "{'width': '8px', 'height': 'data'}" > < br > < / d i v >
< / d i v >
`
} )
// data = an array of Components to be displayed in a row
Vue . component ( 'row' , {
props : [ 'layer' , 'data' ] ,
template : `
< div class = "upgTable" >
< div class = "upgRow" >
< div v - for = "item in data" >
< div v - if = "!Array.isArray(item)" v - bind : is = "item" : layer = "layer" > < / d i v >
< div v - else - if = "item.length==3" v - bind : style = "(item[2] ? item[2] : {})" v - bind : is = "item[0]" : layer = "layer" : data = "item[1]" > < / d i v >
< div v - else - if = "item.length==2" v - bind : is = "item[0]" : layer = "layer" : data = "item[1]" > < / d i v >
< / d i v >
< / d i v >
< / d i v >
`
} )
// data = an array of Components to be displayed in a column
Vue . component ( 'column' , {
props : [ 'layer' , 'data' ] ,
template : `
< div class = "upgTable" >
< div class = "upgCol" >
< div v - for = "item in data" >
< div v - if = "!Array.isArray(item)" v - bind : is = "item" : layer = "layer" > < / d i v >
< div v - else - if = "item.length==3" v - bind : style = "(item[2] ? item[2] : {})" v - bind : is = "item[0]" : layer = "layer" : data = "item[1]" > < / d i v >
< div v - else - if = "item.length==2" v - bind : is = "item[0]" : layer = "layer" : data = "item[1]" > < / d i v >
< / d i v >
< / d i v >
< / d i v >
`
} )
2020-09-28 01:00:10 +00:00
Vue . component ( 'challs' , {
props : [ 'layer' ] ,
template : `
< div v - if = "layers[layer].challs" class = "upgTable" >
< div v - for = "row in layers[layer].challs.rows" class = "upgRow" >
< div v - for = "col in layers[layer].challs.cols" >
2020-10-03 19:45:47 +00:00
< div v - if = "tmp.challs[layer][row*10+col].unl" v - bind : class = "{hChall: true, done: player[layer].challs.includes(row*10+col), canComplete: tmp.challActive[layer][row*10+col]&&!player[layer].challs.includes(row*10+col)&&canCompleteChall(layer, row*10+col)}" >
< br > < h3 > { { tmp . challs [ layer ] [ row * 10 + col ] . name } } < / h 3 > < b r > < b r >
< button v - bind : class = "{ longUpg: true, can: true, [layer]: true }" v - bind : style = "{'background-color': tmp.layerColor[layer]}" v - on : click = "startChall(layer, row*10+col)" > { { player [ layer ] . active == ( row * 10 + col ) ? ( canCompleteChall ( layer , row * 10 + col ) ? "Finish" : "Exit Early" ) : ( player [ layer ] . challs . includes ( row * 10 + col ) ? "Completed" : "Start" ) } } < / b u t t o n > < b r > < b r >
{ { tmp . challs [ layer ] [ row * 10 + col ] . desc } } < br >
Goal : { { format ( tmp . challs [ layer ] [ row * 10 + col ] . goal ) } } { { layers [ layer ] . challs [ row * 10 + col ] . currencyDisplayName ? layers [ layer ] . challs [ row * 10 + col ] . currencyDisplayName : "points" } } < br >
Reward : { { tmp . challs [ layer ] [ row * 10 + col ] . reward } } < br >
< span v - if = "tmp.challs[layer][row*10+col].effect!==undefined" > Currently : { { ( tmp . challs [ layer ] [ row * 10 + col ] . effectDisplay ) ? ( tmp . challs [ layer ] [ row * 10 + col ] . effectDisplay ) : format ( tmp . challs [ layer ] [ row * 10 + col ] . effect ) } } < / s p a n >
2020-09-28 01:00:10 +00:00
< / d i v >
< / d i v >
< / d i v >
< / d i v >
`
} )
Vue . component ( 'upgrades' , {
props : [ 'layer' ] ,
template : `
< div v - if = "layers[layer].upgrades" class = "upgTable" >
< div v - for = "row in layers[layer].upgrades.rows" class = "upgRow" >
< div v - for = "col in layers[layer].upgrades.cols" class = "upgAlign" >
2020-10-03 19:45:47 +00:00
< button v - if = "tmp.upgrades[layer][row*10+col].unl" v - on : click = "buyUpg(layer, row*10+col)" v - bind : class = "{ [layer]: true, upg: true, bought: player[layer].upgrades.includes(row*10+col), locked: (!(canAffordUpg(layer, row*10+col))&&!player[layer].upgrades.includes(row*10+col)), can: (canAffordUpg(layer, row*10+col)&&!player[layer].upgrades.includes(row*10+col))}" v - bind : style = "{'background-color': tmp.layerColor[layer]}" >
< span v - if = "tmp.upgrades[layer][row*10+col].title" > < h3 > { { tmp . upgrades [ layer ] [ row * 10 + col ] . title } } < / h 3 > < b r > < / s p a n >
{ { tmp . upgrades [ layer ] [ row * 10 + col ] . desc } }
< span v - if = "tmp.upgrades[layer][row*10+col].effect" > < br > Currently : { { ( tmp . upgrades [ layer ] [ row * 10 + col ] . effectDisplay ) ? ( tmp . upgrades [ layer ] [ row * 10 + col ] . effectDisplay ) : format ( tmp . upgrades [ layer ] [ row * 10 + col ] . effect ) } } < / s p a n >
< br > < br > Cost : { { formatWhole ( tmp . upgrades [ layer ] [ row * 10 + col ] . cost ) } } { { ( layers [ layer ] . upgrades [ row * 10 + col ] . currencyDisplayName ? layers [ layer ] . upgrades [ row * 10 + col ] . currencyDisplayName : layers [ layer ] . resource ) } } < / b u t t o n >
2020-09-28 01:00:10 +00:00
< / d i v >
< / d i v >
2020-10-01 00:25:14 +00:00
< br >
2020-09-28 01:00:10 +00:00
< / d i v >
`
} )
Vue . component ( 'milestones' , {
props : [ 'layer' ] ,
template : `
< div v - if = "layers[layer].milestones" >
< table >
< tr v - for = "id in Object.keys(layers[layer].milestones)" >
2020-10-03 20:47:56 +00:00
< td v - if = "milestoneShown(layer, id)" v - bind : class = "{milestone: !player[layer].milestones.includes(id), milestoneDone: player[layer].milestones.includes(id)}" > < h3 > { { tmp . milestones [ layer ] [ id ] . requirementDesc } } < / h 3 > < b r > { { t m p . m i l e s t o n e s [ l a y e r ] [ i d ] . e f f e c t D e s c } } < b r >
< span v - if = "(layers[layer].milestones[id].toggles)&&(player[layer].milestones.includes(id))" v - for = "toggle in layers[layer].milestones[id].toggles" > < toggle : layer = "layer" : data = "toggle" > < / t o g g l e > & n b s p ; < / s p a n > < / t d > < / t r >
2020-09-28 01:00:10 +00:00
< / t r >
< / t a b l e >
2020-10-01 00:25:14 +00:00
< br >
2020-09-28 01:00:10 +00:00
< / d i v >
`
} )
Vue . component ( 'toggle' , {
props : [ 'layer' , 'data' ] ,
template : `
2020-10-03 20:47:56 +00:00
< button class = "smallUpg can" v - bind : style = "{'background-color': tmp.layerColor[data[0]]}" v - on : click = "toggleAuto(data)" > { { player [ data [ 0 ] ] [ data [ 1 ] ] ? "ON" : "OFF" } } < / b u t t o n >
2020-09-28 01:00:10 +00:00
`
} )
2020-09-29 22:31:38 +00:00
// data = function to return the text describing the reset before the amount gained (optional)
2020-09-28 01:00:10 +00:00
Vue . component ( 'prestige-button' , {
2020-09-29 22:31:38 +00:00
props : [ 'layer' , 'data' ] ,
2020-09-28 01:00:10 +00:00
template : `
2020-09-29 22:31:38 +00:00
< span >
2020-10-03 19:45:47 +00:00
< button v - if = "layers[layer].type=='normal'" v - bind : class = "{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.layerReqs[layer]), can: tmp.layerAmt[layer].gte(tmp.layerReqs[layer]) }" v - bind : style = "{'background-color': tmp.layerColor[layer]}" v - on : click = "doReset(layer)" > < span v - if = "player[layer].points.lt(1e3)" > { { data ? data ( ) : "Reset for " } } < / s p a n > + < b > { { f o r m a t W h o l e ( t m p . r e s e t G a i n [ l a y e r ] ) } } < / b > { { l a y e r s [ l a y e r ] . r e s o u r c e } } < s p a n v - i f = " t m p . r e s e t G a i n [ l a y e r ] . l t ( 1 0 0 ) & & p l a y e r [ l a y e r ] . p o i n t s . l t ( 1 e 3 ) " > < b r > < b r > N e x t a t { { ( l a y e r s [ l a y e r ] . r e s C e i l ? f o r m a t W h o l e ( t m p . n e x t A t [ l a y e r ] ) : f o r m a t ( t m p . n e x t A t [ l a y e r ] ) ) } } { { l a y e r s [ l a y e r ] . b a s e R e s o u r c e } } < / s p a n > < / b u t t o n >
< button v - if = "layers[layer].type=='static'" v - bind : class = "{ [layer]: true, reset: true, locked: tmp.layerAmt[layer].lt(tmp.nextAt[layer]), can: tmp.layerAmt[layer].gte(tmp.nextAt[layer]) }" v - bind : style = "{'background-color': tmp.layerColor[layer]}" v - on : click = "doReset(layer)" > < span v - if = "player[layer].points.lt(10)" > { { data ? data ( ) : "Reset for " } } < / s p a n > + < b > { { f o r m a t W h o l e ( t m p . r e s e t G a i n [ l a y e r ] ) } } < / b > { { l a y e r s [ l a y e r ] . r e s o u r c e } } < b r > < b r > < s p a n v - i f = " p l a y e r [ l a y e r ] . p o i n t s . l t ( 1 0 ) " > R e q : { { f o r m a t W h o l e ( t m p . l a y e r A m t [ l a y e r ] ) } } / < / s p a n > { { ( l a y e r s [ l a y e r ] . r e s C e i l ? f o r m a t W h o l e ( t m p . n e x t A t [ l a y e r ] ) : f o r m a t ( t m p . n e x t A t [ l a y e r ] ) ) } } { { l a y e r s [ l a y e r ] . b a s e R e s o u r c e } } < / b u t t o n >
2020-09-29 22:31:38 +00:00
< / s p a n >
2020-09-28 01:00:10 +00:00
`
} )
2020-09-29 22:31:38 +00:00
// Displays the main resource for the layer
Vue . component ( 'main-display' , {
props : [ 'layer' ] ,
2020-09-28 01:00:10 +00:00
template : `
2020-10-03 19:45:47 +00:00
< div > < span v - if = "player[layer].points.lt('1e1000')" > You have < / s p a n > < h 2 v - b i n d : s t y l e = " { ' c o l o r ' : t m p . l a y e r C o l o r [ l a y e r ] , ' t e x t - s h a d o w ' : ' 0 p x 0 p x 1 0 p x ' + t m p . l a y e r C o l o r [ l a y e r ] } " > { { f o r m a t W h o l e ( p l a y e r [ l a y e r ] . p o i n t s ) } } < / h 2 > { { l a y e r s [ l a y e r ] . r e s o u r c e } } < s p a n v - i f = " l a y e r s [ l a y e r ] . e f f e c t D e s c r i p t i o n " > , { { t m p . e f f e c t D e s c r i p t i o n [ l a y e r ] } } < / s p a n > < b r > < b r > < / s p a n >
2020-09-28 01:00:10 +00:00
`
} )
2020-10-01 00:25:14 +00:00
// data = button size, in px
Vue . component ( 'buyables' , {
props : [ 'layer' , 'data' ] ,
template : `
< div v - if = "layers[layer].buyables" class = "upgTable" >
2020-10-03 19:45:47 +00:00
< button v - if = "layers[layer].buyables.respec" v - on : click = "respecBuyables(layer)" v - bind : class = "{ longUpg: true, can: player[layer].unl, locked: !player[layer].unl }" > { { layers [ layer ] . buyables . respecText ? tmp . buyables [ layer ] . respecText : "Respec" } } < / b u t t o n > < b r >
2020-10-01 00:25:14 +00:00
< div v - for = "row in layers[layer].buyables.rows" class = "upgRow" >
< div v - for = "col in layers[layer].buyables.cols" class = "upgAlign" v - bind : style = "{'margin-left': '7px', 'margin-right': '7px', 'height': (data ? data : '200px'),}" >
< buyable : layer = "layer" : data = "row*10+col" : size = "data" > < / b u y a b l e >
< / d i v >
< br >
< / d i v >
< / d i v >
`
} )
// data = id of buyable
Vue . component ( 'buyable' , {
props : [ 'layer' , 'data' , 'size' ] ,
template : `
< div v - if = "layers[layer].buyables" >
< button
2020-10-03 19:45:47 +00:00
v - if = "tmp.buyables[layer][data].unl"
v - bind : class = "{ upg: true, can: tmp.buyables[layer][data].canAfford, locked: !tmp.buyables[layer][data].canAfford}"
v - bind : style = "{'background-color': tmp.layerColor[layer], 'height': (size ? size : '200px'), 'width': (size ? size : '200px')}"
2020-10-01 00:25:14 +00:00
v - on : click = "buyBuyable(layer, data)" >
2020-10-03 19:45:47 +00:00
< span v - if = "layers[layer].buyables[data].title" > < h2 > { { tmp . buyables [ layer ] [ data ] . title } } < / h 2 > < b r > < / s p a n >
< span v - bind : style = "{'white-space': 'pre-line'}" > { { tmp . buyables [ layer ] [ data ] . display } } < / s p a n >
2020-10-01 00:25:14 +00:00
< / b u t t o n >
< / d i v >
`
} )
2020-08-19 02:50:24 +00:00
app = new Vue ( {
2020-09-11 02:15:05 +00:00
el : "#app" ,
data : {
player ,
tmp ,
Decimal ,
format ,
formatWhole ,
formatTime ,
focused ,
2020-09-14 19:26:10 +00:00
getThemeName ,
2020-09-11 02:15:05 +00:00
layerUnl ,
doReset ,
buyUpg ,
2020-09-14 02:41:42 +00:00
startChall ,
2020-09-11 02:15:05 +00:00
milestoneShown ,
keepGoing ,
2020-09-14 19:26:10 +00:00
VERSION ,
ENDGAME ,
2020-10-01 01:30:50 +00:00
LAYERS ,
hotkeys
2020-09-11 02:15:05 +00:00
} ,
2020-08-19 02:50:24 +00:00
} )
}