31bool IsImage(
string className)
34 className ==
"PNGResourceClass" ||
35 className ==
"DDSResourceClass" ||
36 className ==
"TGAResourceClass" ||
37 className ==
"TIFFResourceClass" ||
38 className ==
"PNGResourceClass" ||
39 className ==
"HDRResourceClass" ||
40 className ==
"JPGResourceClass";
43class ContainerJSONSerializer
46 static string ResolveEnumValue(
typename type,
int enumValue)
52 return typename.EnumToString(
BlendMode, enumValue);
56 return typename.EnumToString(Cull, enumValue);
60 return typename.EnumToString(GlobalMCRMode, enumValue);
63 return typename.EnumToString(CamoBlendMode, enumValue);
69 static string ignoredFields[8] = {
"userScript",
"constructor",
"destructor",
"editorData",
"RplLoad",
"RplSave",
"Preload",
"OnTransformResetImpl"};
72 static void WriteVars(JsonApiStruct jsonStruct, BaseContainer container,
bool expand =
false)
75 int childrenCount = container.GetNumChildren();
76 if (childrenCount > 0)
77 jsonStruct.StoreInteger(
"ChildrenCount", childrenCount);
79 for (
int i = 0; i < container.GetNumVars(); i++)
81 string varName = container.GetVarName(i);
86 if (varName ==
"" || varName.StartsWith(
"_WB") || varName.StartsWith(
"EOn"))
continue;
89 foreach (
auto field : ignoredFields)
108 container.Get(varName, value);
109 jsonStruct.StartArray(varName);
110 jsonStruct.ItemFloat(value.R());
111 jsonStruct.ItemFloat(value.G());
112 jsonStruct.ItemFloat(value.B());
113 jsonStruct.ItemFloat(value.A());
114 jsonStruct.EndArray();
120 container.Get(varName, value);
121 jsonStruct.StartArray(varName);
122 foreach (
string item : value)
124 jsonStruct.ItemString(item);
126 jsonStruct.EndArray();
133 container.Get(varName, value);
139 ResourceInfo resourceInfo = ResourceInfo.CreateFromResourceName(value, expand);
140 jsonStruct.StoreObject(varName, resourceInfo);
145 jsonStruct.StoreString(varName, value);
150 array<ResourceName> value;
152 container.Get(varName, value);
153 jsonStruct.StartArray(varName);
154 foreach (ResourceName rName : value)
156 jsonStruct.ItemString(rName);
158 jsonStruct.EndArray();
164 container.Get(varName, value);
166 jsonStruct.StoreString(varName, value);
172 container.Get(varName, values);
176 if (values !=
"" && values !=
" 0")
178 array<string> spltValue =
new array<string>();
179 values.Split(
" ", spltValue,
true);
181 value = spltValue[0];
184 ResourceInfo resourceInfo = ResourceInfo.CreateFromResourceName(value, expand);
185 jsonStruct.StoreObject(varName, resourceInfo);
189 jsonStruct.StoreString(varName, value);
195 container.Get(varName, value);
196 jsonStruct.StoreFloat(varName, value);
202 container.Get(varName, value);
203 jsonStruct.StartArray(varName);
204 foreach (
float item : value)
206 jsonStruct.ItemFloat(item);
208 jsonStruct.EndArray();
214 container.Get(varName, value);
215 jsonStruct.StoreBoolean(varName, value);
221 container.Get(varName, value);
223 typename type = varName.ToType();
227 jsonStruct.StoreInteger(varName, value);
231 string enumFieldName = ResolveEnumValue(
type, value);
232 jsonStruct.StoreString(varName, enumFieldName);
238 container.Get(varName, value);
240 jsonStruct.StartArray(varName);
241 jsonStruct.ItemFloat(value[0]);
242 jsonStruct.ItemFloat(value[1]);
243 jsonStruct.ItemFloat(value[2]);
244 jsonStruct.EndArray();
249 BaseContainer
object = container.GetObject(varName);
252 jsonStruct.StoreObject(varName,
new GenericJSONContainer(
object,
false, expand));
256 jsonStruct.StartObject(varName);
257 jsonStruct.EndObject();
262 BaseContainerList objects = container.GetObjectArray(varName);
264 jsonStruct.StartArray(varName);
265 for (
int objIdx = 0; objIdx < objects.Count(); objIdx++)
267 jsonStruct.ItemObject(
new GenericJSONContainer(objects.Get(objIdx),
true, expand));
269 jsonStruct.EndArray();
313 BaseContainer m_Container;
314 bool m_bAsArrayItem =
false;
315 bool m_bExpandResource =
false;
318 void GenericJSONContainer(BaseContainer container,
bool asArrayItem =
false,
bool expand =
false)
320 m_Container = container;
321 m_bAsArrayItem = asArrayItem;
322 m_bExpandResource = expand;
328 string objectName =
string.Format(
"%1", m_Container.GetClassName());
331 StoreString(
"ClassName", objectName);
332 StoreString(
"Name", m_Container.GetName());
333 ContainerJSONSerializer.WriteVars(
this, m_Container, m_bExpandResource);
337 StartObject(objectName);
338 ContainerJSONSerializer.WriteVars(
this, m_Container, m_bExpandResource);
346 private string TextureSourcePath;
347 private string PostFix;
348 private string ColorSpace;
349 private string Conversion;
350 private bool ContainsMips;
353 void TextureResourceInfo(
string textureSourcePath,
string postFix,
string colorSpace,
string conversion,
bool containMips)
355 TextureSourcePath = textureSourcePath;
357 ColorSpace = colorSpace;
358 Conversion = conversion;
359 ContainsMips = containMips;
363 protected static ref TextureTypes Types =
new TextureTypes();
366 static string GetPostFix(
string resourcePath)
368 return Types.FindTextureType(resourcePath).m_PostFix;
374 private ResourceName m_ResourceName;
375 private bool m_bExpandResource =
false;
376 private array<string> m_Fields;
379 void MaterialResourceInfo(ResourceName
resourceName,
bool expand =
false)
382 m_bExpandResource = expand;
388 Resource resource = Resource.Load(m_ResourceName);
390 BaseContainer basecontainer = resource.GetResource().ToBaseContainer();
391 StoreString(
"ShaderClass", basecontainer.GetClassName());
393 ContainerJSONSerializer.WriteVars(
this, basecontainer, m_bExpandResource);
399 private string m_FBXSourcePath;
400 private BaseContainer m_ConfigurationContainer;
401 private bool m_bExpandResource =
false;
404 void XOBResourceInfo(notnull BaseContainer configurationContainer,
string fbxSourcePath,
bool expand =
false)
406 m_FBXSourcePath = fbxSourcePath;
407 m_ConfigurationContainer = configurationContainer;
408 m_bExpandResource = expand;
414 StoreString(
"FBXSourcePath", m_FBXSourcePath);
415 ContainerJSONSerializer.WriteVars(
this, m_ConfigurationContainer, m_bExpandResource);
422 private ResourceName m_ResourceName;
423 private bool m_bExpandResource =
false;
426 void GenericResourceInfo(ResourceName
resourceName,
bool expand =
false)
429 m_bExpandResource = expand;
435 Resource resource = Resource.Load(m_ResourceName);
437 BaseContainer basecontainer = resource.GetResource().ToBaseContainer();
438 StoreString(
"ClassName", basecontainer.GetClassName());
440 ContainerJSONSerializer.WriteVars(
this, basecontainer, m_bExpandResource);
450 private string absolutePath;
451 private ref JsonApiStruct
data;
454 void ResourceInfo(InfoStatus _status, ResourceName _resourceName,
string _absolute_path,
string _message, JsonApiStruct _data)
456 status =
typename.EnumToString(InfoStatus, _status);
460 absolutePath = _absolute_path;
468 private static string CreateSourceFileNotFoundmessage(ResourceName _resourceName)
470 return string.Format(
"Source file not found for resource: %1", _resourceName);
477 static ResourceInfo CreateFromResourceName(ResourceName _resourceName,
bool expand =
false)
479 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
480 string resourcePath = _resourceName.GetPath();
481 MetaFile meta = resourceManager.GetMetaFile(resourcePath);
489 string.Format(
"Resource not found: %1", _resourceName),
493 BaseContainer configurationContainer = meta.GetObjectArray(
"Configurations")[0];
495 if (!configurationContainer)
501 string.Format(
"Invalid configuration container for resource: %1", _resourceName),
505 string className = configurationContainer.GetClassName();
507 if (className ==
"FBXResourceClass")
509 string fbxSourcePath;
510 if (!Workbench.GetAbsolutePath(meta.GetSourceFilePath(), fbxSourcePath,
true))
516 CreateSourceFileNotFoundmessage(_resourceName),
520 return ResourceInfo(InfoStatus.OK, _resourceName, fbxSourcePath,
string.Empty,
new XOBResourceInfo(configurationContainer, fbxSourcePath, expand));
523 if (className ==
"EMATResourceClass")
525 Resource resource = Resource.Load(_resourceName);
527 if (!resource.IsValid())
533 string.Format(
"Resource could not be loaded: %1", _resourceName),
537 string file_path = resource.GetResource().GetResourceName().GetPath();
538 string absolute_path;
540 bool result = Workbench.GetAbsolutePath(file_path, absolute_path,
true);
543 absolute_path =
string.Empty;
547 return ResourceInfo(InfoStatus.OK, _resourceName, absolute_path,
string.Empty,
new MaterialResourceInfo(_resourceName, expand));
551 if(className ==
"EntityTemplateResourceClass" || className ==
"GameMaterialResourceClass")
553 Resource resource = Resource.Load(_resourceName);
555 if (!resource.IsValid())
561 string.Format(
"Resource could not be loaded: %1", _resourceName),
565 if (className ==
"GameMaterialResourceClass")
568 string file_path = resource.GetResource().GetResourceName().GetPath();
569 string absolute_path;
571 bool result = Workbench.GetAbsolutePath(file_path, absolute_path,
true);
574 absolute_path =
string.Empty;
577 return ResourceInfo(InfoStatus.OK, _resourceName, absolute_path,
"",
new GenericResourceInfo(_resourceName, expand));
581 if (IsImage(className))
583 string textureSourcePath;
584 if (!Workbench.GetAbsolutePath(meta.GetSourceFilePath(), textureSourcePath,
true))
590 CreateSourceFileNotFoundmessage(_resourceName),
594 string postFix = TextureResourceInfo.GetPostFix(resourcePath);
595 int colorSpaceEnumValue;
596 int conversionEnumValue;
599 configurationContainer.Get(
"ColorSpace", colorSpaceEnumValue);
600 configurationContainer.Get(
"Conversion", conversionEnumValue);
601 configurationContainer.Get(
"ContainsMips", containsMips);
604 string colorSpace =
typename.EnumToString(MetaEddsColorSpaceConversion, colorSpaceEnumValue);
607 TextureResourceInfo textureProperty =
new TextureResourceInfo(textureSourcePath, postFix, colorSpace, conversion, containsMips);
609 return ResourceInfo(InfoStatus.OK, _resourceName, textureSourcePath,
string.Empty, textureProperty);
616 string.Format(
"Unsuported resource type: %1 for resource: %2", className, _resourceName),
621 static ResourceInfo CreateFromResourceAbsolutePath(
string absPath,
bool expand =
false)
623 if (!FileIO.FileExists(absPath))
629 string.Format(
"Resource with absolute path: %1 not found. ", absPath),
633 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
634 MetaFile meta = resourceManager.GetMetaFile(absPath);
642 string.Format(
"Resource with absolute path: %1 is not registered with current runing project. ", absPath),
646 return CreateFromResourceName(meta.GetResourceID(), expand);
656 void GetResourceInfoRequest()
662class GetResourceInfo : NetApiHandler
667 return new GetResourceInfoRequest();
671 override JsonApiStruct
GetResponse(JsonApiStruct request)
673 GetResourceInfoRequest req = GetResourceInfoRequest.Cast(request);
675 if (FilePath.IsAbsolutePath(req.path))
677 return ResourceInfo.CreateFromResourceAbsolutePath(req.path, req.expandResource);
680 return ResourceInfo.CreateFromResourceName(req.path, req.expandResource);
692 ref array<int> childIdx =
new array<int>;
696 void GetPrefabChildRequest()
702class GetPrefabChildInfo: NetApiHandler
707 return new GetPrefabChildRequest();
711 override JsonApiStruct
GetResponse(JsonApiStruct request)
713 GetPrefabChildRequest req = GetPrefabChildRequest.Cast(request);
715 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
716 MetaFile meta = resourceManager.GetMetaFile(req.resourceName.GetPath());
724 string.Format(
"Resource not found: %1", req.resourceName),
728 Resource resource = Resource.Load(req.resourceName);
729 BaseContainer baseContainer = resource.GetResource().ToBaseContainer();
731 BaseContainer childContainer = baseContainer;
733 for (
int i = 0; i < req.childIdx.Count(); i++)
735 childContainer = childContainer.GetChild(req.childIdx[i]);
745 string.Format(
"Prefab doesn't have child with index: %1", req.childIdx),
749 GenericJSONContainer
data =
new GenericJSONContainer(childContainer,
false, req.expandResource);
751 return ResourceInfo(InfoStatus.OK,
"",
string.Empty,
string.Empty,
data);
761 ref array<ResourceName>
data =
new array<ResourceName>;
764 void GetGameMaterialsResponse()
770class GetGameMaterials: NetApiHandler
779 override JsonApiStruct
GetResponse(JsonApiStruct request)
781 map<string, string> result =
new map<string, string>();
783 GetGameMaterialsResponse response =
new GetGameMaterialsResponse;
785 SearchResourcesFilter filter =
new SearchResourcesFilter();
786 filter.fileExtensions = {
"gamemat"};
788 ResourceDatabase.SearchResources(filter, response.data.Insert);
807 void MatUVTransformTemplate()
831 ref array<ref MatParam>
data = {};
834 void DynMaterialTemplate()
840class ExportMaterialResource : NetApiHandler
845 return new DynMaterialTemplate();
849 static private void CopyParamsToEmatContainer(array<ref MatParam>
data, notnull BaseContainer container)
851 foreach(MatParam param :
data)
853 int index = container.GetVarIndex(param.name);
857 Print(
string.Format(
"%1 field was not found in EMAT!!!", param.name));
861 if (param.value ==
"None" | param.value ==
string.Empty)
863 container.ClearVariable(param.name);
867 if(param.name.Contains(
"UVTransform"))
869 MatUVTransformTemplate transform =
new MatUVTransformTemplate;
870 transform.ExpandFromRAW(param.value);
872 Resource matUVTransformResource;
873 BaseContainer matUVTransformContainer = container.GetObject(param.name);
875 if (!matUVTransformContainer)
877 matUVTransformResource = BaseContainerTools.CreateContainer(
"MatUVTransform");
878 matUVTransformContainer = matUVTransformResource.GetResource().ToBaseContainer();
881 BaseContainerTools.ReadFromInstance(transform, matUVTransformContainer);
883 int numOfDefaultValues = 0;
885 for (
int i = 0; i < matUVTransformContainer.GetNumVars(); i++)
887 string varName = matUVTransformContainer.GetVarName(i);
890 matUVTransformContainer.GetDefaultAsString(varName, defaultValue);
891 matUVTransformContainer.Get(varName, currentValue);
893 if (defaultValue == currentValue)
895 matUVTransformContainer.ClearVariable(varName);
896 numOfDefaultValues += 1;
900 if (numOfDefaultValues == matUVTransformContainer.GetNumVars())
902 container.ClearVariable(param.name);
906 container.SetObject(param.name, matUVTransformContainer);
910 container.Set(param.name, param.value);
916 container.GetDefaultAsString(param.name, defaultValue);
917 container.Get(param.name, currentValue);
919 if (defaultValue == currentValue)
921 container.ClearVariable(param.name);
927 override JsonApiStruct
GetResponse(JsonApiStruct request)
929 DynMaterialTemplate req = DynMaterialTemplate.Cast(request);
930 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
934 BaseContainer container;
938 resource = BaseContainerTools.CreateContainer(req.type);
945 string.Format(
"Error creating BaseContainer with type: %1", req.type),
949 container = resource.GetResource().ToBaseContainer();
950 resourcePath = req.resourcePath;
954 resourcePath = req.resourceName.GetPath();
955 MetaFile meta = resourceManager.GetMetaFile(resourcePath);
963 string.Format(
"Resource not found: %1", req.resourceName),
967 resource = Resource.Load(req.resourceName);
968 container = resource.GetResource().ToBaseContainer();
971 CopyParamsToEmatContainer(req.data, container);
973 BaseContainerTools.SaveContainer(container,
"", resourcePath);
976 resourceManager.RegisterResourceFile(resourcePath,
false);
978 return ResourceInfo.CreateFromResourceAbsolutePath(resourcePath);
988 string sourceMaterial;
989 string assignedMaterial;
992 void MaterialOverride()
1000 string resourcePath;
1002 bool exportSceneHierarchy;
1003 bool exportSkinning;
1004 ref array<ref MaterialOverride> materialOverrides =
new array<ref MaterialOverride>;
1007 void FBXImportRequest()
1013class ExportFBXResource : NetApiHandler
1018 return new FBXImportRequest();
1022 void SetWithClear(BaseContainer container,
string varName,
bool value)
1024 string defaultValue, currentValue;
1026 container.Set(varName, value);
1027 container.Get(varName, currentValue);
1028 container.GetDefaultAsString(varName, defaultValue);
1030 if (defaultValue == currentValue)
1031 container.ClearVariable(varName);
1035 override JsonApiStruct
GetResponse(JsonApiStruct request)
1037 FBXImportRequest req = FBXImportRequest.Cast(request);
1038 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
1039 MetaFile meta = resourceManager.GetMetaFile(req.resourcePath);
1043 if (resourceManager.RegisterResourceFile(req.resourcePath,
false))
1044 meta = resourceManager.GetMetaFile(req.resourcePath);
1048 return ResourceInfo(
1052 string.Format(
"Resource could not be registered: %1", req.resourcePath),
1057 BaseContainer cfg = meta.GetObjectArray(
"Configurations").Get(0);
1059 SetWithClear(cfg,
"ExportMorphs", req.exportMorphs);
1060 SetWithClear(cfg,
"ExportSceneHierarchy", req.exportSceneHierarchy);
1061 SetWithClear(cfg,
"ExportSkinning", req.exportSkinning);
1063 cfg.ClearVariable(
"GeometryParams");
1066 if (req.materialOverrides.Count() > 0)
1068 BaseContainerList materialAssigns = cfg.SetObjectArray(
"MaterialAssigns");
1071 foreach(MaterialOverride oRide : req.materialOverrides)
1073 bool materialSourceFound;
1074 for (
int i = 0; i < materialAssigns.Count(); i++)
1076 string sourceMaterial;
1077 materialAssigns[i].Get(
"SourceMaterial", sourceMaterial);
1079 if (sourceMaterial == oRide.sourceMaterial)
1081 materialAssigns[i].Set(
"AssignedMaterial", oRide.assignedMaterial);
1082 materialSourceFound =
true;
1087 if (materialSourceFound)
1091 Resource materialAssign = BaseContainerTools.CreateContainer(
"MaterialAssignClass");
1093 BaseContainer cont = materialAssign.GetResource().ToBaseContainer();
1094 cont.Set(
"SourceMaterial", oRide.sourceMaterial);
1095 cont.Set(
"AssignedMaterial", oRide.assignedMaterial);
1097 materialAssigns.Insert(cont);
1105 resourceManager.RebuildResourceFile(req.resourcePath,
"PC",
false);
1106 return ResourceInfo.CreateFromResourceAbsolutePath(req.resourcePath);
1116 string destinationPath;
1119 void ExportTextureResourceRequest()
1125class ExportTextureResource : NetApiHandler
1129 return new ExportTextureResourceRequest();
1132 override JsonApiStruct
GetResponse(JsonApiStruct request)
1134 ExportTextureResourceRequest req = ExportTextureResourceRequest.Cast(request);
1135 ResourceManager resourceManager = Workbench.GetModule(ResourceManager);
1137 string resourcePath =
"";
1139 if (req.sourcePath ==
"")
1141 return ResourceInfo(
1145 string.Format(
"Resource could not be registered (Missing source path!): %1", resourcePath),
1149 else if (req.destinationPath ==
"")
1151 return ResourceInfo(
1155 string.Format(
"Resource could not be registered (Missing destination path!): %1", resourcePath),
1159 else if (req.sourcePath == req.destinationPath)
1161 resourcePath = req.sourcePath;
1165 FileIO.CopyFile(req.sourcePath, req.destinationPath);
1166 resourcePath = req.destinationPath;
1172 MetaFile meta = resourceManager.GetMetaFile(resourcePath);
1176 if (resourceManager.RegisterResourceFile(resourcePath,
false))
1177 meta = resourceManager.GetMetaFile(resourcePath);
1181 return ResourceInfo(
1185 string.Format(
"Resource could not be registered: %1", resourcePath),
1190 TextureTypes textureTypes =
new TextureTypes();
1191 textureTypes.DoChecks(
TextureIssueOp.Fix, meta.GetResourceID(), meta);
1194 resourceManager.RebuildResourceFile(resourcePath,
"PC",
false);
1195 return ResourceInfo.CreateFromResourceAbsolutePath(resourcePath);
1205 ref array<string>
path =
new array<string>;
1207 void RegisterResourceRequest()
1217 void RegisterResourceResponse()
1223class RegisterResource : NetApiHandler
1228 return new RegisterResourceRequest();
1233 ResourceManager rm = Workbench.GetModule(ResourceManager);
1234 MetaFile meta = rm.GetMetaFile(absPath);
1240 if (rm.RegisterResourceFile(absPath,
false))
1241 meta = rm.GetMetaFile(absPath);
1248 rm.RebuildResourceFile(absPath,
"PC",
true);
1252 BaseContainerList configurations = meta.GetObjectArray(
"Configurations");
1253 BaseContainer cfg = configurations.Get(0);
1256 if (IsImage(configurations[0].GetClassName()))
1258 TextureTypes textureTypes =
new TextureTypes();
1259 textureTypes.DoChecks(
TextureIssueOp.Fix, meta.GetResourceID(), meta);
1268 override JsonApiStruct
GetResponse(JsonApiStruct request)
1270 RegisterResourceRequest req = RegisterResourceRequest.Cast(request);
1271 RegisterResourceResponse response =
new RegisterResourceResponse();
1274 for (
int i = 0; i < req.path.Count(); i++)
1276 response.Output =
Register(req.path[i]);
override JsonApiStruct GetResponse(JsonApiStruct request)
ExportTerrainRequest Output
PrefabImporterRequest status
SCR_AICombatMoveRequestBase GetRequest()
ResourceName resourceName
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Get all prefabs that have the spawner data
SCR_RespawnComponentClass OK
Result code for request/assign response.
base classes for filtering in server browser
MineManagerComponentClass GenericComponentClass Register(notnull IEntity mine, IEntity mineSpawner)
Registers the given mine entity. The mine spawner will add it's awareness to it's faction of this min...
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
@ ERROR
Same as DELETE, but global error count for OnAfterLoad is affected.