5 for (
int i = 0; i < containerList.Count(); i++)
7 if (containerList[i].GetClassName() == containerName)
8 return containerList.Get(i);
13static const ref array<string> st = {
"SCR_DestructibleBuildingEntity",
"GenericEntity",
"Building",
"GameEntity",
"StaticModelEntity"};
15FBXItem PopulateFBXItem(
BaseContainer prefab, FBXItem slotOwner)
17 if (!st.Contains(prefab.GetClassName()))
20 BaseContainerList components = prefab.GetObjectArray(EBTContainerFields.components);
21 BaseContainer meshObject = GetContainerFromList(EBTContainerFields.meshObject, components);
25 FBXItem result =
new FBXItem();
28 meshObject.Get(EBTContainerFields.object,
object);
31 Workbench.GetAbsolutePath(
object.GetPath(), absPath,
true);
32 absPath.Replace(
".xob",
".fbx");
33 result.absPath = absPath;
39 for (
int i = 0; i < materials.Count(); i++)
44 materialData.Get(
"SourceMaterial", sourceMaterial);
45 materialData.Get(
"AssignedMaterial", assignedMaterial);
46 result.sourceToAssignedMaterial.Insert(sourceMaterial, assignedMaterial);
50 BaseContainer hierarchyComponent = GetContainerFromList(EBTContainerFields.hierarchy, components);
51 if (hierarchyComponent)
55 hierarchyComponent.Get(EBTContainerFields.pivot, pivotID);
57 if (pivotID.Contains(
"glass"))
60 string checkForEntry = pivotID;
61 checkForEntry.ToLower();
63 if (pivotID && !checkForEntry.Contains(
"entry"))
65 if (slotOwner.slotToFbxChild.Contains(pivotID))
66 slotOwner.slotToFbxChild.Get(pivotID).Insert(result);
69 array<ref FBXItem> value = {result};
70 slotOwner.slotToFbxChild.Insert(pivotID, value);
75 for (
int i = 0; i < prefab.GetNumChildren(); i++)
77 PopulateFBXItem(prefab.GetChild(i), result);
89 ref map<string, string> sourceToAssignedMaterial =
new map<string, string>();
90 ref map<string, ref array<ref FBXItem>> slotToFbxChild =
new map<string, ref array<ref FBXItem>>();
97 void PrefabImportRequest()
105 string msg =
"ERROR";
107 void PrefabImportErrorResponse()
115 ref FBXItem exportItem;
117 void PrefabImportResponse(FBXItem item)
122 void SerializeFBXItem(FBXItem item)
125 StoreString(
"path", item.absPath);
127 if (item.sourceToAssignedMaterial.Count() != 0)
129 StartObject(
"material_overrides");
130 foreach (
string sourceMaterial,
string assignedMaterial : item.sourceToAssignedMaterial)
132 StoreString(sourceMaterial, assignedMaterial);
137 if (item.slotToFbxChild.Count() != 0)
139 StartObject(
"sockets");
140 foreach (
string slot, ref array<ref FBXItem> items : item.slotToFbxChild)
143 foreach (ref FBXItem i : items)
157 SerializeFBXItem(exportItem);
161class PrefabImporterBake : NetApiHandler
165 return new PrefabImportRequest();
168 override JsonApiStruct
GetResponse(JsonApiStruct request)
170 PrefabImportRequest testRequest = PrefabImportRequest.Cast(request);
171 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
172 MetaFile meta = resourceManager.GetMetaFile(testRequest.etAbsPath);
174 Resource resource = Resource.Load(meta.GetResourceID());
175 BaseContainer prefab = resource.GetResource().ToBaseContainer();
176 FBXItem
fbx = PopulateFBXItem(prefab, null);
180 PrefabImportErrorResponse response =
new PrefabImportErrorResponse();
184 PrefabImportResponse response =
new PrefabImportResponse(
fbx);
188 static bool GetBaseFBX(ResourceName
resourceName, out
string absPath)
191 BaseContainer prefab = resource.GetResource().ToBaseContainer();
193 BaseContainerList components = prefab.GetObjectArray(EBTContainerFields.components);
194 BaseContainer meshObject = GetContainerFromList(EBTContainerFields.meshObject, components);
200 meshObject.Get(EBTContainerFields.object,
object);
203 Workbench.GetAbsolutePath(
object.GetPath(),
path,
true);
204 path.Replace(
".xob",
".fbx");
override JsonApiStruct GetResponse(JsonApiStruct request)
SCR_AICombatMoveRequestBase GetRequest()
ResourceName resourceName
base classes for filtering in server browser