2020-10-03 19:45:47 +00:00
|
|
|
var layers = {}
|
|
|
|
|
2020-10-27 21:41:35 +00:00
|
|
|
const decimalZero = new Decimal(0)
|
|
|
|
const decimalOne = new Decimal(1)
|
|
|
|
const decimalNaN = new Decimal(NaN)
|
|
|
|
|
2020-10-03 19:45:47 +00:00
|
|
|
function layerShown(layer){
|
2020-12-14 03:23:12 +00:00
|
|
|
return tmp[layer].layerShown;
|
2020-10-03 19:45:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var LAYERS = Object.keys(layers);
|
|
|
|
|
|
|
|
var hotkeys = {};
|
|
|
|
|
2020-10-21 17:03:39 +00:00
|
|
|
var maxRow = 0;
|
|
|
|
|
2020-10-03 19:45:47 +00:00
|
|
|
function updateHotkeys()
|
|
|
|
{
|
|
|
|
hotkeys = {};
|
|
|
|
for (layer in layers){
|
|
|
|
hk = layers[layer].hotkeys
|
|
|
|
if (hk){
|
|
|
|
for (id in hk){
|
|
|
|
hotkeys[hk[id].key] = hk[id]
|
2020-11-29 02:25:53 +00:00
|
|
|
hotkeys[hk[id].key].layer = layer
|
|
|
|
hotkeys[hk[id].key].id = id
|
|
|
|
if (hk[id].unlocked === undefined)
|
|
|
|
hk[id].unlocked = true
|
2020-10-03 19:45:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var ROW_LAYERS = {}
|
2020-10-11 03:26:26 +00:00
|
|
|
var TREE_LAYERS = {}
|
2020-10-14 23:34:15 +00:00
|
|
|
var OTHER_LAYERS = {}
|
2020-10-03 19:45:47 +00:00
|
|
|
|
|
|
|
function updateLayers(){
|
|
|
|
LAYERS = Object.keys(layers);
|
|
|
|
ROW_LAYERS = {}
|
2020-10-11 03:26:26 +00:00
|
|
|
TREE_LAYERS = {}
|
2020-10-15 20:55:11 +00:00
|
|
|
OTHER_LAYERS = {}
|
2020-10-03 19:45:47 +00:00
|
|
|
for (layer in layers){
|
2020-12-13 03:14:55 +00:00
|
|
|
setupLayer(layer)
|
2020-10-11 03:26:26 +00:00
|
|
|
}
|
2020-10-15 20:55:11 +00:00
|
|
|
for (row in OTHER_LAYERS) {
|
|
|
|
OTHER_LAYERS[row].sort((a, b) => (a.position > b.position) ? 1 : -1)
|
2020-10-28 02:04:16 +00:00
|
|
|
for (layer in OTHER_LAYERS[row])
|
|
|
|
OTHER_LAYERS[row][layer] = OTHER_LAYERS[row][layer].layer
|
2020-10-15 20:55:11 +00:00
|
|
|
}
|
2020-10-11 03:26:26 +00:00
|
|
|
for (row in TREE_LAYERS) {
|
|
|
|
TREE_LAYERS[row].sort((a, b) => (a.position > b.position) ? 1 : -1)
|
2020-10-28 02:04:16 +00:00
|
|
|
for (layer in TREE_LAYERS[row])
|
|
|
|
TREE_LAYERS[row][layer] = TREE_LAYERS[row][layer].layer
|
2020-10-03 19:45:47 +00:00
|
|
|
}
|
2020-10-28 02:04:16 +00:00
|
|
|
let treeLayers2 = []
|
|
|
|
for (x = 0; x < maxRow + 1; x++) {
|
|
|
|
if (TREE_LAYERS[x]) treeLayers2.push(TREE_LAYERS[x])
|
|
|
|
}
|
|
|
|
TREE_LAYERS = treeLayers2
|
2020-10-03 19:45:47 +00:00
|
|
|
updateHotkeys()
|
|
|
|
}
|
|
|
|
|
2020-12-13 03:14:55 +00:00
|
|
|
function setupLayer(layer){
|
|
|
|
layers[layer].layer = layer
|
|
|
|
if (layers[layer].upgrades){
|
2021-04-29 22:20:31 +00:00
|
|
|
setRowCol(layers[layer].upgrades)
|
2020-12-13 03:14:55 +00:00
|
|
|
for (thing in layers[layer].upgrades){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].upgrades[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].upgrades[thing].id = thing
|
|
|
|
layers[layer].upgrades[thing].layer = layer
|
|
|
|
if (layers[layer].upgrades[thing].unlocked === undefined)
|
|
|
|
layers[layer].upgrades[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (layers[layer].milestones){
|
|
|
|
for (thing in layers[layer].milestones){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].milestones[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].milestones[thing].id = thing
|
|
|
|
layers[layer].milestones[thing].layer = layer
|
|
|
|
if (layers[layer].milestones[thing].unlocked === undefined)
|
|
|
|
layers[layer].milestones[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (layers[layer].achievements){
|
2021-04-29 22:20:31 +00:00
|
|
|
setRowCol(layers[layer].achievements)
|
2020-12-13 03:14:55 +00:00
|
|
|
for (thing in layers[layer].achievements){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].achievements[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].achievements[thing].id = thing
|
|
|
|
layers[layer].achievements[thing].layer = layer
|
|
|
|
if (layers[layer].achievements[thing].unlocked === undefined)
|
|
|
|
layers[layer].achievements[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (layers[layer].challenges){
|
2021-04-29 22:20:31 +00:00
|
|
|
setRowCol(layers[layer].challenges)
|
2020-12-13 03:14:55 +00:00
|
|
|
for (thing in layers[layer].challenges){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].challenges[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].challenges[thing].id = thing
|
|
|
|
layers[layer].challenges[thing].layer = layer
|
|
|
|
if (layers[layer].challenges[thing].unlocked === undefined)
|
|
|
|
layers[layer].challenges[thing].unlocked = true
|
|
|
|
if (layers[layer].challenges[thing].completionLimit === undefined)
|
|
|
|
layers[layer].challenges[thing].completionLimit = 1
|
2021-05-14 19:32:20 +00:00
|
|
|
else if (layers[layer].challenges[thing].marked === undefined)
|
|
|
|
layers[layer].challenges[thing].marked = function() {return maxedChallenge(this.layer, this.id)}
|
2020-12-13 03:14:55 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (layers[layer].buyables){
|
|
|
|
layers[layer].buyables.layer = layer
|
2021-04-29 22:20:31 +00:00
|
|
|
setRowCol(layers[layer].buyables)
|
2020-12-13 03:14:55 +00:00
|
|
|
for (thing in layers[layer].buyables){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].buyables[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].buyables[thing].id = thing
|
|
|
|
layers[layer].buyables[thing].layer = layer
|
|
|
|
if (layers[layer].buyables[thing].unlocked === undefined)
|
|
|
|
layers[layer].buyables[thing].unlocked = true
|
2021-05-01 02:40:59 +00:00
|
|
|
layers[layer].buyables[thing].canBuy = function() {return canBuyBuyable(this.layer, this.id)}
|
|
|
|
if (layers[layer].buyables[thing].purchaseLimit === undefined) layers[layer].buyables[thing].purchaseLimit = new Decimal(Infinity)
|
2021-05-13 03:21:39 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2020-12-13 03:14:55 +00:00
|
|
|
}
|
2021-05-13 05:44:40 +00:00
|
|
|
|
2020-12-13 03:14:55 +00:00
|
|
|
if (layers[layer].clickables){
|
|
|
|
layers[layer].clickables.layer = layer
|
2021-04-29 22:20:31 +00:00
|
|
|
setRowCol(layers[layer].clickables)
|
2020-12-13 03:14:55 +00:00
|
|
|
for (thing in layers[layer].clickables){
|
2021-05-13 05:44:40 +00:00
|
|
|
if (isPlainObject(layers[layer].clickables[thing])){
|
2020-12-13 03:14:55 +00:00
|
|
|
layers[layer].clickables[thing].id = thing
|
|
|
|
layers[layer].clickables[thing].layer = layer
|
|
|
|
if (layers[layer].clickables[thing].unlocked === undefined)
|
|
|
|
layers[layer].clickables[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (layers[layer].bars){
|
|
|
|
layers[layer].bars.layer = layer
|
|
|
|
for (thing in layers[layer].bars){
|
|
|
|
layers[layer].bars[thing].id = thing
|
|
|
|
layers[layer].bars[thing].layer = layer
|
|
|
|
if (layers[layer].bars[thing].unlocked === undefined)
|
|
|
|
layers[layer].bars[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (layers[layer].infoboxes){
|
|
|
|
for (thing in layers[layer].infoboxes){
|
|
|
|
layers[layer].infoboxes[thing].id = thing
|
|
|
|
layers[layer].infoboxes[thing].layer = layer
|
|
|
|
if (layers[layer].infoboxes[thing].unlocked === undefined)
|
|
|
|
layers[layer].infoboxes[thing].unlocked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-11 06:27:50 +00:00
|
|
|
if (layers[layer].grid) {
|
|
|
|
layers[layer].grid.layer = layer
|
|
|
|
if (layers[layer].grid.getUnlocked === undefined)
|
|
|
|
layers[layer].grid.getUnlocked = true
|
|
|
|
if (layers[layer].grid.getCanClick === undefined)
|
|
|
|
layers[layer].grid.getCanClick = true
|
|
|
|
|
|
|
|
}
|
2020-12-13 03:14:55 +00:00
|
|
|
if (layers[layer].startData) {
|
|
|
|
data = layers[layer].startData()
|
|
|
|
if (data.best !== undefined && data.showBest === undefined) layers[layer].showBest = true
|
|
|
|
if (data.total !== undefined && data.showTotal === undefined) layers[layer].showTotal = true
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!layers[layer].componentStyles) layers[layer].componentStyles = {}
|
|
|
|
if(layers[layer].symbol === undefined) layers[layer].symbol = layer.charAt(0).toUpperCase() + layer.slice(1)
|
|
|
|
if(layers[layer].unlockOrder === undefined) layers[layer].unlockOrder = []
|
2021-05-11 00:19:29 +00:00
|
|
|
if(layers[layer].gainMult === undefined) layers[layer].gainMult = decimalOne
|
|
|
|
if(layers[layer].gainExp === undefined) layers[layer].gainExp = decimalOne
|
|
|
|
if(layers[layer].directMult === undefined) layers[layer].directMult = decimalOne
|
2020-12-13 03:14:55 +00:00
|
|
|
if(layers[layer].type === undefined) layers[layer].type = "none"
|
|
|
|
if(layers[layer].base === undefined || layers[layer].base <= 1) layers[layer].base = 2
|
|
|
|
if(layers[layer].softcap === undefined) layers[layer].softcap = new Decimal("e1e7")
|
|
|
|
if(layers[layer].softcapPower === undefined) layers[layer].softcapPower = new Decimal("0.5")
|
|
|
|
if(layers[layer].displayRow === undefined) layers[layer].displayRow = layers[layer].row
|
|
|
|
if(layers[layer].name === undefined) layers[layer].name = layer
|
2020-12-14 03:23:12 +00:00
|
|
|
if(layers[layer].layerShown === undefined) layers[layer].layerShown = true
|
2021-05-07 23:24:32 +00:00
|
|
|
if(layers[layer].glowColor === undefined) layers[layer].glowColor = "#ff0000"
|
2020-12-13 03:14:55 +00:00
|
|
|
|
|
|
|
let row = layers[layer].row
|
|
|
|
|
|
|
|
let displayRow = layers[layer].displayRow
|
|
|
|
|
|
|
|
if(!ROW_LAYERS[row]) ROW_LAYERS[row] = {}
|
|
|
|
if(!TREE_LAYERS[displayRow] && !isNaN(displayRow)) TREE_LAYERS[displayRow] = []
|
|
|
|
if(!OTHER_LAYERS[displayRow] && isNaN(displayRow)) OTHER_LAYERS[displayRow] = []
|
|
|
|
|
|
|
|
ROW_LAYERS[row][layer]=layer;
|
|
|
|
let position = (layers[layer].position !== undefined ? layers[layer].position : layer)
|
|
|
|
|
2021-05-31 03:33:56 +00:00
|
|
|
if (!isNaN(displayRow) || displayRow < 0) TREE_LAYERS[displayRow].push({layer: layer, position: position})
|
2020-12-13 03:14:55 +00:00
|
|
|
else OTHER_LAYERS[displayRow].push({layer: layer, position: position})
|
|
|
|
|
|
|
|
if (maxRow < layers[layer].displayRow) maxRow = layers[layer].displayRow
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-12-05 19:52:29 +00:00
|
|
|
|
|
|
|
function addLayer(layerName, layerData, tabLayers = null){ // Call this to add layers from a different file!
|
2020-10-03 19:45:47 +00:00
|
|
|
layers[layerName] = layerData
|
2020-10-28 02:04:16 +00:00
|
|
|
layers[layerName].isLayer = true
|
2020-12-05 19:52:29 +00:00
|
|
|
if (tabLayers !== null)
|
|
|
|
{
|
|
|
|
let format = {}
|
|
|
|
for (id in tabLayers) {
|
|
|
|
layer = tabLayers[id]
|
|
|
|
format[(layers[layer].name ? layers[layer].name : layer)] = {
|
|
|
|
embedLayer: layer,
|
|
|
|
buttonStyle() {
|
|
|
|
if (!tmp[this.embedLayer].nodeStyle) return {'border-color': tmp[this.embedLayer].color}
|
|
|
|
else {
|
|
|
|
style = tmp[this.embedLayer].nodeStyle
|
|
|
|
if (style['border-color'] === undefined) style['border-color'] = tmp[this.embedLayer].color
|
|
|
|
return style
|
|
|
|
}
|
|
|
|
},
|
|
|
|
unlocked() {return tmp[this.embedLayer].layerShown},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
layers[layerName].tabFormat = format
|
|
|
|
}
|
2020-10-03 19:45:47 +00:00
|
|
|
}
|
|
|
|
|
2020-11-30 20:03:26 +00:00
|
|
|
function addNode(layerName, layerData){ // Does the same thing, but for non-layer nodes
|
2020-10-28 02:04:16 +00:00
|
|
|
layers[layerName] = layerData
|
|
|
|
layers[layerName].isLayer = false
|
|
|
|
}
|
|
|
|
|
2020-10-03 19:45:47 +00:00
|
|
|
// If data is a function, return the result of calling it. Otherwise, return the data.
|
|
|
|
function readData(data, args=null){
|
2020-12-13 03:05:11 +00:00
|
|
|
if ((!!data && data.constructor && data.call && data.apply))
|
2020-10-03 19:45:47 +00:00
|
|
|
return data(args);
|
|
|
|
else
|
|
|
|
return data;
|
2020-10-09 03:13:15 +00:00
|
|
|
}
|
|
|
|
|
2021-04-29 22:20:31 +00:00
|
|
|
function setRowCol(upgrades) {
|
2021-04-29 22:52:50 +00:00
|
|
|
if (upgrades.rows && upgrades.cols) return
|
2021-04-29 22:20:31 +00:00
|
|
|
let maxRow = 0
|
|
|
|
let maxCol = 0
|
|
|
|
for (up in upgrades) {
|
|
|
|
if (!isNaN(up)) {
|
|
|
|
if (Math.floor(up/10) > maxRow) maxRow = Math.floor(up/10)
|
|
|
|
if (up%10 > maxCol) maxCol = up%10
|
|
|
|
}
|
|
|
|
}
|
|
|
|
upgrades.rows = maxRow
|
|
|
|
upgrades.cols = maxCol
|
|
|
|
}
|
|
|
|
|
2020-10-11 03:26:26 +00:00
|
|
|
function someLayerUnlocked(row){
|
|
|
|
for (layer in ROW_LAYERS[row])
|
2020-10-13 03:08:19 +00:00
|
|
|
if (player[layer].unlocked)
|
2020-10-11 03:26:26 +00:00
|
|
|
return true
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2020-10-12 22:28:12 +00:00
|
|
|
|
2020-10-09 03:13:15 +00:00
|
|
|
// This isn't worth making a .ts file over
|
2020-10-12 22:28:12 +00:00
|
|
|
const UP = 0
|
|
|
|
const DOWN = 1
|
|
|
|
const LEFT = 2
|
|
|
|
const RIGHT = 3
|
2020-10-30 23:40:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
addLayer("info-tab", {
|
|
|
|
tabFormat: ["info-tab"],
|
|
|
|
row: "otherside"
|
|
|
|
})
|
|
|
|
|
|
|
|
addLayer("options-tab", {
|
|
|
|
tabFormat: ["options-tab"],
|
|
|
|
row: "otherside"
|
2020-12-05 19:52:29 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
addLayer("changelog-tab", {
|
|
|
|
tabFormat() {return ([["raw-html", modInfo.changelog]])},
|
|
|
|
row: "otherside"
|
2020-10-30 23:40:48 +00:00
|
|
|
})
|