road curvness scales with road length

This commit is contained in:
Grimsace
2026-02-04 15:50:53 -06:00
parent f80a4b253e
commit d6ebe2b4ec
+17 -10
View File
@@ -298,7 +298,11 @@ func calculateRoadPath(start, end *PointOfInterest, curvyness, avgDim float64, r
return []image.Point{{X: start.X, Y: start.Y}} return []image.Point{{X: start.X, Y: start.Y}}
} }
if curvyness == 0 { // Adjust curviness based on distance
distanceFactor := math.Min(1.0, dist/(avgDim*0.5))
adjustedCurvyness := curvyness * distanceFactor
if adjustedCurvyness == 0 {
return bresenhamRoad([]image.Point{{X: start.X, Y: start.Y}, {X: end.X, Y: end.Y}}) return bresenhamRoad([]image.Point{{X: start.X, Y: start.Y}, {X: end.X, Y: end.Y}})
} }
@@ -308,23 +312,26 @@ func calculateRoadPath(start, end *PointOfInterest, curvyness, avgDim float64, r
phase float64 phase float64
} }
waves := make([]wave, 3) waves := make([]wave, 2)
amp := (avgDim / 10.0) * curvyness amp := (avgDim / 10.0) * adjustedCurvyness
mainWavelength := avgDim / 4.0 mainWavelength := avgDim / 4.0
if mainWavelength < 1 { if mainWavelength < 1 {
mainWavelength = 1 mainWavelength = 1
} }
baseNumWaves := (dist / mainWavelength) * curvyness baseNumWaves := (dist / mainWavelength) * adjustedCurvyness
for i := 0; i < 3; i++ { // Main wave
freqMultiplier := 1.0 + float64(i) waves[0] = wave{
randomizedNumWaves := baseNumWaves * freqMultiplier * (0.75 + randSrc.Float64()*0.5)
waves[i] = wave{
amplitude: amp, amplitude: amp,
numWaves: randomizedNumWaves, numWaves: baseNumWaves * (0.75 + randSrc.Float64()*0.5),
phase: randSrc.Float64() * 2 * math.Pi, phase: randSrc.Float64() * 2 * math.Pi,
} }
amp /= 3
// Smaller wave for detours
waves[1] = wave{
amplitude: amp / 4,
numWaves: baseNumWaves * 4 * (0.75 + randSrc.Float64()*0.5),
phase: randSrc.Float64() * 2 * math.Pi,
} }
controlPoints := make([]image.Point, numControlPoints+1) controlPoints := make([]image.Point, numControlPoints+1)