polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
248 lines (240 loc) • 9.17 kB
text/typescript
// import {BaseNode} from '../../_Base';
import {Number2, Number3, Number4, PolyDictionary} from '../../../../types/GlobalTypes';
import {ParamType} from '../../../poly/ParamType';
import {ParamOptions} from '../../../params/utils/OptionsController';
import {RampParam} from '../../../params/Ramp';
import {ParamValuesTypeMap} from '../../../params/types/ParamValuesTypeMap';
import {ParamInitValuesTypeMap} from '../../../params/types/ParamInitValuesTypeMap';
import {ParamConstructorMap} from '../../../params/types/ParamConstructorMap';
import {ParamOptionsByTypeMap} from '../../../params/types/ParamOptionsByTypeMap';
import {Color} from 'three/src/math/Color';
import {Vector2} from 'three/src/math/Vector2';
import {Vector3} from 'three/src/math/Vector3';
import {Vector4} from 'three/src/math/Vector4';
// function _ParamCheckNameConsistency<T extends BaseNode>(name: string, target: T, key: keyof T, type: ParamType) {
// const key_s = key as string;
// if (key_s != `_param_${name}`) {
// console.warn('param name inconsistent');
// }
// const param = target.params.get(name);
// if (param && param.type != type) {
// console.warn('param type inconsistent');
// }
// }
// export const _ParamBoolean = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.BOOLEAN);
// Object.defineProperty(target, key, {
// get: () => target.params.boolean(name),
// });
// };
// };
// export const _ParamFloat = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.FLOAT);
// Object.defineProperty(target, key, {
// get: () => target.params.float(name),
// });
// };
// };
// export const _ParamFloat = function ParamF(default_value: number, options?: ParamOptions) {
// return <T extends NodeParamsConfig>(target: T, key: string) => {
// // _ParamCheckNameConsistency(name, target, key, ParamType.FLOAT);
// // const config = new ParamConfig(ParamType.FLOAT, default_value, options);
// // target.add_config(key, config);
// // target.set_default_value(key, default_value);
// // target.set_options(key, options);
// // Object.defineProperty(target.options, key, {
// // get: () => target.params.float(name),
// // });
// };
// };
// export const _ParamString = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.STRING);
// Object.defineProperty(target, key, {
// get: () => target.params.string(name),
// });
// };
// };
// export const _ParamVector2 = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.VECTOR2);
// Object.defineProperty(target, key, {
// get: () => target.params.vector2(name),
// });
// };
// };
// export const _ParamVector3 = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.VECTOR3);
// Object.defineProperty(target, key, {
// get: () => target.params.vector3(name),
// });
// };
// };
// export const _ParamColor = function ParamF(name: string) {
// return <T extends BaseNode>(target: T, key: keyof T) => {
// _ParamCheckNameConsistency(name, target, key, ParamType.COLOR);
// Object.defineProperty(target, key, {
// get: () => target.params.color(name),
// });
// };
// };
// declare global {
// const ParamB: typeof _ParamBoolean;
// const ParamF: typeof _ParamFloat;
// const ParamS: typeof _ParamString;
// const ParamV2: typeof _ParamVector2;
// const ParamV3: typeof _ParamVector3;
// const ParamC: typeof _ParamColor;
// }
// class ParamConfig<T extends ParamType> {
// constructor(readonly type: T, readonly default_value: ParamValuesTypeMap[T], readonly options: ParamOptions = {}) {}
// }
export class ParamTemplate<T extends ParamType> {
readonly value_type!: ParamValuesTypeMap[T];
readonly param_class!: ParamConstructorMap[T];
// readonly options?: ParamOptions;
constructor(public type: T, public init_value: ParamInitValuesTypeMap[T], public options?: ParamOptions) {}
}
// class Test1 {
// a: number
// b: string
// }
// type test = Extract<typeof Test1, string>;
// type test2 = Pick<typeof Test1, 'b'>;
// type test3 = Test1['b'];
// type test2 = keyof BoxSopParamConfig;
export class ParamConfig {
// static _GENERIC<T extends ParamType> (type: T, init_value: ParamInitValuesTypeMap[T], options?: ParamOptions) {
// return new ParamTemplate<T>(type, init_value, options);
// }
// static BUTTON(init_value: ParamInitValuesTypeMap[ParamType.BUTTON], options?: ParamOptions) {
// return this._GENERIC<ParamType.BUTTON>(ParamType.BUTTON, init_value, options)
// }
static BUTTON(
init_value: ParamInitValuesTypeMap[ParamType.BUTTON],
options?: ParamOptionsByTypeMap[ParamType.BUTTON]
) {
return new ParamTemplate<ParamType.BUTTON>(ParamType.BUTTON, init_value, options);
}
static BOOLEAN(
init_value: ParamInitValuesTypeMap[ParamType.BOOLEAN],
options?: ParamOptionsByTypeMap[ParamType.BOOLEAN]
) {
return new ParamTemplate<ParamType.BOOLEAN>(ParamType.BOOLEAN, init_value, options);
}
static COLOR(
init_value: ParamInitValuesTypeMap[ParamType.COLOR],
options?: ParamOptionsByTypeMap[ParamType.COLOR]
) {
if (init_value instanceof Color) {
init_value = init_value.toArray() as Number3;
}
return new ParamTemplate<ParamType.COLOR>(ParamType.COLOR, init_value, options);
}
static FLOAT(
init_value: ParamInitValuesTypeMap[ParamType.FLOAT],
options?: ParamOptionsByTypeMap[ParamType.FLOAT]
) {
return new ParamTemplate<ParamType.FLOAT>(ParamType.FLOAT, init_value, options);
}
static FOLDER(
init_value: ParamInitValuesTypeMap[ParamType.FOLDER] = null,
options?: ParamOptionsByTypeMap[ParamType.FOLDER]
) {
return new ParamTemplate<ParamType.FOLDER>(ParamType.FOLDER, init_value, options);
}
static INTEGER(
init_value: ParamInitValuesTypeMap[ParamType.INTEGER],
options?: ParamOptionsByTypeMap[ParamType.INTEGER]
) {
return new ParamTemplate<ParamType.INTEGER>(ParamType.INTEGER, init_value, options);
}
static RAMP(
init_value: ParamInitValuesTypeMap[ParamType.RAMP] = RampParam.DEFAULT_VALUE,
options?: ParamOptionsByTypeMap[ParamType.RAMP]
) {
return new ParamTemplate<ParamType.RAMP>(ParamType.RAMP, init_value, options);
}
static SEPARATOR(
init_value: ParamInitValuesTypeMap[ParamType.SEPARATOR] = null,
options?: ParamOptionsByTypeMap[ParamType.SEPARATOR]
) {
return new ParamTemplate<ParamType.SEPARATOR>(ParamType.SEPARATOR, init_value, options);
}
static STRING(
init_value: ParamInitValuesTypeMap[ParamType.STRING] = '',
options?: ParamOptionsByTypeMap[ParamType.STRING]
) {
return new ParamTemplate<ParamType.STRING>(ParamType.STRING, init_value, options);
}
static VECTOR2(
init_value: ParamInitValuesTypeMap[ParamType.VECTOR2],
options?: ParamOptionsByTypeMap[ParamType.VECTOR2]
) {
if (init_value instanceof Vector2) {
init_value = init_value.toArray() as Number2;
}
return new ParamTemplate<ParamType.VECTOR2>(ParamType.VECTOR2, init_value, options);
}
static VECTOR3(
init_value: ParamInitValuesTypeMap[ParamType.VECTOR3],
options?: ParamOptionsByTypeMap[ParamType.VECTOR3]
) {
if (init_value instanceof Vector3) {
init_value = init_value.toArray() as Number3;
}
return new ParamTemplate<ParamType.VECTOR3>(ParamType.VECTOR3, init_value, options);
}
static VECTOR4(
init_value: ParamInitValuesTypeMap[ParamType.VECTOR4],
options?: ParamOptionsByTypeMap[ParamType.VECTOR4]
) {
if (init_value instanceof Vector4) {
init_value = init_value.toArray() as Number4;
}
return new ParamTemplate<ParamType.VECTOR4>(ParamType.VECTOR4, init_value, options);
}
//
//
// PATH PARAMS
//
//
static OPERATOR_PATH(
init_value: ParamInitValuesTypeMap[ParamType.OPERATOR_PATH],
options?: ParamOptionsByTypeMap[ParamType.OPERATOR_PATH]
) {
return new ParamTemplate<ParamType.OPERATOR_PATH>(ParamType.OPERATOR_PATH, init_value, options);
}
static NODE_PATH(
init_value: ParamInitValuesTypeMap[ParamType.NODE_PATH],
options?: ParamOptionsByTypeMap[ParamType.NODE_PATH]
) {
return new ParamTemplate<ParamType.NODE_PATH>(ParamType.NODE_PATH, init_value, options);
}
static PARAM_PATH(
init_value: ParamInitValuesTypeMap[ParamType.PARAM_PATH],
options?: ParamOptionsByTypeMap[ParamType.PARAM_PATH]
) {
return new ParamTemplate<ParamType.PARAM_PATH>(ParamType.PARAM_PATH, init_value, options);
}
}
export class NodeParamsConfig implements PolyDictionary<ParamTemplate<ParamType>> {
[name: string]: ParamTemplate<ParamType>;
}
// export class NodeParamsConfig {}
// interface ParamConfig {
// type: ParamType;
// value: any;
// options?: ParamOptions;
// }
// export type ParamConfigsArray = ParamConfig[];
// declare global {
// interface Window {
// ParamB: typeof _ParamB;
// ParamC: typeof _ParamC;
// }
// }
// window.ParamC = _ParamC;