Files
cocos/tools/sync-themes-from-unity.py
刘宇飞 d393302388 Complete Cocos Creator port with level bundles, themes, and tooling.
Adds level prefabs, theme assets, audio, extensions, and deployment scripts for the Unity WebGL migration.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 15:30:58 +08:00

121 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""从 Unity 源按 sanxing 命名规范完整同步主题贴图。"""
from __future__ import annotations
import importlib.util
import shutil
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
TEX = ROOT / "assets" / "resources" / "textures"
UNITY = Path("/Users/liuyufei/tfrh/竞赛/scratch-unity-base/Assets/Texture")
_spec = importlib.util.spec_from_file_location(
"unify", ROOT / "tools" / "unify-theme-texture-names.py"
)
unify = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(unify)
RENAMES = unify.RENAMES
THEME_SHIP = unify.THEME_SHIP
def unity_src(theme: str, rel: str) -> Path | None:
rel = rel.replace(".png", "")
def with_png(base: Path) -> Path | None:
fp = base.with_suffix(".png")
return fp if fp.exists() else None
if theme == "chinese":
if rel.startswith("skin/"):
hit = with_png(UNITY / "Panda" / rel[len("skin/"):])
if hit:
return hit
hit = with_png(UNITY / "Chinese" / rel)
if hit:
return hit
return with_png(TEX / "chinese" / "_legacy" / rel)
if theme == "redArmy":
rel_u = rel.replace("redArmyShip", "redarmyship")
return with_png(UNITY / "redarmy" / rel_u)
p = UNITY / theme / rel
if theme == "silu" and not p.with_suffix(".png").exists() and rel.startswith("skin/跳背面/"):
name = Path(rel).name
alt_name = "机器人" if name == "1" else f"机器人{name}"
hit = with_png(UNITY / "silu" / "player" / "jump-正" / alt_name)
if hit:
return hit
return with_png(p)
def cocos_dst(theme: str, rel: str) -> Path:
return (TEX / theme / rel.replace(".png", "")).with_suffix(".png")
def sync_theme(theme: str) -> int:
copied = 0
for t, old_rel, new_rel in RENAMES:
if t != theme:
continue
src = unity_src(theme, old_rel)
if not src:
continue
dst = cocos_dst(theme, new_rel)
dst.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(src, dst)
copied += 1
# 已有 sanxing 命名的根目录文件Unity 与 sanxing 同名)
if theme == "numMan":
src = UNITY / "numMan" / "nProp_kuai .png"
if src.exists():
shutil.copy2(src, TEX / "numMan" / "nProp_kuai1.png")
copied += 1
for name in [
"Baseblock", "JumpBlock", "WallBlock", "kuai11", "bg",
"anniu_03", "anniu_06", "anniu_08", "anniu_10", "anniu_12",
"anniu_17", "anniu_19", "anniu_21", "anniu_22",
]:
src = UNITY / "numMan" / f"{name}.png"
if src.exists():
shutil.copy2(src, TEX / "numMan" / f"{name}.png")
copied += 1
sf, sb = THEME_SHIP["numMan"]
for name in (sf, sb):
src = UNITY / "numMan" / f"{name}.png"
if src.exists():
shutil.copy2(src, TEX / "numMan" / f"{name}.png")
copied += 1
if theme == "redArmy":
for name in [
"Baseblock", "JumpBlock", "WallBlock", "bg",
]:
src = UNITY / "redarmy" / f"{name}.png"
if src.exists():
shutil.copy2(src, TEX / "redArmy" / f"{name}.png")
copied += 1
if theme == "snow":
for old, new in [("Prop_kuai2", "Prop_kuai1"), ("nProp_kuai2", "nProp_kuai1")]:
for base in [TEX / "snow", TEX / "snow" / "_legacy", TEX / "_orphan_stages" / "snow"]:
src = base / f"{old}.png"
if src.exists():
shutil.copy2(src, TEX / "snow" / f"{new}.png")
copied += 1
break
return copied
def main() -> None:
total = 0
for theme in ["silu", "numMan", "redArmy", "chinese", "snow"]:
n = sync_theme(theme)
print(f"{theme}: copied {n}")
total += n
unify.patch_themes_database()
unify.patch_palettes()
print(f"done, {total} files")
if __name__ == "__main__":
main()