mirror of
https://github.com/Acamaeda/The-Modding-Tree.git
synced 2024-11-21 16:13:55 +00:00
Added buyable purchase limit
This commit is contained in:
parent
4af32d5c71
commit
87a32fbcce
6 changed files with 20 additions and 8 deletions
|
@ -1,5 +1,6 @@
|
||||||
# The Modding Tree changelog:
|
# The Modding Tree changelog:
|
||||||
|
|
||||||
|
- Added buyable purchaseLimit.
|
||||||
- Amount is automatically supplied to buyable cost and effect functions.
|
- Amount is automatically supplied to buyable cost and effect functions.
|
||||||
|
|
||||||
# v2.4.1 - 4/29/21
|
# v2.4.1 - 4/29/21
|
||||||
|
|
|
@ -35,7 +35,7 @@ Features:
|
||||||
- cost(): cost for buying the next buyable. Can have an optional argument "x" to calculate the cost of the x+1th purchase. (x is a `Decimal`).
|
- cost(): cost for buying the next buyable. Can have an optional argument "x" to calculate the cost of the x+1th purchase. (x is a `Decimal`).
|
||||||
Can return an object if there are multiple currencies.
|
Can return an object if there are multiple currencies.
|
||||||
|
|
||||||
- effect(): **optional**. A function that calculates and returns the current values of bonuses of this buyable. Can have an optional argument "x", similar to cost.
|
- effect(): **optional**. A function that calculates and returns the current values of bonuses of this buyable. Can have an optional argument "x" to calculate the effect of having x of the buyable..
|
||||||
Can return a value or an object containing multiple values.
|
Can return a value or an object containing multiple values.
|
||||||
|
|
||||||
- display(): A function returning everything that should be displayed on the buyable after the title, likely including the description, amount bought, cost, and current effect. Can use basic HTML.
|
- display(): A function returning everything that should be displayed on the buyable after the title, likely including the description, amount bought, cost, and current effect. Can use basic HTML.
|
||||||
|
@ -49,7 +49,9 @@ Features:
|
||||||
- buyMax(): **optional**. A function that implements buying as many of the buyable as possible.
|
- buyMax(): **optional**. A function that implements buying as many of the buyable as possible.
|
||||||
|
|
||||||
- style: **optional**. Applies CSS to this buyable, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).
|
- style: **optional**. Applies CSS to this buyable, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).
|
||||||
|
|
||||||
|
- purchaseLimit: **optional**. The limit on how many of the buyable can be bought. The default is no limit.
|
||||||
|
|
||||||
- layer: **assigned automagically**. It's the same value as the name of this layer, so you can do `player[this.layer].points` or similar.
|
- layer: **assigned automagically**. It's the same value as the name of this layer, so you can do `player[this.layer].points` or similar.
|
||||||
|
|
||||||
- id: **assigned automagically**. It's the "key" which the buyable was stored under, for convenient access. The buyable in the example's id is 11.
|
- id: **assigned automagically**. It's the "key" which the buyable was stored under, for convenient access. The buyable in the example's id is 11.
|
||||||
|
|
|
@ -175,7 +175,7 @@ addLayer("c", {
|
||||||
display() { // Everything else displayed in the buyable button after the title
|
display() { // Everything else displayed in the buyable button after the title
|
||||||
let data = tmp[this.layer].buyables[this.id]
|
let data = tmp[this.layer].buyables[this.id]
|
||||||
return "Cost: " + format(data.cost) + " lollipops\n\
|
return "Cost: " + format(data.cost) + " lollipops\n\
|
||||||
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
Amount: " + player[this.layer].buyables[this.id] + "/4\n\
|
||||||
Adds + " + format(data.effect.first) + " things and multiplies stuff by " + format(data.effect.second)
|
Adds + " + format(data.effect.first) + " things and multiplies stuff by " + format(data.effect.second)
|
||||||
},
|
},
|
||||||
unlocked() { return player[this.layer].unlocked },
|
unlocked() { return player[this.layer].unlocked },
|
||||||
|
@ -189,6 +189,7 @@ addLayer("c", {
|
||||||
},
|
},
|
||||||
buyMax() {}, // You'll have to handle this yourself if you want
|
buyMax() {}, // You'll have to handle this yourself if you want
|
||||||
style: {'height':'222px'},
|
style: {'height':'222px'},
|
||||||
|
purchaseLimit: new Decimal(4),
|
||||||
sellOne() {
|
sellOne() {
|
||||||
let amount = getBuyableAmount(this.layer, this.id)
|
let amount = getBuyableAmount(this.layer, this.id)
|
||||||
if (amount.lte(0)) return // Only sell one if there is at least one
|
if (amount.lte(0)) return // Only sell one if there is at least one
|
||||||
|
@ -360,7 +361,7 @@ addLayer("c", {
|
||||||
},
|
},
|
||||||
tooltip() { // Optional, tooltip displays when the layer is unlocked
|
tooltip() { // Optional, tooltip displays when the layer is unlocked
|
||||||
let tooltip = formatWhole(player[this.layer].points) + " " + this.resource
|
let tooltip = formatWhole(player[this.layer].points) + " " + this.resource
|
||||||
if (player[this.layer].buyables[11].gt(0)) tooltip += "<br>" + formatWhole(player[this.layer].buyables[11]) + " Exhancers"
|
if (player[this.layer].buyables[11].gt(0)) tooltip += "<br><i>" + formatWhole(player[this.layer].buyables[11]) + " Exhancers</i>"
|
||||||
return tooltip
|
return tooltip
|
||||||
},
|
},
|
||||||
shouldNotify() { // Optional, layer will be highlighted on the tree if true.
|
shouldNotify() { // Optional, layer will be highlighted on the tree if true.
|
||||||
|
|
|
@ -257,8 +257,8 @@ function loadVue() {
|
||||||
props: ['layer', 'data', 'size'],
|
props: ['layer', 'data', 'size'],
|
||||||
template: `
|
template: `
|
||||||
<div v-if="tmp[layer].buyables && tmp[layer].buyables[data]!== undefined && tmp[layer].buyables[data].unlocked" style="display: grid">
|
<div v-if="tmp[layer].buyables && tmp[layer].buyables[data]!== undefined && tmp[layer].buyables[data].unlocked" style="display: grid">
|
||||||
<button v-bind:class="{ buyable: true, can: tmp[layer].buyables[data].canAfford, locked: !tmp[layer].buyables[data].canAfford}"
|
<button v-bind:class="{ buyable: true, can: tmp[layer].buyables[data].canBuy, locked: !tmp[layer].buyables[data].canAfford, bought: player[layer].buyables[data].gte(tmp[layer].buyables[data].purchaseLimit)}"
|
||||||
v-bind:style="[tmp[layer].buyables[data].canAfford ? {'background-color': tmp[layer].color} : {}, size ? {'height': size, 'width': size} : {}, tmp[layer].componentStyles.buyable, tmp[layer].buyables[data].style]"
|
v-bind:style="[tmp[layer].buyables[data].canBuy ? {'background-color': tmp[layer].color} : {}, size ? {'height': size, 'width': size} : {}, tmp[layer].componentStyles.buyable, tmp[layer].buyables[data].style]"
|
||||||
v-on:click="buyBuyable(layer, data)">
|
v-on:click="buyBuyable(layer, data)">
|
||||||
<span v-if= "tmp[layer].buyables[data].title"><h2 v-html="tmp[layer].buyables[data].title"></h2><br></span>
|
<span v-if= "tmp[layer].buyables[data].title"><h2 v-html="tmp[layer].buyables[data].title"></h2><br></span>
|
||||||
<span v-bind:style="{'white-space': 'pre-line'}" v-html="tmp[layer].buyables[data].display"></span>
|
<span v-bind:style="{'white-space': 'pre-line'}" v-html="tmp[layer].buyables[data].display"></span>
|
||||||
|
@ -469,6 +469,7 @@ function loadVue() {
|
||||||
maxedChallenge,
|
maxedChallenge,
|
||||||
inChallenge,
|
inChallenge,
|
||||||
canAffordUpgrade,
|
canAffordUpgrade,
|
||||||
|
canBuyBuyable,
|
||||||
canCompleteChallenge,
|
canCompleteChallenge,
|
||||||
subtabShouldNotify,
|
subtabShouldNotify,
|
||||||
subtabResetNotify,
|
subtabResetNotify,
|
||||||
|
|
|
@ -118,7 +118,9 @@ function setupLayer(layer){
|
||||||
layers[layer].buyables[thing].layer = layer
|
layers[layer].buyables[thing].layer = layer
|
||||||
if (layers[layer].buyables[thing].unlocked === undefined)
|
if (layers[layer].buyables[thing].unlocked === undefined)
|
||||||
layers[layer].buyables[thing].unlocked = true
|
layers[layer].buyables[thing].unlocked = true
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,11 @@ function canAffordUpgrade(layer, id) {
|
||||||
return canAffordPurchase(layer, upg, cost)
|
return canAffordPurchase(layer, upg, cost)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function canBuyBuyable(layer, id) {
|
||||||
|
let b = temp[layer].buyables[id]
|
||||||
|
return (b.unlocked && b.canAfford && player[layer].buyables[id].lt(b.purchaseLimit))
|
||||||
|
}
|
||||||
|
|
||||||
function hasUpgrade(layer, id) {
|
function hasUpgrade(layer, id) {
|
||||||
return (player[layer].upgrades.includes(toNumber(id)) || player[layer].upgrades.includes(id.toString()))
|
return (player[layer].upgrades.includes(toNumber(id)) || player[layer].upgrades.includes(id.toString()))
|
||||||
}
|
}
|
||||||
|
@ -152,7 +157,7 @@ function buyMaxBuyable(layer, id) {
|
||||||
function buyBuyable(layer, id) {
|
function buyBuyable(layer, id) {
|
||||||
if (!player[layer].unlocked) return
|
if (!player[layer].unlocked) return
|
||||||
if (!tmp[layer].buyables[id].unlocked) return
|
if (!tmp[layer].buyables[id].unlocked) return
|
||||||
if (!tmp[layer].buyables[id].canAfford) return
|
if (!tmp[layer].buyables[id].canBuy) return
|
||||||
|
|
||||||
run(layers[layer].buyables[id].buy, layers[layer].buyables[id])
|
run(layers[layer].buyables[id].buy, layers[layer].buyables[id])
|
||||||
updateBuyableTemp(layer)
|
updateBuyableTemp(layer)
|
||||||
|
|
Loading…
Reference in a new issue