extends SceneTree const SiteTerrainBaker = preload("res://tools/site_terrain_baker.gd") const RECIPES := { "vehicle_test": "res://tools/sites/vehicle_test_terrain_recipe.gd", "zone1_vigilant": "res://tools/sites/zone1_vigilant_recipe.gd", } const OUTPUT_DIRECTORY := "res://content/sites" const PREVIEW_DIRECTORY := "res://docs/briefs/captures" func _init() -> void: var arguments := OS.get_cmdline_user_args() if arguments.is_empty() or not RECIPES.has(arguments[0]): push_error("usage: -- <%s>" % " | ".join(RECIPES.keys())) quit(1) return var name: String = arguments[0] var recipe_script := load(RECIPES[name]) as GDScript if recipe_script == null: push_error("recipe script %s is missing" % RECIPES[name]) quit(1) return var recipe: SiteTerrainBaker.Recipe = recipe_script.recipe() var data := SiteTerrainBaker.bake(recipe) if data == null: push_error("recipe %s did not bake valid terrain" % name) quit(1) return DirAccess.make_dir_recursive_absolute(OUTPUT_DIRECTORY) DirAccess.make_dir_recursive_absolute(PREVIEW_DIRECTORY) var output_path := "%s/%s_terrain.res" % [OUTPUT_DIRECTORY, name] var save_error := ResourceSaver.save(data, output_path) if save_error != OK: push_error("cannot save %s (%d)" % [output_path, save_error]) quit(1) return var preview_path := "%s/%s_terrain_preview.png" % [PREVIEW_DIRECTORY, name] var preview_error := SiteTerrainBaker.write_preview_png(data, preview_path) if preview_error != OK: push_error("cannot write %s (%d)" % [preview_path, preview_error]) quit(1) return var rock_cells := 0 for material: int in data.materials: if material == SiteTerrainBaker.SonarMaterial.Value.ROCK: rock_cells += 1 var minimum := data.elevations_m[0] var maximum := data.elevations_m[0] for elevation: float in data.elevations_m: minimum = minf(minimum, elevation) maximum = maxf(maximum, elevation) print("Baked %s: %d x %d cells, elevation %.1f .. %.1f m, rock %.0f %%" % [ name, data.columns, data.rows, minimum, maximum, 100.0 * float(rock_cells) / float(data.materials.size()) ]) quit(0)