#!/usr/bin/env python3 """Reorganize textures/td_sliced/ into textures/tb//.png Already-lowercase precondition: run lowercase_textures.py first. For each _.png in the source folder, moves: - the .png itself - the .png.import sibling (with source_file= rewritten) - the .tres sibling (if any) with its path= field rewritten Files that don't match the family_variant pattern are left in place. """ import re from pathlib import Path ROOT = Path.home() / "godot_projects/trench/textures" SRC = ROOT / "td_sliced" DST_BASE = ROOT / "tb" # family_variant.png OR family_variant_tag.png # variant must start with a digit (so we don't accidentally split a multi-word # family name on its first underscore) NAME_RE = re.compile(r"^([a-z]+)_(\d+[a-z](?:_[a-z]+)?)\.png$") moved_groups = 0 moved_files = 0 skipped = [] png_files = sorted(SRC.glob("*.png")) for png in png_files: m = NAME_RE.match(png.name) if not m: skipped.append(png.name) continue family, variant = m.group(1), m.group(2) new_dir = DST_BASE / family new_dir.mkdir(parents=True, exist_ok=True) new_png = new_dir / f"{variant}.png" new_imp = new_dir / f"{variant}.png.import" new_tres = new_dir / f"{variant}.tres" if new_png.exists(): print(f"COLLISION skip: {png.name} -> {new_png}") continue # Move .png png.rename(new_png) # Move + rewrite .png.import old_imp = png.with_suffix(".png.import") if old_imp.exists(): text = old_imp.read_text() text = text.replace( f"res://textures/td_sliced/{png.name}", f"res://textures/tb/{family}/{variant}.png", ) old_imp.unlink() new_imp.write_text(text) # Move + rewrite sibling .tres material if it exists old_tres = png.with_suffix(".tres") if old_tres.exists(): text = old_tres.read_text() text = text.replace( f"res://textures/td_sliced/{png.name}", f"res://textures/tb/{family}/{variant}.png", ) old_tres.unlink() new_tres.write_text(text) moved_groups += 1 moved_files += 1 + int(old_imp.exists() is False) * 0 # always counted via group print(f"\nmoved {moved_groups} groups") print(f"skipped (non-matching) {len(skipped)} files:") for s in skipped: print(f" {s}")