@@ -303,11 +303,11 @@ def emit_line(*lines: str):
303303 f .write ("\n " )
304304
305305 logger .info (
306- f"Subpass 1: Generating class dependency graph for { namespace or " <default namespace>" } "
306+ f"Subpass 1: Generating class dependency graph for { namespace or ' <default namespace>' } "
307307 )
308308 emit_line ("# fmt: off" )
309309 emit_line ("# Auto-generated by https://github.com/mos9527/UnityPyTypetreeCodegen" )
310- emit_line (f"# Python definition for { namespace or " <default namespace>" } " , "" )
310+ emit_line (f"# Python definition for { namespace or ' <default namespace>' } " , "" )
311311 if import_root :
312312 emit_line (f"from { import_root } import *" )
313313 for clazz , parent in import_defs .items ():
@@ -452,29 +452,44 @@ def __open(fname: str):
452452
453453
454454import re , logging
455- from UnityPy .helpers .TypeTreeGenerator import TypeTreeGenerator
456-
455+ from TypeTreeGeneratorAPI import TypeTreeGenerator
457456
458457def __main__ ():
459458 parser = argparse .ArgumentParser ()
460- parser .add_argument (
461- "--files" ,
462- help = "Load typetree dump from game assembly folder containing the DLLs" ,
463- )
464- parser .add_argument (
465- "--json" ,
466- help = "Load tree dump in json format {str[fullname]: List[TypeTreeNode]},..." ,
467- )
468459 parser .add_argument (
469460 "--unity-version" ,
470461 help = "Unity version to use for typetree generation" ,
471462 default = "2022.3.21f1" ,
472463 )
464+ parser .add_argument (
465+ "--backend" ,
466+ help = "Backend to use for code generation" ,
467+ default = "AssetRipper" ,
468+ )
473469 parser .add_argument (
474470 "--filter" ,
475471 help = "Filter classnames by regex" ,
476472 default = ".*" ,
477473 )
474+ parser .add_argument (
475+ "--json" ,
476+ help = "[JSON] Load tree dump in json format {str[fullname]: List[TypeTreeNode]},..." ,
477+ )
478+ parser .add_argument (
479+ "--asm" ,
480+ help = "[Asm] Load typetree dump from game assembly DLL" ,
481+ type = str
482+ )
483+ parser .add_argument (
484+ "--il2cpp" ,
485+ help = "[IL2CPP] Load typetree dump from IL2CPP binaries" ,
486+ type = str
487+ )
488+ parser .add_argument (
489+ "--metadata" ,
490+ help = "[IL2CPP] Load typetree dump from metadata files" ,
491+ type = str
492+ )
478493 parser .add_argument (
479494 "--log-level" ,
480495 choices = ["DEBUG" , "INFO" , "WARNING" , "ERROR" , "CRITICAL" ],
@@ -490,20 +505,26 @@ def __main__():
490505 shutil .rmtree (args .outdir , ignore_errors = True )
491506 os .makedirs (args .outdir , exist_ok = True )
492507 typetree = dict ()
493- if args .files :
494- generator = TypeTreeGenerator (args .unity_version )
495- generator .load_local_dll_folder (args .files )
496- defines = generator .get_monobehavior_definitions ()
497- typetree = dict ()
498- for module , fullname in defines :
499- try :
500- nodes = generator .get_nodes (module , fullname )
501- typetree [fullname ] = nodes
502- except Exception as e :
503- logger .error (f"Failed to generate typetree for { module } .{ fullname } " )
504- if args .json :
508+ gen = TypeTreeGenerator (args .unity_version , args .backend )
509+ def populate_gen ():
510+ # https://github.com/UnityPy-Org/TypeTreeGeneratorAPI/pull/1
511+ for asm ,clz in gen .get_monobehavior_definitions ():
512+ node = gen .get_nodes_as_json (asm , clz )
513+ pass
514+ if args .asm :
515+ print ("Loading .NET Assembly" , args .asm )
516+ gen .load_dll (args .asm )
517+ populate_gen ()
518+ elif args .il2cpp and args .metadata :
519+ print ("Loading IL2CPP" , args .il2cpp , args .metadata )
520+ gen .load_il2cpp (open (args .il2cpp , "rb" ).read (), open (args .metadata , "rb" ).read ())
521+ populate_gen ()
522+ elif args .json :
523+ print ("Loading JSON" , args .json )
505524 with open (args .json , "r" ) as f :
506525 typetree = json .load (f )
526+ else :
527+ raise ValueError ("No valid input source specified." )
507528 if typetree :
508529 regex = re .compile (args .filter )
509530 typetree = {k : v for k , v in typetree .items () if regex .match (k )}
0 commit comments