Tweaked terrain values for bigger biomes and more tile variation
Still need to figure out how to get more dead bushes tho.....
This commit is contained in:
parent
bd2130dfa0
commit
2d79747a82
@ -79,7 +79,7 @@ handle_player_input :: proc(p:^Player, w:^World) {
|
||||
// Movement
|
||||
|
||||
dt := rl.GetFrameTime()
|
||||
move_delay : f32 = 0.2
|
||||
move_delay : f32 = 0.0
|
||||
if p.move_timer > 0 {
|
||||
p.move_timer -= dt
|
||||
}
|
||||
@ -208,23 +208,9 @@ draw_player :: proc(player:^Player) {
|
||||
will_collide :: proc(direction:InteractDirection, p:^Player, w:^World) -> bool {
|
||||
tile, pos := get_tile_in_direction(direction, p, w)
|
||||
|
||||
if tile.type == .SOLID { return true }
|
||||
// if tile.type == .SOLID { return true }
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// will_collide :: proc(w:^World, pos:rl.Vector2) -> bool {
|
||||
// world_grid_pos := vec2_to_vec2i(pos)
|
||||
// chunk_pos := world_pos_to_chunk_pos(pos)
|
||||
// local_pos := get_local_chunk_pos(world_grid_pos)
|
||||
|
||||
// chunk := get_chunk(w, chunk_pos)
|
||||
// tile := get_chunk_tile(chunk, local_pos)
|
||||
|
||||
// #partial switch tile.type {
|
||||
// case .SOLID:
|
||||
// return true
|
||||
// }
|
||||
|
||||
// return false
|
||||
// }
|
||||
|
@ -65,69 +65,11 @@ get_biome_from_id :: proc(id:u32) -> Biome {
|
||||
return biome_list[id]
|
||||
}
|
||||
|
||||
// // Improved biome selection with multiple noise layers and better scaling
|
||||
// get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome {
|
||||
// // Use multiple noise scales for different features
|
||||
// continent_scale := 0.001 // Very large scale features (continents)
|
||||
// region_scale := 0.005 // Medium scale features (regions)
|
||||
// local_scale := 0.02 // Local variations
|
||||
//
|
||||
// // Use different seed offsets for each noise layer
|
||||
// continent_seed := seed
|
||||
// region_seed := seed + 10000
|
||||
// moisture_seed := seed + 20000
|
||||
// temperature_seed := seed + 30000
|
||||
//
|
||||
// // Generate base continent shapes
|
||||
// continent := noise.noise_2d(continent_seed, {f64(world_pos.x) * continent_scale, f64(world_pos.y) * continent_scale})
|
||||
// // Amplify to get more defined continents
|
||||
// continent = math.pow(continent * 0.5 + 0.5, 1.5) * 2.0 - 1.0
|
||||
//
|
||||
// // Generate regional variations
|
||||
// region := noise.noise_2d(region_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale})
|
||||
//
|
||||
// // Generate moisture and temperature maps for biome determination
|
||||
// moisture := noise.noise_2d(moisture_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale})
|
||||
// temperature := noise.noise_2d(temperature_seed, {f64(world_pos.x) * region_scale, f64(world_pos.y) * region_scale})
|
||||
//
|
||||
// // Local variations (small details)
|
||||
// local_var := noise.noise_2d(seed, {f64(world_pos.x) * local_scale, f64(world_pos.y) * local_scale}) * 0.1
|
||||
//
|
||||
// // Combine all factors with proper weighting
|
||||
// elevation := continent * 0.7 + region * 0.3 + local_var
|
||||
//
|
||||
// // Use temperature and moisture to determine biome type instead of just elevation
|
||||
// // This creates more natural and varied biome transitions
|
||||
//
|
||||
// // Convert noise values to 0-1 range for easier thresholding
|
||||
// normalized_elevation := elevation * 0.5 + 0.5
|
||||
// normalized_moisture := moisture * 0.5 + 0.5
|
||||
// normalized_temperature := temperature * 0.5 + 0.5
|
||||
//
|
||||
// // Lakes appear in low elevation areas
|
||||
// if normalized_elevation < 0.3 {
|
||||
// return lake_biome
|
||||
// }
|
||||
//
|
||||
// // Deserts appear in hot, dry areas
|
||||
// if normalized_temperature > 0.6 && normalized_moisture < 0.3 {
|
||||
// return desert_biome
|
||||
// }
|
||||
//
|
||||
// // Forests need moderate to high moisture
|
||||
// if normalized_moisture > 0.5 {
|
||||
// return forest_biome
|
||||
// }
|
||||
//
|
||||
// // Default to grasslands
|
||||
// return grasslands_biome
|
||||
// }
|
||||
|
||||
get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome {
|
||||
// Use multiple noise scales for different features
|
||||
continent_scale := 0.001 // Very large scale features (continents)
|
||||
region_scale := 0.005 // Medium scale features (regions)
|
||||
local_scale := 0.02 // Local variations
|
||||
continent_scale := 0.0008 // Very large scale features (continents)
|
||||
region_scale := 0.007 // Medium scale features (regions)
|
||||
local_scale := 0.025 // Local variations
|
||||
|
||||
// Use different seed offsets for each noise layer
|
||||
continent_seed := seed
|
||||
@ -166,18 +108,12 @@ get_biome_type :: proc(world_pos: Vec2i, seed: i64) -> Biome {
|
||||
return lake_biome
|
||||
}
|
||||
|
||||
if normalized_temperature > 0.6 && normalized_moisture < 0.3 {
|
||||
if normalized_temperature > 0.7 && normalized_moisture < 0.2 {
|
||||
return desert_biome
|
||||
}
|
||||
|
||||
// You could also try this alternative approach that uses temperature-moisture balance:
|
||||
// desert_score := normalized_temperature - normalized_moisture
|
||||
// if desert_score > 0.3 {
|
||||
// return desert_biome
|
||||
// }
|
||||
|
||||
// Forests need moderate to high moisture
|
||||
if normalized_moisture > 0.5 {
|
||||
if normalized_moisture > 0.55 {
|
||||
return forest_biome
|
||||
}
|
||||
|
||||
@ -234,9 +170,9 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile {
|
||||
hash_value := hash_noise(pos.x, pos.y, seed)
|
||||
|
||||
// Use multiple noise scales for natural-looking features
|
||||
large_scale := 0.02
|
||||
medium_scale := 0.05
|
||||
small_scale := 0.15
|
||||
large_scale := 0.025
|
||||
medium_scale := 0.07
|
||||
small_scale := 0.20
|
||||
|
||||
large_noise := noise.noise_2d(seed, {f64(pos.x) * large_scale, f64(pos.y) * large_scale})
|
||||
medium_noise := noise.noise_2d(seed + 5000, {f64(pos.x) * medium_scale, f64(pos.y) * medium_scale})
|
||||
@ -248,15 +184,15 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile {
|
||||
// Different biomes use the noise differently
|
||||
switch biome.type {
|
||||
case .GRASSLAND:
|
||||
if combined_noise > 0.7 {
|
||||
if combined_noise > 0.8 {
|
||||
return tree_tile
|
||||
} else if combined_noise > 0.5 {
|
||||
} else if combined_noise > 0.2 {
|
||||
return grass_tile
|
||||
} else {
|
||||
return nothing_tile
|
||||
}
|
||||
case .FOREST:
|
||||
if combined_noise > 0.8 {
|
||||
if combined_noise > 0.75 {
|
||||
return double_tree_tile
|
||||
} else if combined_noise > 0.4 {
|
||||
return tree_tile
|
||||
@ -269,7 +205,7 @@ generate_tile :: proc(pos: Vec2i, seed: i64, biome: Biome) -> Tile {
|
||||
|
||||
cactus_noise := medium_noise * 0.5 + 0.5 // Normalize to 0-1
|
||||
|
||||
if cactus_noise > 0.7 && hash_value > 0.6 {
|
||||
if cactus_noise > 0.8 && hash_value > 0.65 {
|
||||
return cactus_tile
|
||||
} else if combined_noise > 0.85 {
|
||||
return dead_bush_tile
|
||||
|
Loading…
Reference in New Issue
Block a user