aboutsummaryrefslogtreecommitdiff
path: root/src/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.js')
-rw-r--r--src/utils.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/utils.js b/src/utils.js
new file mode 100644
index 0000000..8f6458e
--- /dev/null
+++ b/src/utils.js
@@ -0,0 +1,50 @@
+const internals = {
+ kDefaultStages: [25, 50, 75],
+};
+
+/**
+ * Convert percentage to pixel size
+ * @param {number} percentage - Percentage value (can be negative)
+ * @param {number} dimension - Dimension in pixels
+ * @returns {number} Pixel value
+ */
+export function percentToPixel(percentage, dimension) {
+ return (percentage * dimension) / 100;
+}
+
+/**
+ * Get stage values from parsed map or use defaults
+ * @param {Array} stageOverrides - Stage overrides from parsed map
+ * @returns {Array<number>} Array of 3 stage values
+ */
+export function getStageValues(stageOverrides) {
+ const stages = [...internals.kDefaultStages];
+
+ if (stageOverrides && stageOverrides.length > 0) {
+ stageOverrides.forEach((override) => {
+ const index = { i: 0, ii: 1, iii: 2 }[override.stage];
+ if (index !== undefined) {
+ stages[index] = override.value;
+ }
+ });
+ }
+
+ return stages;
+}
+
+/**
+ * Creates a render-friendly component map.
+ * @param {Array<Object>} The list of components
+ * @param {number} mapWidth - Map width in pixels
+ * @param {number} mapHeight - Map height in pixels
+ * @returns {Map} Pixel value
+ */
+export function createComponentMap(components, width, height) {
+ return components.reduce((map, current) => {
+ map[current.label.toLowerCase()] = [
+ percentToPixel(current.coordinates[0], width),
+ percentToPixel(current.coordinates[1], height),
+ ];
+ return map;
+ }, {});
+}