Some checks failed
Check & deploy / build (pull_request) Failing after 1m16s
147 lines
3.4 KiB
TypeScript
147 lines
3.4 KiB
TypeScript
import { colorInteractionControl } from './color-interactions';
|
|
import { INTERNAL_RENDER_AREA_MEGAPIXEL_LIMITS } from './runtime-setting-bounds';
|
|
import type { GardenAppConfig } from './types';
|
|
|
|
const formatPercent = (value: number): string => `${Math.round(value * 100)}%`;
|
|
const formatRadiansAsDegrees = (value: number): string =>
|
|
`${Math.round((value * 180) / Math.PI)} deg`;
|
|
const formatCompactNumber = (value: number): string => {
|
|
if (value >= 1_000_000) {
|
|
const millions = value / 1_000_000;
|
|
return `${Number.isInteger(millions) ? millions : millions.toFixed(1)}M`;
|
|
}
|
|
if (value >= 1_000) {
|
|
return `${Math.round(value / 1_000)}k`;
|
|
}
|
|
return `${value}`;
|
|
};
|
|
|
|
export const runtimeControls: GardenAppConfig['runtimeSettings']['controls'] = {
|
|
color1ToColor1: colorInteractionControl('Color 1 Follows Color 1'),
|
|
color1ToColor2: colorInteractionControl('Color 1 Follows Color 2'),
|
|
color1ToColor3: colorInteractionControl('Color 1 Follows Color 3'),
|
|
color2ToColor1: colorInteractionControl('Color 2 Follows Color 1'),
|
|
color2ToColor2: colorInteractionControl('Color 2 Follows Color 2'),
|
|
color2ToColor3: colorInteractionControl('Color 2 Follows Color 3'),
|
|
color3ToColor1: colorInteractionControl('Color 3 Follows Color 1'),
|
|
color3ToColor2: colorInteractionControl('Color 3 Follows Color 2'),
|
|
color3ToColor3: colorInteractionControl('Color 3 Follows Color 3'),
|
|
|
|
brushSize: {
|
|
folder: 'Brush',
|
|
label: 'Brush Size',
|
|
min: 1,
|
|
max: 36,
|
|
step: 0.25,
|
|
},
|
|
spawnPerPixel: {
|
|
folder: 'Brush',
|
|
label: 'Density',
|
|
min: 0.01,
|
|
max: 0.38,
|
|
step: 0.001,
|
|
},
|
|
strokeAngleJitterRadians: {
|
|
folder: 'Brush',
|
|
format: formatRadiansAsDegrees,
|
|
label: 'Spawn Spread',
|
|
min: 0,
|
|
max: Math.PI,
|
|
step: 0.01,
|
|
},
|
|
sensorOffsetDistance: {
|
|
folder: 'Movement',
|
|
label: 'Sensor Reach',
|
|
min: 0,
|
|
max: 200,
|
|
step: 1,
|
|
},
|
|
sensorOffsetAngle: {
|
|
folder: 'Movement',
|
|
label: 'Sensor Angle',
|
|
min: 0,
|
|
max: 180,
|
|
step: 1,
|
|
},
|
|
moveSpeed: {
|
|
folder: 'Movement',
|
|
label: 'Travel Speed',
|
|
min: 10,
|
|
max: 500,
|
|
step: 1,
|
|
},
|
|
turnSpeed: {
|
|
folder: 'Movement',
|
|
label: 'Turning Speed',
|
|
min: 1,
|
|
max: 200,
|
|
step: 1,
|
|
},
|
|
forwardRotationScale: {
|
|
folder: 'Movement',
|
|
format: formatPercent,
|
|
label: 'Forward Focus',
|
|
min: 0,
|
|
max: 1,
|
|
step: 0.01,
|
|
},
|
|
turnWhenLost: {
|
|
folder: 'Movement',
|
|
label: 'Wander Turn',
|
|
min: 0,
|
|
max: Math.PI * 2,
|
|
step: 0.01,
|
|
},
|
|
individualTrailWeight: {
|
|
folder: 'Movement',
|
|
label: 'Trail Strength',
|
|
min: 0,
|
|
max: 1,
|
|
step: 0.001,
|
|
},
|
|
diffusionRateTrails: {
|
|
folder: 'Movement',
|
|
label: 'Diffusion Rate',
|
|
min: 0.01,
|
|
max: 1,
|
|
step: 0.01,
|
|
},
|
|
decayRateTrails: {
|
|
folder: 'Movement',
|
|
label: 'Trail Fade',
|
|
min: 800,
|
|
max: 1000,
|
|
step: 1,
|
|
},
|
|
|
|
clarity: {
|
|
folder: 'Look',
|
|
label: 'Sharpness',
|
|
min: 0.00001,
|
|
max: 1,
|
|
step: 0.001,
|
|
},
|
|
backgroundGrainStrength: {
|
|
folder: 'Look',
|
|
label: 'Background Grain',
|
|
min: 0,
|
|
max: 0.12,
|
|
step: 0.001,
|
|
},
|
|
|
|
maxAgentCount: {
|
|
folder: 'Performance',
|
|
format: formatCompactNumber,
|
|
integer: true,
|
|
label: 'Population Limit',
|
|
min: 0,
|
|
step: 10_000,
|
|
},
|
|
internalRenderAreaMegapixels: {
|
|
folder: 'Performance',
|
|
label: 'Render Quality (MP)',
|
|
min: INTERNAL_RENDER_AREA_MEGAPIXEL_LIMITS.min,
|
|
max: INTERNAL_RENDER_AREA_MEGAPIXEL_LIMITS.max,
|
|
step: 0.1,
|
|
},
|
|
};
|