import { useState } from 'react' const SLIDER_VALUES = [0, 0.167, 0.5, 1, 2, 3] const SLIDER_LABELS = ['None', 'Very Low', 'Low', 'Normal', 'High', 'Very High'] function valueToSlider(value) { if (value === 0 || value === undefined) return 0 if (value <= 0.167) return 1 if (value <= 0.5) return 2 if (value <= 1) return 3 if (value <= 2) return 4 return 5 } function sliderToValue(index) { return SLIDER_VALUES[index] } function ValueSelect({ value, onChange }) { const index = valueToSlider(value) return ( ) } function ResourceRow({ label, settings, onChange }) { const freq = settings?.frequency ?? 1 const size = settings?.size ?? 1 const richness = settings?.richness ?? 1 return (
{label}
onChange({ ...settings, frequency: v })} /> onChange({ ...settings, size: v })} /> onChange({ ...settings, richness: v })} />
) } function SimpleSlider({ label, value, onChange }) { const sliderIndex = valueToSlider(value) return (
{label}
onChange(sliderToValue(parseInt(e.target.value)))} className="slider flex-1 max-w-48" /> {SLIDER_LABELS[sliderIndex]}
) } function EvolutionSlider({ label, value, onChange }) { const displayValue = (value * 100).toFixed(0) return (
{label}
onChange(parseInt(e.target.value) / 100)} className="slider flex-1 max-w-48" /> {displayValue}%
) } export default function WorldGenForm({ settings, onSettingsChange, presets, templates, onLoadPreset, onLoadTemplate, onSaveTemplate }) { const [selectedPreset, setSelectedPreset] = useState('default') const [templateName, setTemplateName] = useState('') const [showSaveTemplate, setShowSaveTemplate] = useState(false) const handlePresetChange = (presetName) => { setSelectedPreset(presetName) onLoadPreset(presetName) } const handleSaveTemplate = () => { if (templateName.trim()) { onSaveTemplate(templateName.trim()) setTemplateName('') setShowSaveTemplate(false) } } const updateAutoplace = (key, value) => { onSettingsChange({ ...settings, autoplace_controls: { ...settings.autoplace_controls, [key]: value } }) } const updateCliff = (key, value) => { onSettingsChange({ ...settings, cliff_settings: { ...settings.cliff_settings, [key]: value } }) } const updateProperty = (key, value) => { onSettingsChange({ ...settings, property_expression_names: { ...settings.property_expression_names, [key]: value } }) } return (
{/* Preset & Template Selection */}
Preset:
{templates?.length > 0 && (
Template:
)}
{showSaveTemplate && (
setTemplateName(e.target.value)} placeholder="Template name..." className="input flex-1" />
)}
{/* Terrain Section */}

Terrain

updateAutoplace('water', { frequency: v, size: v })} /> updateAutoplace('trees', { frequency: v, size: v, richness: v })} /> updateCliff('richness', v)} /> onSettingsChange({ ...settings, starting_area: v })} />
{/* Resources Section */}

Resources

Frequency
Size
Richness
updateAutoplace('iron-ore', v)} /> updateAutoplace('copper-ore', v)} /> updateAutoplace('coal', v)} /> updateAutoplace('stone', v)} /> updateAutoplace('uranium-ore', v)} /> updateAutoplace('crude-oil', v)} />
{/* Enemies Section */}

Enemies

Frequency
Size
Richness
updateAutoplace('enemy-base', v)} />
{/* Evolution Section */}

Evolution

updateProperty('enemy-evolution-factor-by-time', v)} /> updateProperty('enemy-evolution-factor-by-pollution', v)} /> updateProperty('enemy-evolution-factor-by-killing-spawners', v)} />
{/* Advanced Section */}

Advanced

onSettingsChange({ ...settings, seed: e.target.value ? parseInt(e.target.value) : null })} placeholder="Random" className="input" />
onSettingsChange({ ...settings, width: parseInt(e.target.value) || 0 })} className="input" />
onSettingsChange({ ...settings, height: parseInt(e.target.value) || 0 })} className="input" />
) }