1
0
Fork 0

fix(core): Update Pattern.sampleOptions() to work with additional option types

This commit is contained in:
Benjamin F 2022-12-08 20:45:17 -08:00
parent 3a15f7a730
commit 969d481585

View file

@ -767,17 +767,18 @@ Pattern.prototype.__isStackHidden = function (stackName) {
} }
/** /**
* Generates an array of settings.options objects for sampling a list option * Generates an array of settings.options objects for sampling a list or boolean option
* *
* @private * @private
* @param {string} optionName - Name of the option to sample * @param {string} optionName - Name of the option to sample
* @return {Array} sets - The list of settings objects * @return {Array} sets - The list of settings objects
*/ */
Pattern.prototype.__listOptionSets = function (optionName) { Pattern.prototype.__listBoolOptionSets = function (optionName) {
let option = this.config.options[optionName] let option = this.config.options[optionName]
const base = this.__setBase() const base = this.__setBase()
const sets = [] const sets = []
let run = 1 let run = 1
if (typeof option.bool !== 'undefined') option = { list: [false, true] }
for (const choice of option.list) { for (const choice of option.list) {
const settings = { const settings = {
...base, ...base,
@ -1080,11 +1081,15 @@ Pattern.prototype.__needs = function (partName, set = 0) {
* @return {Array} sets - The list of settings objects * @return {Array} sets - The list of settings objects
*/ */
Pattern.prototype.__optionSets = function (optionName) { Pattern.prototype.__optionSets = function (optionName) {
let option = this.config.options[optionName]
if (typeof option?.list === 'object') return this.__listOptionSets(optionName)
const sets = [] const sets = []
if (!(optionName in this.config.options)) return sets
let option = this.config.options[optionName]
if (typeof option.list === 'object' || typeof option.bool !== 'undefined')
return this.__listBoolOptionSets(optionName)
let factor = 1 let factor = 1
let step, val let step, val
let numberRuns = 10
let stepFactor = numberRuns - 1
if (typeof option.min === 'undefined' || typeof option.max === 'undefined') { if (typeof option.min === 'undefined' || typeof option.max === 'undefined') {
const min = option * 0.9 const min = option * 0.9
const max = option * 1.1 const max = option * 1.1
@ -1092,9 +1097,16 @@ Pattern.prototype.__optionSets = function (optionName) {
} }
if (typeof option.pct !== 'undefined') factor = 100 if (typeof option.pct !== 'undefined') factor = 100
val = option.min / factor val = option.min / factor
step = (option.max / factor - val) / 9 if (typeof option.count !== 'undefined' || typeof option.mm !== 'undefined') {
const numberOfCounts = option.max - option.min + 1
if (numberOfCounts < 10) {
numberRuns = numberOfCounts
stepFactor = Math.max(numberRuns - 1, 1)
}
}
step = (option.max / factor - val) / stepFactor
const base = this.__setBase() const base = this.__setBase()
for (let run = 1; run < 11; run++) { for (let run = 1; run <= numberRuns; run++) {
const settings = { const settings = {
...base, ...base,
options: { options: {
@ -1106,6 +1118,8 @@ Pattern.prototype.__optionSets = function (optionName) {
settings.options[optionName] = val settings.options[optionName] = val
sets.push(settings) sets.push(settings)
val += step val += step
if (typeof option.count !== 'undefined' || typeof option.mm !== 'undefined')
val = Math.round(val)
} }
return sets return sets