generating number of roads dynamically
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
"tree_clumpiness": 99,
|
"tree_clumpiness": 99,
|
||||||
"min_road_width": 0.2,
|
"min_road_width": 0.2,
|
||||||
"max_road_width": 0.6,
|
"max_road_width": 0.6,
|
||||||
"buildings_per_road": 5,
|
|
||||||
"road_exits": 1,
|
"road_exits": 1,
|
||||||
"road_curvyness": 45,
|
"road_curvyness": 45,
|
||||||
"road_distribution": 70,
|
"road_distribution": 70,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"tree_clumpiness": 99,
|
"tree_clumpiness": 99,
|
||||||
"min_road_width": 0.2,
|
"min_road_width": 0.2,
|
||||||
"max_road_width": 0.6,
|
"max_road_width": 0.6,
|
||||||
"buildings_per_road": 3,
|
|
||||||
"road_exits": 1,
|
"road_exits": 1,
|
||||||
"road_curvyness": 45,
|
"road_curvyness": 45,
|
||||||
"road_distribution": 40,
|
"road_distribution": 40,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"tree_clumpiness": 99,
|
"tree_clumpiness": 99,
|
||||||
"min_road_width": 0.2,
|
"min_road_width": 0.2,
|
||||||
"max_road_width": 0.30000000000000004,
|
"max_road_width": 0.30000000000000004,
|
||||||
"buildings_per_road": 6,
|
|
||||||
"road_exits": 3,
|
"road_exits": 3,
|
||||||
"road_curvyness": 45,
|
"road_curvyness": 45,
|
||||||
"road_distribution": 70,
|
"road_distribution": 70,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"tree_clumpiness": 99,
|
"tree_clumpiness": 99,
|
||||||
"min_road_width": 0.2,
|
"min_road_width": 0.2,
|
||||||
"max_road_width": 0.6,
|
"max_road_width": 0.6,
|
||||||
"buildings_per_road": 5,
|
|
||||||
"road_exits": 1,
|
"road_exits": 1,
|
||||||
"road_curvyness": 45,
|
"road_curvyness": 45,
|
||||||
"road_distribution": 70,
|
"road_distribution": 70,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"tree_clumpiness": 99,
|
"tree_clumpiness": 99,
|
||||||
"min_road_width": 0.2,
|
"min_road_width": 0.2,
|
||||||
"max_road_width": 0.6,
|
"max_road_width": 0.6,
|
||||||
"buildings_per_road": 6,
|
|
||||||
"road_exits": 1,
|
"road_exits": 1,
|
||||||
"road_curvyness": 45,
|
"road_curvyness": 45,
|
||||||
"road_distribution": 19,
|
"road_distribution": 19,
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ All settings below are currently implemented in the UI.
|
|||||||
| **Tree Clumpiness** | Distribution style of trees (spread vs clustered forest). | `0%` to `100%` |
|
| **Tree Clumpiness** | Distribution style of trees (spread vs clustered forest). | `0%` to `100%` |
|
||||||
| **Min Road Width** | Minimum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
| **Min Road Width** | Minimum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
||||||
| **Max Road Width** | Maximum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
| **Max Road Width** | Maximum road width as % of average image dimension `((width+height)/2)`. | `0.1%` to `5%` in `0.1%` steps |
|
||||||
| **Buildings Per Road** | Number of buildings represented by one internal road segment (lower = more roads). | `1` to `20` |
|
|
||||||
| **Road Exits** | Number of edge-connected exit roads. | `0` to `100` |
|
| **Road Exits** | Number of edge-connected exit roads. | `0` to `100` |
|
||||||
| **Minimum Road Angle** | Minimum allowed angle between roads at a junction. | `0°` to `180°` |
|
| **Minimum Road Angle** | Minimum allowed angle between roads at a junction. | `0°` to `180°` |
|
||||||
| **Road Curvyness** | Curviness of generated roads. | `0%` to `100%` |
|
| **Road Curvyness** | Curviness of generated roads. | `0%` to `100%` |
|
||||||
|
|||||||
@@ -997,28 +997,19 @@ func estimateRoadTarget(settings *Settings) int {
|
|||||||
if settings.NumBuildings < 10 {
|
if settings.NumBuildings < 10 {
|
||||||
return settings.NumBuildings
|
return settings.NumBuildings
|
||||||
}
|
}
|
||||||
divisor := float64(max(settings.BuildingsPerRoad, 1))
|
|
||||||
buildings := float64(max(settings.NumBuildings, 1))
|
buildings := float64(max(settings.NumBuildings, 1))
|
||||||
baseRoads := buildings / divisor
|
roads := buildings / 5.25
|
||||||
scale := 1.0
|
if buildings > 80 {
|
||||||
if buildings > 400 {
|
roads += math.Pow(buildings-80.0, 0.70) * 0.28
|
||||||
scale *= 0.96
|
|
||||||
}
|
}
|
||||||
if buildings > 1200 {
|
if buildings > 500 {
|
||||||
scale *= 0.92
|
roads += math.Pow((buildings-500.0)/2.2, 0.66) * 0.18
|
||||||
}
|
}
|
||||||
if buildings > 3000 {
|
if buildings > 1800 {
|
||||||
scale *= 0.88
|
roads *= 0.95
|
||||||
}
|
}
|
||||||
roads := baseRoads * scale
|
if buildings > 4000 {
|
||||||
if buildings > 200 {
|
roads *= 0.90
|
||||||
roads += math.Pow((buildings-200.0)/divisor, 0.72) * 0.35
|
|
||||||
}
|
|
||||||
if buildings > 1200 {
|
|
||||||
roads += math.Pow((buildings-1200.0)/(divisor*1.8), 0.68) * 0.22
|
|
||||||
}
|
|
||||||
if buildings > 1000 {
|
|
||||||
roads *= 0.97
|
|
||||||
}
|
}
|
||||||
result := int(math.Round(roads))
|
result := int(math.Round(roads))
|
||||||
if result < 1 {
|
if result < 1 {
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ type Settings struct {
|
|||||||
// Road settings
|
// Road settings
|
||||||
MinRoadWidth float64 `json:"min_road_width"`
|
MinRoadWidth float64 `json:"min_road_width"`
|
||||||
MaxRoadWidth float64 `json:"max_road_width"`
|
MaxRoadWidth float64 `json:"max_road_width"`
|
||||||
BuildingsPerRoad int `json:"buildings_per_road"`
|
|
||||||
RoadExits int `json:"road_exits"`
|
RoadExits int `json:"road_exits"`
|
||||||
RoadCurvyness float64 `json:"road_curvyness"`
|
RoadCurvyness float64 `json:"road_curvyness"`
|
||||||
RoadDistribution float64 `json:"road_distribution"`
|
RoadDistribution float64 `json:"road_distribution"`
|
||||||
@@ -148,7 +147,6 @@ func LoadSettings() (*Settings, error) {
|
|||||||
RiverEdgeRoughness: 50,
|
RiverEdgeRoughness: 50,
|
||||||
MinRoadWidth: 0.7,
|
MinRoadWidth: 0.7,
|
||||||
MaxRoadWidth: 2.7,
|
MaxRoadWidth: 2.7,
|
||||||
BuildingsPerRoad: 6,
|
|
||||||
RoadExits: 5,
|
RoadExits: 5,
|
||||||
RoadCurvyness: 50,
|
RoadCurvyness: 50,
|
||||||
RoadDistribution: 50,
|
RoadDistribution: 50,
|
||||||
@@ -232,9 +230,6 @@ func normalizeSettings(settings *Settings, rawKeys map[string]json.RawMessage) {
|
|||||||
if settings.BuildingComplexityRatio == 0 {
|
if settings.BuildingComplexityRatio == 0 {
|
||||||
settings.BuildingComplexityRatio = 50
|
settings.BuildingComplexityRatio = 50
|
||||||
}
|
}
|
||||||
if settings.BuildingsPerRoad == 0 {
|
|
||||||
settings.BuildingsPerRoad = 6
|
|
||||||
}
|
|
||||||
if _, ok := rawKeys["min_wall_width"]; !ok {
|
if _, ok := rawKeys["min_wall_width"]; !ok {
|
||||||
settings.MinWallWidth = 1.5
|
settings.MinWallWidth = 1.5
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -653,19 +653,6 @@ func main() {
|
|||||||
markPresetDirty()
|
markPresetDirty()
|
||||||
}))
|
}))
|
||||||
|
|
||||||
buildingsPerRoadSlider := newNumericInputSlider(1, 20, float64(settings.BuildingsPerRoad), "%.0f", "Buildings Per Road")
|
|
||||||
buildingsPerRoadSlider.entry.OnChanged = func(s string) {
|
|
||||||
buildingsPerRoadSlider.validate(s, func(hasError bool) {
|
|
||||||
errorStates["buildingsPerRoad"] = hasError
|
|
||||||
updateGenerateBtnState()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
buildingsPerRoadSlider.value.AddListener(binding.NewDataListener(func() {
|
|
||||||
val, _ := buildingsPerRoadSlider.value.Get()
|
|
||||||
settings.BuildingsPerRoad = int(val)
|
|
||||||
markPresetDirty()
|
|
||||||
}))
|
|
||||||
|
|
||||||
roadExitsSlider := newNumericInputSlider(0, 100, float64(settings.RoadExits), "%.0f", "Road Exits")
|
roadExitsSlider := newNumericInputSlider(0, 100, float64(settings.RoadExits), "%.0f", "Road Exits")
|
||||||
roadExitsSlider.entry.OnChanged = func(s string) {
|
roadExitsSlider.entry.OnChanged = func(s string) {
|
||||||
roadExitsSlider.validate(s, func(hasError bool) {
|
roadExitsSlider.validate(s, func(hasError bool) {
|
||||||
@@ -1269,7 +1256,6 @@ func main() {
|
|||||||
roadsTab := container.NewTabItem("Roads", container.NewVBox(
|
roadsTab := container.NewTabItem("Roads", container.NewVBox(
|
||||||
minRoadWidthSlider,
|
minRoadWidthSlider,
|
||||||
maxRoadWidthSlider,
|
maxRoadWidthSlider,
|
||||||
buildingsPerRoadSlider,
|
|
||||||
roadExitsSlider,
|
roadExitsSlider,
|
||||||
minRoadAngleSlider,
|
minRoadAngleSlider,
|
||||||
roadCurvynessSlider,
|
roadCurvynessSlider,
|
||||||
@@ -1584,7 +1570,6 @@ func main() {
|
|||||||
|
|
||||||
minRoadWidthSlider.value.Set(settings.MinRoadWidth)
|
minRoadWidthSlider.value.Set(settings.MinRoadWidth)
|
||||||
maxRoadWidthSlider.value.Set(settings.MaxRoadWidth)
|
maxRoadWidthSlider.value.Set(settings.MaxRoadWidth)
|
||||||
buildingsPerRoadSlider.value.Set(float64(settings.BuildingsPerRoad))
|
|
||||||
roadExitsSlider.value.Set(float64(settings.RoadExits))
|
roadExitsSlider.value.Set(float64(settings.RoadExits))
|
||||||
roadCurvynessSlider.value.Set(settings.RoadCurvyness)
|
roadCurvynessSlider.value.Set(settings.RoadCurvyness)
|
||||||
roadDistributionSlider.value.Set(settings.RoadDistribution)
|
roadDistributionSlider.value.Set(settings.RoadDistribution)
|
||||||
|
|||||||
Reference in New Issue
Block a user