1
0
Fork 0
mirror of https://github.com/Acamaeda/The-Modding-Tree.git synced 2025-02-16 09:41:41 +00:00

Added side layer reset functionality + documentation

This commit is contained in:
Acamaeda 2020-10-14 19:46:35 -04:00
parent d784a6c2e4
commit d9d2f777a7
5 changed files with 19 additions and 14 deletions

View file

@ -30,7 +30,11 @@ Key:
- color: A color associated with this layer, used in many places. (A string in hex format with a #) - color: A color associated with this layer, used in many places. (A string in hex format with a #)
- row: The row of the layer, starting at 0. - row: The row of the layer, starting at 0. This affects where the node appears on the tree, and which resets affect the layer.
Using "side" instead of a number will cause the layer to appear off to the side as a smaller node (useful for achievements
and statistics). Side layers are not affected by resets unless you add a doReset to them.
- resource: Name of the main currency you gain by resetting on this layer. - resource: Name of the main currency you gain by resetting on this layer.
@ -146,6 +150,7 @@ Key:
- doReset(resettingLayer): **optional**, is triggered when a layer on a row greater than or equal to this one does a reset. - doReset(resettingLayer): **optional**, is triggered when a layer on a row greater than or equal to this one does a reset.
The default behavior is to reset everything on the row, but only if it was triggered by a layer in a higher row. The default behavior is to reset everything on the row, but only if it was triggered by a layer in a higher row.
(doReset is always called for side layers, but for these the default behavior is to reset nothing.)
If you want to keep things, determine what to keep based on the resettingLayer, milestones, and such, then call If you want to keep things, determine what to keep based on the resettingLayer, milestones, and such, then call
resetLayerData(layer, keep), where layer is this layer, and keep is an array of the names of things to keep. resetLayerData(layer, keep), where layer is this layer, and keep is an array of the names of things to keep.

View file

@ -117,11 +117,11 @@ function canReset(layer)
function rowReset(row, layer) { function rowReset(row, layer) {
for (lr in ROW_LAYERS[row]){ for (lr in ROW_LAYERS[row]){
if(layers[lr].doReset) { if(layers[lr].doReset) {
player[lr].active = null // Exit challenges on any row reset on an equal or higher row player[lr].activeChallenge = null // Exit challenges on any row reset on an equal or higher row
layers[lr].doReset(layer) layers[lr].doReset(layer)
} }
else else
if(layers[layer].row > layers[lr].row) layerDataReset(lr) if(layers[layer].row > layers[lr].row && row !== "side") layerDataReset(lr)
} }
} }
@ -208,6 +208,7 @@ function doReset(layer, force=false) {
player.points = (row == 0 ? new Decimal(0) : new Decimal(10)) player.points = (row == 0 ? new Decimal(0) : new Decimal(10))
for (let x = row; x >= 0; x--) rowReset(x, layer) for (let x = row; x >= 0; x--) rowReset(x, layer)
rowReset("side", layer)
prevOnReset = undefined prevOnReset = undefined
updateTemp() updateTemp()
@ -233,21 +234,21 @@ function resetRow(row) {
function startChallenge(layer, x) { function startChallenge(layer, x) {
let enter = false let enter = false
if (!player[layer].unlocked) return if (!player[layer].unlocked) return
if (player[layer].active == x) { if (player[layer].activeChallenge == x) {
completeChallenge(layer, x) completeChallenge(layer, x)
delete player[layer].active delete player[layer].activeChallenge
} else { } else {
enter = true enter = true
} }
doReset(layer, true) doReset(layer, true)
if(enter) player[layer].active = x if(enter) player[layer].activeChallenge = x
updateChallengeTemp(layer) updateChallengeTemp(layer)
} }
function canCompleteChallenge(layer, x) function canCompleteChallenge(layer, x)
{ {
if (x != player[layer].active) return if (x != player[layer].activeChallenge) return
let challenge = layers[layer].challenges[x] let challenge = layers[layer].challenges[x]
@ -268,10 +269,10 @@ function canCompleteChallenge(layer, x)
} }
function completeChallenge(layer, x) { function completeChallenge(layer, x) {
var x = player[layer].active var x = player[layer].activeChallenge
if (!x) return if (!x) return
if (! canCompleteChallenge(layer, x)){ if (! canCompleteChallenge(layer, x)){
delete player[layer].active delete player[layer].activeChallenge
return return
} }
if (player[layer].challenges[x] < tmp[layer].challenges[x].completionLimit) { if (player[layer].challenges[x] < tmp[layer].challenges[x].completionLimit) {
@ -279,7 +280,7 @@ function completeChallenge(layer, x) {
player[layer].challenges[x] += 1 player[layer].challenges[x] += 1
if (layers[layer].challenges[x].onComplete) layers[layer].challenges[x].onComplete() if (layers[layer].challenges[x].onComplete) layers[layer].challenges[x].onComplete()
} }
delete player[layer].active delete player[layer].activeChallenge
updateChallengeTemp(layer) updateChallengeTemp(layer)
} }

View file

@ -592,7 +592,6 @@ addLayer("a", {
tooltipUnlocked() { // Optional, tooltip displays when the layer is locked tooltipUnlocked() { // Optional, tooltip displays when the layer is locked
return ("YEETS") return ("YEETS")
}, },
}, },
) )

View file

@ -479,7 +479,7 @@ function clickClickable(layer, id) {
// Function to determine if the player is in a challenge // Function to determine if the player is in a challenge
function inChallenge(layer, id){ function inChallenge(layer, id){
let challenge = player[layer].active let challenge = player[layer].activeChallenge
if (challenge==toNumber(id)) return true if (challenge==toNumber(id)) return true
if (layers[layer].challenges[challenge].countsAs) if (layers[layer].challenges[challenge].countsAs)

View file

@ -103,9 +103,9 @@ function loadVue() {
Vue.component('challenge', { Vue.component('challenge', {
props: ['layer', 'data'], props: ['layer', 'data'],
template: ` template: `
<div v-if="layers[layer].challenges && layers[layer].challenges[data]!== undefined && tmp[layer].challenges[data].unlocked && !(player.hideChallenges && hasChallenge(layer, [data]))" v-bind:class="{hChallenge: true, done: hasChallenge(layer, data), canComplete: player[layer].active == data&&!hasChallenge(layer, data)&&canCompleteChallenge(layer, data)}"> <div v-if="layers[layer].challenges && layers[layer].challenges[data]!== undefined && tmp[layer].challenges[data].unlocked && !(player.hideChallenges && hasChallenge(layer, [data]))" v-bind:class="{hChallenge: true, done: hasChallenge(layer, data), canComplete: player[layer].activeChallenge == data&&!hasChallenge(layer, data)&&canCompleteChallenge(layer, data)}">
<br><h3 v-html="tmp[layer].challenges[data].name"></h3><br><br> <br><h3 v-html="tmp[layer].challenges[data].name"></h3><br><br>
<button v-bind:class="{ longUpg: true, can: true, [layer]: true }" v-bind:style="{'background-color': tmp[layer].color}" v-on:click="startChallenge(layer, data)">{{player[layer].active==(data)?(canCompleteChallenge(layer, data)?"Finish":"Exit Early"):(hasChallenge(layer, data)?"Completed":"Start")}}</button><br><br> <button v-bind:class="{ longUpg: true, can: true, [layer]: true }" v-bind:style="{'background-color': tmp[layer].color}" v-on:click="startChallenge(layer, data)">{{player[layer].activeChallenge==(data)?(canCompleteChallenge(layer, data)?"Finish":"Exit Early"):(hasChallenge(layer, data)?"Completed":"Start")}}</button><br><br>
<span v-html="tmp[layer].challenges[data].challengeDescription"></span><br> <span v-html="tmp[layer].challenges[data].challengeDescription"></span><br>
Goal: {{format(tmp[layer].challenges[data].goal)}} {{tmp[layer].challenges[data].currencyDisplayName ? tmp[layer].challenges[data].currencyDisplayName : "points"}}<br> Goal: {{format(tmp[layer].challenges[data].goal)}} {{tmp[layer].challenges[data].currencyDisplayName ? tmp[layer].challenges[data].currencyDisplayName : "points"}}<br>
Reward: <span v-html="tmp[layer].challenges[data].rewardDescription"></span><br> Reward: <span v-html="tmp[layer].challenges[data].rewardDescription"></span><br>