tools/sync_models.sh: Texturen suchen + flach spiegeln + Textur-Ordner nicht mehr loeschen
Operator-Nachbesserung nach dem Eigenstaendigkeits-Beweis (exportierte App, kein Client/Godot im Dateisystem): - SRC_TEX wird GESUCHT statt fest verdrahtet: SCOPEDVR_TEX_DIR -> assets/textures/military_desert -> assets/textures -> Ordner der Demonstration_Textures*.png unter assets/. Findet er nichts, gibt es einen HINWEIS samt Loesung (SCOPEDVR_TEX_DIR=/pfad). - Texturen werden FLACH nach models/textures/<name>.png gespiegelt — die App sucht sie dort; im Client liegen sie verschachtelt. - Modell-Spiegel schliesst den Unterordner textures/ aus (skip_top): vorher galt er als 'ueberfluessig' und wurde bei JEDEM Lauf geloescht, der Textur-Spiegel legte ihn neu an -> Endlosschleife, --check nie sauber. Belegt: 2. Lauf 0 Aenderungen, --check Exit 0; exportierte App findet baum_kiefer_1/stein_mittel_1 aus models/, fehlende_glbs=0, ERGEBNIS: OK.
This commit is contained in:
parent
7c7dc38566
commit
8c97d00871
1 changed files with 45 additions and 8 deletions
|
|
@ -85,10 +85,35 @@ fi
|
|||
# (models/<oid>.glb) — NICHT verschachtelt in models/assets/objekte.
|
||||
# Deshalb wird $CLIENT/assets/objekte nach $TARGET (models/) gespiegelt.
|
||||
SRC_OBJEKTE="$CLIENT/assets/objekte"
|
||||
SRC_TEX="$CLIENT/assets/textures/military_desert"
|
||||
DST_OBJEKTE="$TARGET"
|
||||
DST_TEX="$TARGET/textures"
|
||||
|
||||
# Pack-Texturen FINDEN statt fest verdrahten (Operator-Nachbesserung 20.10.):
|
||||
# Die Palette (Demonstration_Textures*.png) liegt je Client-Klon in einem anderen
|
||||
# Unterordner und fehlt im Server-Container ganz. Reihenfolge: SCOPEDVR_TEX_DIR →
|
||||
# assets/textures/military_desert → assets/textures → der Ordner, in dem die
|
||||
# Palette irgendwo unter assets/ liegt. Erster Treffer gewinnt.
|
||||
SRC_TEX="${SCOPEDVR_TEX_DIR:-}"
|
||||
if [ -z "$SRC_TEX" ] || [ ! -d "$SRC_TEX" ]; then
|
||||
for cand in "$CLIENT/assets/textures/military_desert" "$CLIENT/assets/textures"; do
|
||||
if [ -d "$cand" ]; then SRC_TEX="$cand"; break; fi
|
||||
done
|
||||
fi
|
||||
if [ -z "$SRC_TEX" ] || [ ! -d "$SRC_TEX" ]; then
|
||||
PAL="$(find "$CLIENT/assets" -name 'Demonstration_Textures*.png' 2>/dev/null | head -1)"
|
||||
if [ -n "$PAL" ]; then SRC_TEX="$(dirname "$PAL")"; fi
|
||||
fi
|
||||
if [ -z "$SRC_TEX" ] || [ ! -d "$SRC_TEX" ]; then
|
||||
echo "HINWEIS: Pack-Texturen nicht gefunden — gesucht in SCOPEDVR_TEX_DIR,"
|
||||
echo " assets/textures/military_desert, assets/textures und nach"
|
||||
echo " Demonstration_Textures*.png unter assets/."
|
||||
echo " Die Modelle werden trotzdem gespiegelt; die Optik nutzt dann"
|
||||
echo " die Standardfarben. Nachreichen: SCOPEDVR_TEX_DIR=/pfad"
|
||||
SRC_TEX="$CLIENT/assets/textures" # absichtlich nicht vorhanden -> HINWEIS statt stiller Leerlauf
|
||||
fi
|
||||
echo "Objekte: $SRC_OBJEKTE"
|
||||
echo "Texturen: $SRC_TEX"
|
||||
|
||||
# Python macht das Spiegeln (copy2 + überflüssige Dateien löschen).
|
||||
# --check (Dry-Run) zeigt Abweichungen OHNE etwas zu verändern.
|
||||
python3 - "$SRC_OBJEKTE" "$DST_OBJEKTE" "$SRC_TEX" "$DST_TEX" "$MODE" <<'PY'
|
||||
|
|
@ -101,12 +126,12 @@ pairs = [
|
|||
mode = sys.argv[5]
|
||||
|
||||
|
||||
def scan(root: str) -> dict:
|
||||
def scan(root: str, skip_top: set = frozenset()) -> dict:
|
||||
out = {}
|
||||
if not os.path.isdir(root):
|
||||
return out
|
||||
for r, dirs, files in os.walk(root):
|
||||
dirs[:] = [d for d in dirs if d != ".godot"]
|
||||
dirs[:] = [d for d in dirs if d != ".godot" and d not in skip_top]
|
||||
for f in files:
|
||||
if f.endswith(".import") or f == ".gdignore":
|
||||
continue
|
||||
|
|
@ -115,12 +140,20 @@ def scan(root: str) -> dict:
|
|||
return out
|
||||
|
||||
|
||||
def run(label: str, src: str, dst: str) -> int:
|
||||
def run(label: str, src: str, dst: str, flat: bool = False,
|
||||
skip_top: set = frozenset()) -> int:
|
||||
if not os.path.isdir(src):
|
||||
print("ABWEICHUNG: Quelle fehlt: %s" % src)
|
||||
return 1
|
||||
s_map = scan(src)
|
||||
d_map = scan(dst)
|
||||
s_map = scan(src, skip_top)
|
||||
d_map = scan(dst, skip_top)
|
||||
# flat=True (Pack-Texturen, Operator-Nachbesserung 20.10.): Die App sucht die
|
||||
# Palette FLACH unter models/textures/<name>.png — im Client liegen die PNGs
|
||||
# aber verschachtelt (assets/textures/<unterordner>/…). Deshalb ohne
|
||||
# Unterordner spiegeln. Alte verschachtelte Reste erscheinen dadurch als
|
||||
# "überflüssig" und werden automatisch entfernt (selbstheilend).
|
||||
if flat:
|
||||
s_map = {os.path.basename(p): p for p in s_map.values()}
|
||||
changes = []
|
||||
for rel, sp in s_map.items():
|
||||
dp = os.path.join(dst, rel)
|
||||
|
|
@ -156,8 +189,12 @@ def run(label: str, src: str, dst: str) -> int:
|
|||
|
||||
|
||||
dev = 0
|
||||
dev |= run("Objekte", pairs[0][1], pairs[0][2])
|
||||
dev |= run("Texturen", pairs[1][1], pairs[1][2])
|
||||
# skip_top: der Modell-Spiegel darf den Textur-Unterordner NICHT als
|
||||
# "überflüssig" löschen (Operator-Nachbesserung 20.10. — sonst löscht jeder
|
||||
# Lauf models/textures/, der Textur-Spiegel legt ihn neu an: Endlosschleife,
|
||||
# --check nie sauber).
|
||||
dev |= run("Objekte", pairs[0][1], pairs[0][2], skip_top={"textures"})
|
||||
dev |= run("Texturen", pairs[1][1], pairs[1][2], flat=True)
|
||||
sys.exit(dev)
|
||||
PY
|
||||
DEVIATION=$?
|
||||
|
|
|
|||
Loading…
Reference in a new issue