-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBlueprintGenerator.py
91 lines (65 loc) · 2.44 KB
/
BlueprintGenerator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
'''
import unreal_engine as ue
ue.py_exec("BlueprintGenerator.py")
'''
import importlib
import LoggingUtil
importlib.reload(LoggingUtil)
import Tools.Blueprint as BPGenerator
importlib.reload(BPGenerator)
import Tools.FModel as FTools
importlib.reload(FTools)
import Tools.UE as UETools
importlib.reload(UETools)
import unreal_engine as ue
LoggingUtil.reset()
# JSON_PATH = r"F:\FModel\Output\Exports\Phoenix\Content\Gameplay\ToolSet\Items\Wand\BP_WandTool.json"
# JSON_PATH = r"F:\FModel\Output\Exports\Phoenix\Content\CustomContent\TestActor.json"
JSON_PATH = r"F:\HL\Phoenix-Jsons\Content\Gameplay\ToolSet\Spells\AvadaKedavra\BP_AvadaKedavraSpell.json"
fmodel = FTools.FModelJson(JSON_PATH)
root = fmodel.get_first_of_key("Type", "BlueprintGeneratedClass")
bp_path = root["ClassDefaultObject"]["ObjectPath"].split(".")[0]
bp = BPGenerator.BPGenerator(bp_path, fmodel)
bp.clear()
bp.set_parent(UETools.find_object(root["SuperStruct"]))
bp.add_vars(root["ChildProperties"])
def is_function(node):
return not (
node.get("Type") != "Function" or
node.get("Outer") != root.get("Name") or
node.get("Name").startswith("ExecuteUbergraph") or
node.get("Name") in tuple("UserConstructionScript")
)
for node in fmodel[is_function]:
funcFlags = UETools.FunctionFlags(node["FunctionFlags"])
# Event binding to a delegate
if node.get("Name").startswith("BndEvt__"):
pass
elif node.get("Name").endswith("__DelegateSignature"):
bp.add_event_delegate(node)
elif UETools.FunctionFlags.FUNC_Event in funcFlags:
bp.add_event(node)
else:
bp.add_function(node)
bp.add_components()
bp.compile()
LoggingUtil.reset()
# bp.debug()
bp.load_defaults()
default_node = fmodel.get_first_of_key("Type", root["Name"])
default_name = default_node["Name"]
defaults = default_node.get("Properties", {})
allNotSet = []
LoggingUtil.header("Setting Defaults")
for key in defaults:
didSet = bp.set_default_value(key, defaults[key])
if not didSet: allNotSet.append(key)
LoggingUtil.undent()
for node_name in bp.get_components_node_names():
node = fmodel.get_first_of_key("Name", node_name)
if "Properties" in node:
LoggingUtil.header(f"Setting {node_name}")
bp.set_component_properties(node_name, node["Properties"])
LoggingUtil.undent()
bp.save_defaults()
# print(ue.find_object("/Game/Gameplay/ToolSet/Spells/AvadaKedavra/BP_AvadaKedavraSpell.BP_AvadaKedavraSpell_C"))