diff options
Diffstat (limited to 'src/utils.js')
| -rw-r--r-- | src/utils.js | 50 |
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; + }, {}); +} |