Fix noise settings preview, use the terrain shaper

This commit is contained in:
Misode
2021-10-30 04:44:25 +02:00
parent 561f9a3956
commit b4d43c55bd
5 changed files with 36 additions and 34 deletions

View File

@@ -106,7 +106,7 @@ function calculateState(data: any, octaves: NoiseOctaves, shaper: TerrainShaper)
return JSON.stringify([data, octaves, shaper.toJson()])
}
function getOctaves(obj: any): NoiseOctaves {
export function getOctaves(obj: any): NoiseOctaves {
if (typeof obj !== 'string') {
const settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(obj))
obj = settings.noise.densityFactor === 0 && settings.noise.densityOffset === -0.030078125
@@ -145,7 +145,7 @@ function getOctaves(obj: any): NoiseOctaves {
}
}
function getShaper(obj: any): TerrainShaper {
export function getShaper(obj: any): TerrainShaper {
if (typeof obj === 'string') {
switch (obj.replace(/^minecraft:/, '')) {
case 'overworld':

View File

@@ -10,18 +10,11 @@ import { randomSeed } from '../../Utils'
export const NoiseSettingsPreview = ({ lang, data, shown, version }: PreviewProps) => {
const loc = locale.bind(null, lang)
const [seed, setSeed] = useState(randomSeed())
const [biomeFactor, setBiomeFactor] = useState(0.2)
const [biomeOffset, setBiomeOffset] = useState(0.1)
const [biomePeaks, setBiomePeaks] = useState(0)
const [biomeScale, setBiomeScale] = useState(0.2)
const [biomeDepth, setBiomeDepth] = useState(0.1)
const [focused, setFocused] = useState<string | undefined>(undefined)
const offset = useRef(0)
const state = JSON.stringify([data, biomeFactor, biomeOffset, biomePeaks])
const hasPeaks = checkVersion(version, '1.18')
useEffect(() => {
setBiomeFactor(hasPeaks ? 600 : 0.2)
setBiomeOffset(hasPeaks ? 0.05 : 0.1)
}, [hasPeaks])
const state = JSON.stringify([data, biomeScale, biomeDepth])
const size = data?.noise?.height ?? 256
const { canvas, redraw } = useCanvas({
@@ -29,7 +22,7 @@ export const NoiseSettingsPreview = ({ lang, data, shown, version }: PreviewProp
return [size, size]
},
async draw(img) {
const options = { biomeOffset, biomeFactor, biomePeaks, offset: offset.current, width: img.width, seed, version }
const options = { biomeDepth, biomeScale, offset: offset.current, width: img.width, seed, version }
noiseSettings(data, img, options)
},
async onDrag(dx) {
@@ -54,16 +47,12 @@ export const NoiseSettingsPreview = ({ lang, data, shown, version }: PreviewProp
return <>
<div class="controls">
{focused && <Btn label={`Y = ${focused}`} class="no-pointer" />}
<BtnMenu icon="gear" tooltip={locale(lang, 'terrain_settings')}>
{hasPeaks ? <>
<BtnInput label={loc('preview.factor')} value={`${biomeFactor}`} onChange={v => setBiomeFactor(Number(v))} />
<BtnInput label={loc('preview.offset')} value={`${biomeOffset}`} onChange={v => setBiomeOffset(Number(v))} />
<BtnInput label={loc('preview.peaks')} value={`${biomePeaks}`} onChange={v => setBiomePeaks(Number(v))} />
</> : <>
<BtnInput label={loc('preview.scale')} value={`${biomeFactor}`} onChange={v => setBiomeFactor(Number(v))} />
<BtnInput label={loc('preview.depth')} value={`${biomeOffset}`} onChange={v => setBiomeOffset(Number(v))} />
</>}
</BtnMenu>
{checkVersion(version, undefined, '1.17') &&
<BtnMenu icon="gear" tooltip={locale(lang, 'terrain_settings')}>
<BtnInput label={loc('preview.scale')} value={`${biomeScale}`} onChange={v => setBiomeScale(Number(v))} />
<BtnInput label={loc('preview.depth')} value={`${biomeDepth}`} onChange={v => setBiomeDepth(Number(v))} />
</BtnMenu>
}
<Btn icon="sync" tooltip={locale(lang, 'generate_new_seed')}
onClick={() => setSeed(randomSeed())} />
</div>