Extra2D/refactor.py

118 lines
5.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Extra2D 目录结构重构脚本
用于批量移动文件和更新 include 路径
"""
import os
import shutil
import re
BASE_DIR = r"d:\Extra2D\Extra2D"
def move_file(src, dst):
if os.path.exists(src):
os.makedirs(os.path.dirname(dst), exist_ok=True)
shutil.move(src, dst)
print(f"移动: {src} -> {dst}")
else:
print(f"文件不存在: {src}")
def move_remaining_files():
moves = [
(r"include\extra2d\2d\renderer\UIMeshBuffer.h", r"include\extra2d\renderer\2d\UIMeshBuffer.h"),
(r"src\2d\components\Sprite.cpp", r"src\renderer\2d\components\Sprite.cpp"),
(r"src\2d\components\SpriteFrame.cpp", r"src\renderer\2d\components\SpriteFrame.cpp"),
(r"src\2d\renderer\Batcher2d.cpp", r"src\renderer\2d\Batcher2d.cpp"),
(r"src\2d\renderer\RenderDrawInfo.cpp", r"src\renderer\2d\RenderDrawInfo.cpp"),
(r"src\2d\renderer\RenderEntity.cpp", r"src\renderer\2d\RenderEntity.cpp"),
(r"src\2d\renderer\StencilManager.cpp", r"src\renderer\2d\StencilManager.cpp"),
(r"src\2d\renderer\UIMeshBuffer.cpp", r"src\renderer\2d\UIMeshBuffer.cpp"),
]
for src_rel, dst_rel in moves:
src = os.path.join(BASE_DIR, src_rel)
dst = os.path.join(BASE_DIR, dst_rel)
move_file(src, dst)
def update_includes():
path_mappings = {
r'<extra2d/core/Object\.h>': r'<extra2d/base/Object.h>',
r'<extra2d/core/types\.h>': r'<extra2d/base/Types.h>',
r'<extra2d/core/color\.h>': r'<extra2d/math/Color.h>',
r'<extra2d/core/math_types\.h>': r'<extra2d/math/Math.h>',
r'<extra2d/core/event/EventBus\.h>': r'<extra2d/event/EventBus.h>',
r'<extra2d/core/event/EventTarget\.h>': r'<extra2d/event/EventTarget.h>',
r'<extra2d/core/scene-graph/Node\.h>': r'<extra2d/scene/Node.h>',
r'<extra2d/core/scene-graph/Scene\.h>': r'<extra2d/scene/Scene.h>',
r'<extra2d/core/scene-graph/Component\.h>': r'<extra2d/scene/Component.h>',
r'<extra2d/core/scene-graph/Camera\.h>': r'<extra2d/scene/Camera.h>',
r'<extra2d/core/scene-graph/Model\.h>': r'<extra2d/scene/Model.h>',
r'<extra2d/core/scene-graph/RenderScene\.h>': r'<extra2d/scene/RenderScene.h>',
r'<extra2d/core/scene-graph/Layers\.h>': r'<extra2d/scene/Layers.h>',
r'<extra2d/core/Root\.h>': r'<extra2d/scene/Root.h>',
r'<extra2d/core/assets/Asset\.h>': r'<extra2d/assets/Asset.h>',
r'<extra2d/core/assets/AssetManager\.h>': r'<extra2d/assets/AssetManager.h>',
r'<extra2d/core/assets/ImageAsset\.h>': r'<extra2d/assets/ImageAsset.h>',
r'<extra2d/core/assets/Texture2D\.h>': r'<extra2d/assets/Texture2D.h>',
r'<extra2d/core/assets/Material\.h>': r'<extra2d/assets/Material.h>',
r'<extra2d/2d/components/Sprite\.h>': r'<extra2d/renderer/2d/components/Sprite.h>',
r'<extra2d/2d/components/SpriteFrame\.h>': r'<extra2d/renderer/2d/components/SpriteFrame.h>',
r'<extra2d/2d/renderer/Batcher2d\.h>': r'<extra2d/renderer/2d/Batcher2d.h>',
r'<extra2d/2d/renderer/RenderEntity\.h>': r'<extra2d/renderer/2d/RenderEntity.h>',
r'<extra2d/2d/renderer/RenderDrawInfo\.h>': r'<extra2d/renderer/2d/RenderDrawInfo.h>',
r'<extra2d/2d/renderer/UIMeshBuffer\.h>': r'<extra2d/renderer/2d/UIMeshBuffer.h>',
r'<extra2d/2d/renderer/StencilManager\.h>': r'<extra2d/renderer/2d/StencilManager.h>',
}
extensions = ['.h', '.hpp', '.cpp', '.c', '.inl']
for root, dirs, files in os.walk(BASE_DIR):
for file in files:
if any(file.endswith(ext) for ext in extensions):
filepath = os.path.join(root, file)
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
original = content
for old_pattern, new_path in path_mappings.items():
content = re.sub(old_pattern, new_path, content)
if content != original:
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print(f"更新: {filepath}")
except Exception as e:
print(f"错误处理 {filepath}: {e}")
def delete_empty_dirs():
empty_dirs = [
r"include\extra2d\core",
r"include\extra2d\2d",
r"src\core",
r"src\2d",
]
for dir_rel in empty_dirs:
dir_path = os.path.join(BASE_DIR, dir_rel)
if os.path.exists(dir_path):
try:
shutil.rmtree(dir_path)
print(f"删除目录: {dir_path}")
except Exception as e:
print(f"无法删除 {dir_path}: {e}")
if __name__ == "__main__":
print("=== 移动剩余文件 ===")
move_remaining_files()
print("\n=== 更新 include 路径 ===")
update_includes()
print("\n=== 删除空目录 ===")
delete_empty_dirs()
print("\n完成!")