mirror of
https://github.com/Acamaeda/The-Modding-Tree.git
synced 2024-11-21 16:13:55 +00:00
Added marks to some other features
This commit is contained in:
parent
01f33b0ebe
commit
4f831f51b0
10 changed files with 30 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
# The Modding Tree changelog:
|
||||
|
||||
- Particle
|
||||
- Added marked feature to buyables, clickables, and challenges. By default, stars multi-completion challenges when maxed.
|
||||
- Improved number formatting more.
|
||||
|
||||
# v2.5.6 - 5/14/21
|
||||
- You can now use non-numeric ids for upgrades, buyables, etc.
|
||||
- Fixed an exploit that let you buy an extra buyable.
|
||||
|
|
|
@ -52,6 +52,8 @@ Features:
|
|||
|
||||
- purchaseLimit: **optional**. The limit on how many of the buyable can be bought. The default is no limit.
|
||||
|
||||
- marked: **optional** Adds a mark to the corner of the buyable. If it's "true" it will be a star, but it can also be an image URL.
|
||||
|
||||
- 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.
|
||||
|
|
|
@ -58,6 +58,8 @@ Individual Challenges can have these features:
|
|||
|
||||
- style: **optional**. Applies CSS to this challenge, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).
|
||||
|
||||
- marked: **optional** Adds a mark to the corner of the challenge. If it's "true" it will be a star, but it can also be an image URL. By default, if the challenge has multiple completions, it will be starred at max completions.
|
||||
|
||||
- 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 challenge was stored under, for convenient access. The challenge in the example's id is 11.
|
||||
|
|
|
@ -42,6 +42,8 @@ Features:
|
|||
|
||||
- style: **optional**. Applies CSS to this clickable, in the form of an object where the keys are CSS attributes, and the values are the values for those attributes (both as strings).
|
||||
|
||||
- marked: **optional** Adds a mark to the corner of the clickable. If it's "true" it will be a star, but it can also be an image URL.
|
||||
|
||||
- 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 clickable was stored under, for convenient access. The clickable in the example's id is 11.
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
</head>
|
||||
|
||||
<body onload="load()">
|
||||
<body onload="load()" onmousemove="updateMouse(event)">
|
||||
<div id="app">
|
||||
<canvas id="treeCanvas" class="canvas" v-if="!(gameEnded && !player.keepGoing)"></canvas>
|
||||
|
||||
|
@ -112,6 +112,11 @@
|
|||
</div>
|
||||
</transition-group>
|
||||
</div>
|
||||
<div class="particle-container">
|
||||
<div v-for="particle,index in particles">
|
||||
<particle :data="particle" :index="index" v-bind:key="'b' + particle.id"></particle>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="player.navTab !== 'none' && player.tab !== 'none' && !(gameEnded && !player.keepGoing)" onscroll="resizeCanvas()" style="background-color:var(--background)" v-bind:class="{ fullWidth: player.navTab == 'none' || !tmp.other.splitScreen || !readData(layoutInfo.showTree), col: player.navTab != 'none', right: player.navTab != 'none', fast: true, tab: true}">
|
||||
<div v-for="layer in LAYERS">
|
||||
|
|
|
@ -527,6 +527,7 @@ addLayer("a", {
|
|||
},
|
||||
},
|
||||
midsection: ["grid", "blank"],
|
||||
marked: true,
|
||||
grid: {
|
||||
maxRows: 3,
|
||||
rows: 2,
|
||||
|
|
|
@ -148,6 +148,8 @@ function loadVue() {
|
|||
Reward: <span v-html="tmp[layer].challenges[data].rewardDescription"></span><br>
|
||||
<span v-if="layers[layer].challenges[data].rewardDisplay!==undefined">Currently: <span v-html="(tmp[layer].challenges[data].rewardDisplay) ? (run(layers[layer].challenges[data].rewardDisplay, layers[layer].challenges[data])) : format(tmp[layer].challenges[data].rewardEffect)"></span></span>
|
||||
</span>
|
||||
<node-mark :layer='layer' :data='tmp[layer].challenges[data].marked' :offset="10"></node-mark></span>
|
||||
|
||||
</div>
|
||||
`
|
||||
})
|
||||
|
@ -275,6 +277,8 @@ function loadVue() {
|
|||
v-on:click="buyBuyable(layer, data)" @mousedown="start" @mouseleave="stop" @mouseup="stop" @touchstart="start" @touchend="stop" @touchcancel="stop">
|
||||
<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="run(layers[layer].buyables[data].display, layers[layer].buyables[data])"></span>
|
||||
<node-mark :layer='layer' :data='tmp[layer].buyables[data].marked'></node-mark>
|
||||
|
||||
</button>
|
||||
<br v-if="(tmp[layer].buyables[data].sellOne !== undefined && !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne == false)) || (tmp[layer].buyables[data].sellAll && !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll == false))">
|
||||
<sell-one :layer="layer" :data="data" v-bind:style="tmp[layer].componentStyles['sell-one']" v-if="(tmp[layer].buyables[data].sellOne)&& !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne == false)"></sell-one>
|
||||
|
@ -336,6 +340,7 @@ function loadVue() {
|
|||
v-on:click="clickClickable(layer, data)" @mousedown="start" @mouseleave="stop" @mouseup="stop" @touchstart="start" @touchend="stop" @touchcancel="stop">
|
||||
<span v-if= "tmp[layer].clickables[data].title"><h2 v-html="tmp[layer].clickables[data].title"></h2><br></span>
|
||||
<span v-bind:style="{'white-space': 'pre-line'}" v-html="run(layers[layer].clickables[data].display, layers[layer].clickables[data])"></span>
|
||||
<node-mark :layer='layer' :data='tmp[layer].clickables[data].marked'></node-mark>
|
||||
</button>
|
||||
`,
|
||||
data() { return { interval: false, time: 0,}},
|
||||
|
|
|
@ -105,6 +105,8 @@ function setupLayer(layer){
|
|||
layers[layer].challenges[thing].unlocked = true
|
||||
if (layers[layer].challenges[thing].completionLimit === undefined)
|
||||
layers[layer].challenges[thing].completionLimit = 1
|
||||
else if (layers[layer].challenges[thing].marked === undefined)
|
||||
layers[layer].challenges[thing].marked = function() {return maxedChallenge(this.layer, this.id)}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ function exponentialFormat(num, precision, mantissa = true) {
|
|||
m = decimalOne
|
||||
e = e.add(1)
|
||||
}
|
||||
e = (e.gte(1e9) ? format(e, 1) : (e.gte(10000) ? commaFormat(e, 0) : e.toStringWithDecimalPlaces(0)))
|
||||
e = (e.gte(1e9) ? format(e, 3) : (e.gte(10000) ? commaFormat(e, 0) : e.toStringWithDecimalPlaces(0)))
|
||||
if (mantissa)
|
||||
return m.toStringWithDecimalPlaces(precision) + "e" + e
|
||||
else return "e" + e
|
||||
|
|
|
@ -265,6 +265,7 @@ h1, h2, h3, b, input {
|
|||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
font-size: 10px;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.tile {
|
||||
|
@ -535,6 +536,7 @@ ul {
|
|||
|
||||
.hChallenge {
|
||||
background-color: #bf8f8f;
|
||||
position: relative;
|
||||
border: 4px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
|
@ -706,6 +708,7 @@ button > * {
|
|||
border-left: 0.3em solid transparent;
|
||||
font-size: 10px;
|
||||
overflow:auto;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.star {
|
||||
|
@ -721,6 +724,8 @@ button > * {
|
|||
border-bottom: 0.7em solid #ffcc00;
|
||||
border-left: 0.3em solid transparent;
|
||||
font-size: 10px;
|
||||
pointer-events: none;
|
||||
|
||||
}
|
||||
|
||||
.star:before, .star:after {
|
||||
|
|
Loading…
Reference in a new issue