102 lines
6.9 KiB
Python
102 lines
6.9 KiB
Python
"""Remove retired theme source files. Unity Assets are deleted separately via Pipeline."""
|
||
import json
|
||
from pathlib import Path
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
|
||
|
||
def edit(rel, fn):
|
||
path = ROOT / rel
|
||
text = path.read_text(encoding='utf-8')
|
||
path.write_text(fn(text), encoding='utf-8')
|
||
|
||
|
||
def remove(rel):
|
||
path = (ROOT / rel).resolve()
|
||
assert path.is_relative_to(ROOT.resolve()) and not path.is_relative_to((ROOT / 'AIClient/Assets').resolve())
|
||
if not path.exists():
|
||
return
|
||
if path.is_dir():
|
||
for child in sorted(path.rglob('*'), key=lambda p: len(p.parts), reverse=True):
|
||
child.unlink() if child.is_file() else child.rmdir()
|
||
path.rmdir()
|
||
else:
|
||
path.unlink()
|
||
|
||
|
||
def main():
|
||
# Exact retired source paths; no wildcard deletion or Assets/.meta manipulation.
|
||
for rel in [
|
||
'Doc/UIPrefabCreater/UI_MainHUD_Studio.json', 'Doc/UIPrefabCreater/UI_ConfirmDialog_Studio.json',
|
||
'Doc/UIPrefabCreater/UI_MainHUD_Mint.json', 'Doc/UIPrefabCreater/UI_ConfirmDialog_Mint.json',
|
||
'Doc/UIPrefabCreater/UI_ThemeSwitcher.json',
|
||
'Doc/Config/version.studio.example.json', 'Doc/Config/version.mint.example.json',
|
||
'Doc/Design/UI/Studio', 'Doc/Design/UI/Mint', 'Doc/Design/UI/mint_sources.json',
|
||
'Doc/Design/UI/Home/UI_MainHUD_Studio.png', 'Doc/Design/UI/Home/UI_MainHUD_Mint.png',
|
||
'TempResource/commonv30_reference_sheet.png',
|
||
'AIClient/AgentScripts/BuildStudioUi.cs', 'AIClient/AgentScripts/BuildMintUi.cs', 'AIClient/AgentScripts/BuildUiAccess.cs',
|
||
'Tools/generate_studio_ui.py', 'Tools/generate_mint_ui.py', 'Tools/generate_mint_docs.py', 'Tools/generate_theme_switcher.py',
|
||
]:
|
||
remove(rel)
|
||
|
||
def generator(s):
|
||
if "def generate(theme='candy'):" not in s:
|
||
return s
|
||
start = s.index("def generate(theme='candy'):")
|
||
end = s.index(' nodes, events = [], []', start)
|
||
s = s[:start] + '''def generate():
|
||
theme = 'candy'
|
||
name = 'UI_MainHUD'
|
||
panel, primary, secondary, ink, muted, light = ('ui_panel_content', 'btn_primary_normal', 'btn_secondary_normal', '#5A4632', '#687C8C', '#F6F8FF')
|
||
''' + s[end:]
|
||
s = s.replace("theme == 'candy' and sprite", "sprite")
|
||
s = s.replace("panel_color = '#FFFFEF' if theme == 'mint' else '#FFFFFF'", "panel_color = '#FFFFFF'")
|
||
s = s.replace("primary_color = '#32DE92' if theme == 'mint' else '#FFFFFF'", "primary_color = '#FFFFFF'")
|
||
s = s.replace("'ui_panel_header' if theme == 'candy' else panel", "'ui_panel_header'")
|
||
s = s.replace("light if theme == 'candy' else ink", "light")
|
||
s = s.replace("theme == 'candy'", 'True')
|
||
s = s.replace("key == 'Home' and True", "key == 'Home'")
|
||
s = s.replace("folder = 'Home' if s.startswith('home_') else 'Mint' if s.startswith('mint_') else 'Studio' if s.startswith('studio_') else 'Common'", "folder = 'Home' if s.startswith('home_') else 'Common'")
|
||
s = s.replace(" for theme in ['candy', 'studio', 'mint']:\n generate(theme)", " generate()")
|
||
return s
|
||
edit('Tools/generate_home_ui.py', generator)
|
||
edit('AIClient/AgentScripts/BuildHomeUi.cs', lambda s: s.replace('static readonly string[] Names = { "UI_MainHUD", "UI_MainHUD_Studio", "UI_MainHUD_Mint" };', 'static readonly string[] Names = { "UI_MainHUD" };').replace('built 3 home HUD prefabs from JSON.', 'built Candy home HUD prefab from JSON.').replace('Rendered 3 theme previews, a tall-screen preview and reconnect preview:', 'Rendered Candy, tall-screen and reconnect previews:'))
|
||
|
||
def manager(s):
|
||
if ' /// <summary>预加载全部主题面板' not in s:
|
||
return s
|
||
start = s.index(' /// <summary>预加载全部主题面板')
|
||
end = s.index(' public void Close(', start)
|
||
return (s[:start] + s[end:]).replace(' public bool IsSwitchingTheme { get; private set; }\n', '')
|
||
edit('AIClient/Assets/HotUpdate/Scripts/UI/UiManager.cs', manager)
|
||
edit('AIClient/Assets/AOT/Scripts/Boot/BootSettings.cs', lambda s: s.replace('业务 UI 主题:candy(糖果风)/ studio(深绿工作室)/ mint(奶油薄荷绿);version.json 的 uiTheme 非空时覆盖。重新启动生效。', '业务 UI 当前仅支持 candy(糖果风);保留该字段兼容旧配置,其他值回退到 Candy。'))
|
||
edit('AIClient/Assets/AOT/Scripts/Boot/BootContext.cs', lambda s: s.replace('启动时选定的业务 UI 主题:candy / studio / mint。', '业务 UI 当前仅使用 candy;字段保留用于旧启动配置兼容。'))
|
||
edit('AIClient/Assets/AOT/Scripts/Patch/VersionInfo.cs', lambda s: s.replace('空值沿用 BootSettings;candy / studio / mint,重新启动生效。', '兼容旧版本字段;当前 UI 仅支持 candy,其他主题值回退到 Candy。'))
|
||
edit('AIClient/Assets/Editor/UI/SetupUiBundleCollector.cs', lambda s: s.replace('把所有主题的 UI Prefab 收进 Art', '把 Candy UI Prefab 收进 Art').replace('Candy + Studio + Mint UI themes', 'Candy UI').replace('Art/UI collects all three themes by prefab name', 'Art/UI collects Candy UI by prefab name'))
|
||
|
||
def overview(s):
|
||
if '并列主题:' not in s:
|
||
return s
|
||
start = s.index('并列主题:')
|
||
end = s.index('## 2.', start)
|
||
return s[:start] + '当前仅使用 **Candy 糖果风**。Studio / Mint 已按用户要求删除;保留旧 `uiTheme` 字段的读取兼容,其他值回退 Candy。当前主界面继续走 JSON→Prefab,详见 `Doc/Design/UI/UI_Themes.md`。\n\n' + s[end:]
|
||
edit('Doc/UI_AutoGen_Overview.md', overview)
|
||
def project(s):
|
||
if '## 并列 UI 主题' not in s:
|
||
return s
|
||
start = s.index('## 并列 UI 主题')
|
||
end = s.index('## 与图集方案关系', start)
|
||
return s[:start] + '## UI 风格\n\n- 当前仅使用 Candy 糖果风;Studio / Mint 主题与停用的切换入口已删除。\n- `BootSettings.UiTheme` / 远程 `version.json.uiTheme` 保留用于旧配置兼容,其他值回退 Candy。\n- 业务按逻辑名异步打开:`UiManager.OpenAsync`。\n- UI Prefab 收集进 Art/UI,图片与字体作为依赖进入资源包。\n\n' + s[end:]
|
||
edit('Doc/Rule/UnityUIProject.md', project)
|
||
generation = ROOT / 'Doc/Design/UI/Home/home_generation.json'
|
||
doc = json.loads(generation.read_text(encoding='utf-8'))
|
||
doc['ui']['prefabs'] = ['UI_MainHUD']
|
||
doc['validation']['previews'] = ['UI_MainHUD.png', 'UI_MainHUD_tall.png', 'UI_MainHUD_reconnect.png']
|
||
doc['themeRemoval'] = {'date': '2026-10-14', 'activeTheme': 'candy', 'removed': ['Studio', 'Mint', 'ThemeSwitcher'], 'note': 'Earlier multi-theme checks are historical; current builder only generates Candy.'}
|
||
generation.write_text(json.dumps(doc, ensure_ascii=False, indent=2) + '\n', encoding='utf-8')
|
||
print('Removed retired source/preview/config files; updated Candy-only generation and runtime compatibility.')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|