UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

87 lines (84 loc) 2.52 kB
import {TypedNumericParam} from './_Numeric'; import {ParamType} from '../poly/ParamType'; import {CoreString} from '../../core/String'; import {ParamInitValuesTypeMap} from './types/ParamInitValuesTypeMap'; import {ParamValuesTypeMap} from './types/ParamValuesTypeMap'; import {isArray, isString, isNumber, isBoolean} from '../../core/Type'; export class IntegerParam extends TypedNumericParam<ParamType.INTEGER> { static override type() { return ParamType.INTEGER; } override defaultValueSerialized() { return this._default_value; } override rawInputSerialized() { return this._raw_input; } override valueSerialized() { return this.value; } protected override _copyValue(param: IntegerParam) { this.set(param.valueSerialized()); } protected override _prefilterInvalidRawInput(raw_input: any): ParamInitValuesTypeMap[ParamType.INTEGER] { if (isArray(raw_input)) { return raw_input[0] as ParamInitValuesTypeMap[ParamType.INTEGER]; } if (isString(raw_input) && CoreString.isNumber(raw_input)) { // we check here that we have a string AND that the string can be converted to a valid number const num = parseInt(raw_input); if (num != null) { const converted = this.convert(num); if (converted != null) { return converted; } } } if (isNumber(raw_input)) { const converted = this.convert(raw_input); if (converted != null) { return converted; } } return raw_input; } static override areRawInputEqual( raw_input1: ParamInitValuesTypeMap[ParamType.INTEGER], raw_input2: ParamInitValuesTypeMap[ParamType.INTEGER] ) { return raw_input1 == raw_input2; } static override areValuesEqual( val1: ParamValuesTypeMap[ParamType.INTEGER], val2: ParamValuesTypeMap[ParamType.INTEGER] ) { return val1 == val2; } static convert(raw_val: ParamInitValuesTypeMap[ParamType.INTEGER]): number | null { if (isNumber(raw_val)) { return Math.round(raw_val); } else { if (isBoolean(raw_val)) { return raw_val ? 1 : 0; } else { if (CoreString.isNumber(raw_val)) { const parsed = parseInt(raw_val); if (isNumber(parsed)) { return parsed; } } } return null; } } override convert(raw_val: ParamInitValuesTypeMap[ParamType.INTEGER]): number | null { const result = IntegerParam.convert(raw_val); if (result != null) { let validVal = this.options.ensureInRange(result); validVal = this.options.ensureValueInMenuEntries(validVal); return validVal; } else { return result; } } }