Sly: „feiner malen“. Die Material-Schicht bekommt ein eigenes Raster (terrain.material_resolution, optional; Default = resolution → alte Karten unverändert gültig): ~1 m pro Punkt, auf dem Höhenraster ausgerichtet, max. 1025 (1024 m → 1025, 256 m → 257, 2048 m → 1025 = 2 m). - SvmapIO: material_resolution / material_resolution_for / resample / upgrade_material_layer / material_at_height_point; V15 prüft Raster + Länge. - Neue Karten starten fein; beim Öffnen werden alte Karten optisch identisch angehoben (Datei ändert sich erst beim Speichern); Resize rechnet die Schicht auf ihrem eigenen Raster an der Weltposition um. - Pinsel, Spiegeln (Symmetrie live + „Symmetrie anwenden“) und Live-Splat arbeiten auf dem Material-Raster; Vertex-Farben lesen den passenden Punkt. - Malen-Hinweis zeigt die echte feinste Einheit. - Tests: test_mal_fein 22/22 (Raster, Anheben, 2-m-Pinsel ≈ 13 Punkte, V15, Roundtrip, Resize); test_terrain/test_terrain_mirror/ test_symmetry_onclick auf das neue Raster nachgezogen; Identitäts-Runner OK. Kette Editor → Server (Prüfsumme) → Client per run_map_download_e2e 15/15. Format-Spiegel: Match-Server svmap_loader (V15) + Client svmap_terrain. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
22 lines
982 B
GDScript
22 lines
982 B
GDScript
extends SceneTree
|
|
## Probe (Karte 24.10.): alte Karte öffnen → feines Raster → 1-m-Sandpfad malen
|
|
## → speichern. Ausgabe-Pfad = erstes User-Arg. Für die Client-E2E-Kette.
|
|
func _initialize() -> void:
|
|
var out := OS.get_cmdline_user_args()[0]
|
|
var ld := SvmapIO.load_from_file(ProjectSettings.globalize_path("res://FirstFight.svmap"))
|
|
if not bool(ld["ok"]):
|
|
print("PROBE_FAIL load ", ld["errors"])
|
|
quit(1)
|
|
return
|
|
var doc: Dictionary = ld["data"]
|
|
var t: Dictionary = doc["terrain"]
|
|
SvmapIO.upgrade_material_layer(t)
|
|
var mres := SvmapIO.material_resolution(t)
|
|
var mats := SvmapIO.decode_materials(t)
|
|
for i in 40:
|
|
TerrainField.apply_material_brush(mats, mres, float(t["size_x_m"]), float(t["size_z_m"]),
|
|
-20.0 + float(i), 5.0, 0.6, 2)
|
|
t["materials_r8_b64"] = SvmapIO.encode_materials(mats)
|
|
var sv := SvmapIO.save_to_file(out, doc)
|
|
print("PROBE ", "OK" if bool(sv["ok"]) else "FAIL %s" % str(sv["errors"]), " mres=", mres)
|
|
quit(0 if bool(sv["ok"]) else 1)
|