F4MP/tiltedcode/Tools/Scripts/cast_conv.py
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

59 lines
1.6 KiB
Python

import glob
import re
def parse_call(line):
block_count = 0
end_idx = 0
start_idx = len('RTTI_CAST(')
for i in range(start_idx, len(line)):
if line[i] == '(':
block_count = block_count + 1
elif line[i] == ')':
block_count = block_count - 1
elif line[i] == ',' and block_count == 0:
end_idx = i
break
from_type = line.find(',', end_idx + 1)
to_type = line.find(')', from_type + 1)
inst = line[start_idx:end_idx]
type_target = line[from_type + 2:to_type]
rep = line[0:to_type+1]
return ("Cast<" + type_target + ">(" + inst + ")", rep)
def handle_file(filename):
if 'Fallout4' in filename or 'RTTI.h' in filename or 'RTTI.cpp' in filename:
return
with open(filename, 'r') as file :
filedata = file.read()
replace = {}
pointers = [m.start() for m in re.finditer('RTTI_CAST', filedata)]
if len(pointers) > 0:
for p in pointers:
start_loc = p
end_loc = filedata.find('\n', start_loc)
to, fr = parse_call(filedata[start_loc:end_loc])
replace[fr] = to
if len(replace) > 0:
for fr in replace:
filedata = filedata.replace(fr, replace[fr])
with open(filename, 'w') as file:
file.write(filedata)
# root_dir needs a trailing slash (i.e. /root/dir/)
for filename in glob.iglob('../../Code/**/*.cpp', recursive=True):
handle_file(filename)
for filename in glob.iglob('../../Code/**/*.hpp', recursive=True):
handle_file(filename)
for filename in glob.iglob('../../Code/**/*.h', recursive=True):
handle_file(filename)