Files
gamedev-the-steward/tools/generate_terrain_textures.gd
admin 4463e524aa style: apply gdformat formatting across the entire project
Auto-format all GDScript files using gdformat from gdtoolkit.
This is a baseline formatting pass to ensure consistent style:

- Normalizes indentation and spacing
- Wraps long lines to 100 characters
- Removes trailing whitespace
- Standardizes blank lines between functions

68 files reformatted, 8 files left unchanged (3rd-party addon files
with parse errors excluded).
2026-07-05 23:06:23 +02:00

63 lines
1.8 KiB
GDScript

@tool
extends Node
const TEXTURE_DIR := "res://terrain/jajce/textures"
func _ready() -> void:
if not Engine.is_editor_hint():
return
call_deferred("generate")
func generate() -> void:
var dir := DirAccess.open(TEXTURE_DIR)
if not dir:
DirAccess.make_dir_recursive_absolute(ProjectSettings.globalize_path(TEXTURE_DIR))
_generate_texture("dirt_path_albedo.png", Color("#8b7355"), Color("#c4a882"), 101)
_generate_texture("riverbank_stone_albedo.png", Color("#5a6b7a"), Color("#8a9baa"), 102)
_generate_texture("compacted_ground_albedo.png", Color("#a0845c"), Color("#d4b896"), 103)
print("[TerrainTextureGenerator] Generated 3 terrain textures")
func _generate_texture(file_name: String, dark: Color, light: Color, seed_val: int) -> void:
seed(seed_val)
var grid_size := 16
var grid: Array[float] = []
grid.resize(grid_size * grid_size)
for i in grid_size * grid_size:
grid[i] = float(randi() % 1000) / 1000.0
var image := Image.create_empty(256, 256, false, Image.FORMAT_RGBA8)
var cells := grid_size - 1
for y in 256:
var gyf := float(y) / 256.0 * cells
var gy := clampi(gyf, 0, cells)
var fy := gyf - gy
var gy1 := mini(gy + 1, cells)
for x in 256:
var gxf := float(x) / 256.0 * cells
var gx := clampi(gxf, 0, cells)
var fx := gxf - gx
var gx1 := mini(gx + 1, cells)
var v00 := grid[gy * grid_size + gx]
var v10 := grid[gy * grid_size + gx1]
var v01 := grid[gy1 * grid_size + gx]
var v11 := grid[gy1 * grid_size + gx1]
var vx0 := lerpf(v00, v10, fx)
var vx1 := lerpf(v01, v11, fx)
var value := lerpf(vx0, vx1, fy)
var color := dark.lerp(light, value)
color.a = 1.0
image.set_pixel(x, y, color)
image.generate_mipmaps()
var err := image.save_png(TEXTURE_DIR.path_join(file_name))
if err != OK:
push_error("Failed to save texture: ", file_name, " error: ", err)