87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bspviz/internal/app"
|
|
"bspviz/internal/geom"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func usageAndExit(msg string, code int) {
|
|
fmt.Fprintf(os.Stderr, "Fehler: %s\n\n", msg)
|
|
fmt.Fprintf(os.Stderr, "Beispiel:\n go run ./main.go -wad MYMAP.wad -map MAP01 -info\n\n")
|
|
fmt.Fprintf(os.Stderr, "Verfügbare Flags:\n")
|
|
flag.PrintDefaults()
|
|
os.Exit(code)
|
|
}
|
|
|
|
func main() {
|
|
// Flags
|
|
wadPath := flag.String("wad", "", "Pfad zur WAD (required)")
|
|
mapMarker := flag.String("map", "MAP01", "Map-Marker (z.B. MAP01, E1M1, MYMAP)")
|
|
listOnly := flag.Bool("list", false, "Nur Directory auflisten und beenden")
|
|
info := flag.Bool("info", false, "Roh-Infos zur Map (Counts von VERTEXES/LINEDEFS)")
|
|
extract := flag.String("extract", "", "Kommagetrennte Lump-Namen aus der Map extrahieren (z.B. VERTEXES,LINEDEFS)")
|
|
outdir := flag.String("out", ".", "Zielordner für -extract")
|
|
geomtest := flag.Bool("geomtest", false, "Geometrie-Check: Segmente/AABB/Probe-Split ausgeben")
|
|
buildbsp := flag.Bool("buildbsp", false, "BSP bauen und Metriken ausgeben")
|
|
alpha := flag.Float64("alpha", 10, "Kosten: Gewicht für Splits")
|
|
beta := flag.Float64("beta", 1, "Kosten: Gewicht für Balance")
|
|
eps := flag.Float64("eps", geom.EPS, "Epsilon für Geometrie")
|
|
leaf := flag.Int("leafmax", 12, "max. Segmente pro Leaf")
|
|
depth := flag.Int("maxdepth", 32, "max. Rekursionstiefe")
|
|
cands := flag.Int("cands", 16, "Anzahl Kandidaten (Subsample)")
|
|
seed := flag.Int64("seed", 0, "RNG-Seed (0 = default)")
|
|
dotOut := flag.String("dot", "", "DOT-Export-Datei (optional)")
|
|
treePNG := flag.String("treepng", "", "Graphviz-Baum als PNG (optional, benötigt -dot)")
|
|
overlay := flag.String("overlay", "", "Map-Overlay als PNG (optional)")
|
|
|
|
flag.Parse()
|
|
|
|
if strings.TrimSpace(*wadPath) == "" {
|
|
usageAndExit("Flag -wad fehlt. Bitte Pfad zu einer Doom-kompatiblen WAD-Datei angeben.", 2)
|
|
}
|
|
|
|
var extractLumps []string
|
|
if strings.TrimSpace(*extract) != "" {
|
|
want := strings.Split(*extract, ",")
|
|
extractLumps = make([]string, 0, len(want))
|
|
for _, name := range want {
|
|
n := strings.ToUpper(strings.TrimSpace(name))
|
|
if n == "" {
|
|
continue
|
|
}
|
|
extractLumps = append(extractLumps, n)
|
|
}
|
|
}
|
|
|
|
opts := app.Options{
|
|
WadPath: *wadPath,
|
|
MapMarker: *mapMarker,
|
|
ListOnly: *listOnly,
|
|
Info: *info,
|
|
Extract: extractLumps,
|
|
OutDir: *outdir,
|
|
GeomTest: *geomtest,
|
|
BuildBSP: *buildbsp,
|
|
Alpha: *alpha,
|
|
Beta: *beta,
|
|
Eps: *eps,
|
|
LeafMax: *leaf,
|
|
MaxDepth: *depth,
|
|
Cands: *cands,
|
|
Seed: *seed,
|
|
DotOut: *dotOut,
|
|
TreePNG: *treePNG,
|
|
Overlay: *overlay,
|
|
Out: os.Stdout,
|
|
}
|
|
|
|
if err := app.Run(opts); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|