import os import re def process_file(filepath): with open(filepath, 'r', encoding='utf-8') as f: content = f.read() original_content = content # Component replacements # MeshRenderer content = re.sub(r'\.MeshRenderer\s*->', '.GetComponent().', content) content = re.sub(r'->MeshRenderer\s*->', '->GetComponent().', content) content = re.sub(r'\.MeshRenderer\s*\.\s*has_value\(\)', '.HasComponent()', content) content = re.sub(r'->MeshRenderer\s*\.\s*has_value\(\)', '->HasComponent()', content) content = re.sub(r'\.MeshRenderer\s*=\s*(.*?);', r'.AddComponent(\1);', content) content = re.sub(r'->MeshRenderer\s*=\s*(.*?);', r'->AddComponent(\1);', content) content = re.sub(r'\.MeshRenderer\s*\.\s*reset\(\)', '.RemoveComponent()', content) # Camera content = re.sub(r'\.Camera\s*->', '.GetComponent().', content) content = re.sub(r'->Camera\s*->', '->GetComponent().', content) content = re.sub(r'\.Camera\s*\.\s*has_value\(\)', '.HasComponent()', content) content = re.sub(r'->Camera\s*\.\s*has_value\(\)', '->HasComponent()', content) content = re.sub(r'\.Camera\s*=\s*(.*?);', r'.AddComponent(\1);', content) content = re.sub(r'->Camera\s*=\s*(.*?);', r'->AddComponent(\1);', content) # Light content = re.sub(r'\.Light\s*->', '.GetComponent().', content) content = re.sub(r'->Light\s*->', '->GetComponent().', content) content = re.sub(r'\.Light\s*\.\s*has_value\(\)', '.HasComponent()', content) content = re.sub(r'->Light\s*\.\s*has_value\(\)', '->HasComponent()', content) content = re.sub(r'\.Light\s*=\s*(.*?);', r'.AddComponent(\1);', content) content = re.sub(r'->Light\s*=\s*(.*?);', r'->AddComponent(\1);', content) # PrefabInstance content = re.sub(r'\.PrefabInstance\s*->', '.GetComponent().', content) content = re.sub(r'->PrefabInstance\s*->', '->GetComponent().', content) content = re.sub(r'\.PrefabInstance\s*\.\s*has_value\(\)', '.HasComponent()', content) content = re.sub(r'->PrefabInstance\s*\.\s*has_value\(\)', '->HasComponent()', content) content = re.sub(r'\.PrefabInstance\s*=\s*(.*?);', r'.AddComponent(\1);', content) content = re.sub(r'->PrefabInstance\s*=\s*(.*?);', r'->AddComponent(\1);', content) # Direct struct members (Id, ParentId, Name, Transform) # We must be careful not to replace `object.Id` everywhere blindly if `object` is not a GameObject. # But in this codebase, typical variable names are `gameObject`, `object`, `rootObject`, `currentObject`. # It's safer to rely on compiler errors for the rest and fix them manually. if content != original_content: with open(filepath, 'w', encoding='utf-8') as f: f.write(content) print(f"Updated {filepath}") for root, _, files in os.walk('Source'): for file in files: if file.endswith('.cpp') or file.endswith('.h'): process_file(os.path.join(root, file))