diff --git a/changelog.md b/changelog.md
index 0b665d2..8f01bc3 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,6 @@
# The Modding Tree changelog:
+- Added a text-input component.
- The red layer highlight will not appear before a layer is unlocked.
# v2.π.1 - 4/7/21
diff --git a/docs/custom-tab-layouts.md b/docs/custom-tab-layouts.md
index 1cc4a08..539e2fb 100644
--- a/docs/custom-tab-layouts.md
+++ b/docs/custom-tab-layouts.md
@@ -56,7 +56,12 @@ These are the existing components, but you can create more in [components.js](/j
- tree: Displays a tree. The argument is an array of arrays containing the names of the nodes in the tree (first by row, then by column)
[See here for more information on tree layouts and nodes!](trees-and-tree-customization.md)
-- toggle: A toggle button that toggles a bool value. The data is a pair that identifies what bool to toggle, e.g. `[layer, id]`
+- toggle: A toggle button that toggles a bool value. The argument is a pair that identifies what bool to toggle, e.g. `[layer, id]`
+
+- text-input: A text input box. The argument is the name of the variable in player[layer] that the input is for, player[layer][argument]
+ (Works with strings, numbers, and Decimals!)
+
+
The rest of the components are sub-components. They can be used just like other components, but are typically part of another component.
diff --git a/js/Demo/demoLayers.js b/js/Demo/demoLayers.js
index 8f9050b..91a4bff 100644
--- a/js/Demo/demoLayers.js
+++ b/js/Demo/demoLayers.js
@@ -13,6 +13,7 @@ addLayer("c", {
total: new Decimal(0),
buyables: {}, // You don't actually have to initialize this one
beep: false,
+ thingy: "pointy",
}},
color: "#4BDC13",
requires: new Decimal(10), // Can be a function that takes requirement increases into account
@@ -296,8 +297,10 @@ addLayer("c", {
"prestige-button", "resource-display",
["blank", "5px"], // Height
["raw-html", function() {return ""}],
+ ["display-text", "Name your points!"],
+ ["text-input", "thingy"],
["display-text",
- function() {return 'I have ' + format(player.points) + ' pointy points!'},
+ function() {return 'I have ' + format(player.points) + ' ' + player.c.thingy + ' points!'},
{"color": "red", "font-size": "32px", "font-family": "Comic Sans MS"}],
"h-line", "milestones", "blank", "upgrades", "challenges"],
},
@@ -374,7 +377,7 @@ addLayer("f", {
unlocked: false,
points: new Decimal(0),
boop: false,
- clickables: {[11]: "Start"} // Optional default Clickable state
+ clickables: {[11]: "Start"}, // Optional default Clickable state
}},
color: "#FE0102",
requires() {return new Decimal(10)},
diff --git a/js/components.js b/js/components.js
index 815c23d..1baa49f 100644
--- a/js/components.js
+++ b/js/components.js
@@ -398,6 +398,16 @@ function loadVue() {
`
})
+ // Updates the value in player[layer][data]
+ Vue.component('text-input', {
+ props: ['layer', 'data'],
+ template: `
+
+ `
+ })
+
+
// These are for buyables, data is the id of the corresponding buyable
Vue.component('sell-one', {
props: ['layer', 'data'],
diff --git a/js/utils.js b/js/utils.js
index d640974..f7889a7 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -360,7 +360,14 @@ function isPlainObject(obj) {
document.title = modInfo.name
-
+// Converts a string value to whatever it's supposed to be
+function toValue(value, oldValue) {
+ if (oldValue instanceof Decimal)
+ return new Decimal (value)
+ else if (!isNaN(oldValue))
+ return value.toNumber()
+ else return value
+}
// Variables that must be defined to display popups
var activePopups = [];