private void BuildOnlyAssetBundle(ObjectBuildDescription buildObject) { _state = ObjectBuilderState.BuildingAssetBundles; _stopAfterOneTry = true; _objectsToBuild = new List <ObjectBuildDescription>(); _objectsToBuild.Add(buildObject); }
private void GenerateWrappers() { if (_state != ObjectBuilderState.GeneratingWrapper) { _state = ObjectBuilderState.GeneratingWrapper; _currentObjectIndex = 0; } if (_currentObjectIndex >= _objectsToBuild.Count) { GoToTheNextBuildState(); _currentObjectIndex = 0; string jsonModels = JsonConvert.SerializeObject(_objectsToBuild.ToArray(), Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); File.WriteAllText(TEMP_FILE_NAME, jsonModels); AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); return; } _currentStatusString = "Generating wrappers..."; ObjectBuildDescription buildObject = _objectsToBuild[_currentObjectIndex]; WrapperGenerator.GenerateWrapper(buildObject.ContainedObjectDescriptor); _currentObjectIndex++; }
private void BuildOnlyZip(ObjectBuildDescription buildObject) { _state = ObjectBuilderState.CreatingFiles; _stopAfterOneTry = true; _objectsToBuild = new List <ObjectBuildDescription>(); _objectsToBuild.Add(buildObject); }
private void BuildOnlyWrapper(ObjectBuildDescription buildObject) { _state = ObjectBuilderState.GeneratingWrapper; _stopAfterOneTry = true; _objectsToBuild = new List <ObjectBuildDescription>(); _objectsToBuild.Add(buildObject); }
private void RunBuildObjects(CreateObjectModel[] objects) { try { _objectsToBuild = new List <ObjectBuildDescription>(); _state = ObjectBuilderState.Preparing; _currentStatusString = "Preparing objects..."; foreach (CreateObjectModel model in objects) { GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(model.PrefabPath); if (prefab != null) { VarwinObjectDescriptor objToBuild = prefab.GetComponent <VarwinObjectDescriptor>(); if (objToBuild != null) { PreBuild(prefab); ObjectBuildDescription descr = new ObjectBuildDescription() { ObjectName = objToBuild.Name, ObjectGuid = objToBuild.RootGuid, PrefabPath = model.PrefabPath, FolderPath = model.ObjectFolder, ContainedObjectDescriptor = objToBuild }; _objectsToBuild.Add(descr); } } } GenerateWrappers(); } catch (Exception e) { EditorUtility.DisplayDialog("Error!", $"{e.Message}:\nProblem when build objects", "OK"); Debug.LogException(e); Close(); } }
private void RunBuildVarwinObject(VarwinObjectDescriptor varwinObjectDescriptor) { try { _objectsToBuild = new List <ObjectBuildDescription>(); _state = ObjectBuilderState.Preparing; _currentStatusString = "Preparing objects..."; _objectsToBuild.Add(new ObjectBuildDescription(varwinObjectDescriptor)); GenerateWrappers(); } catch (Exception e) { EditorUtility.DisplayDialog("Error!", $"{e.Message}:\nProblem when run build varwin object \"{varwinObjectDescriptor.Name}\"", "OK"); Debug.LogException(e); Close(); } }
private void TryToContinueBuild() { if (_objectsToBuild == null) { if (File.Exists(TEMP_FILE_NAME)) { string config = File.ReadAllText(TEMP_FILE_NAME); ObjectBuildDescription[] temp = JsonConvert.DeserializeObject <ObjectBuildDescription[]>(config); if (temp == null) { Debug.LogError("Temp build file is broken! Can't finish objects creation."); return; } _objectsToBuild = new List <ObjectBuildDescription>(temp); _state = ObjectBuilderState.CreatingIcons; } } }
private void GoToTheNextBuildState() { switch (_state) { case ObjectBuilderState.Preparing: _state = ObjectBuilderState.GeneratingWrapper; break; case ObjectBuilderState.GeneratingWrapper: _state = ObjectBuilderState.WaitingForCompile; break; case ObjectBuilderState.WaitingForCompile: _state = ObjectBuilderState.CreatingIcons; break; case ObjectBuilderState.CreatingIcons: _state = ObjectBuilderState.CreatingBundleConfigs; break; case ObjectBuilderState.CreatingBundleConfigs: _state = ObjectBuilderState.BuildingAssetBundles; break; case ObjectBuilderState.BuildingAssetBundles: _state = ObjectBuilderState.CreatingFiles; break; case ObjectBuilderState.CreatingFiles: _state = ObjectBuilderState.OpeningFolder; break; case ObjectBuilderState.OpeningFolder: //Do some magic and close this window break; } }
private bool CreateIcons() { if (_state != ObjectBuilderState.CreatingIcons) { _state = ObjectBuilderState.CreatingIcons; _currentObjectIndex = 0; AssetPreview.SetPreviewTextureCacheSize(_objectsToBuild.Count + 1); _bad_attempts = 0; } if (_currentObjectIndex >= _objectsToBuild.Count) { GoToTheNextBuildState(); _currentObjectIndex = 0; return(true); } if (_currentObjectIndex == 0) { AssetPreview.SetPreviewTextureCacheSize(_objectsToBuild.Count + 1); _bad_attempts = 0; } ObjectBuildDescription buildObject = _objectsToBuild[_currentObjectIndex]; if (buildObject.ContainedObjectDescriptor == null) { buildObject.ContainedObjectDescriptor = AssetDatabase.LoadAssetAtPath <GameObject>(buildObject.PrefabPath).GetComponent <VarwinObjectDescriptor>(); } if (buildObject.ContainedObjectDescriptor.Icon != null) { GoToTheNextBuildState(); _currentObjectIndex = 0; return(true); } _currentStatusString = "Creating icon for " + buildObject.ObjectName; EditorGUIUtility.PingObject(buildObject.ContainedObjectDescriptor.gameObject); int instanceId = buildObject.ContainedObjectDescriptor.gameObject.GetInstanceID(); Texture2D texture2D = AssetPreview.GetAssetPreview(buildObject.ContainedObjectDescriptor.gameObject); if (texture2D == null) { Repaint(); _bad_attempts++; if (_bad_attempts >= MAX_BAD_ATTEMPTS) { if (File.Exists(buildObject.IconPath)) { Texture2D icon = AssetDatabase.LoadAssetAtPath <Texture2D>(buildObject.IconPath); if (icon != null) { buildObject.ContainedObjectDescriptor.Icon = icon; Debug.LogWarning("Existent icon was used for " + buildObject.ObjectName); _bad_attempts = 0; _currentObjectIndex++; return(true); } } Debug.LogWarning("Can't create icon for " + buildObject.ObjectName + ". Using default icon."); Texture2D defaultIcon = AssetDatabase.LoadAssetAtPath <Texture2D>(DEFAULT_ICON_PATH); var bytes = defaultIcon.EncodeToPNG(); File.WriteAllBytes(buildObject.IconPath, bytes); AssetDatabase.ImportAsset(buildObject.IconPath); Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>(buildObject.IconPath); buildObject.ContainedObjectDescriptor.Icon = tex; _bad_attempts = 0; _currentObjectIndex++; return(true); } return(false); } var iconBytes = texture2D.EncodeToPNG(); File.WriteAllBytes(buildObject.IconPath, iconBytes); AssetDatabase.ImportAsset(buildObject.IconPath); Texture2D te = AssetDatabase.LoadAssetAtPath <Texture2D>(buildObject.IconPath); buildObject.ContainedObjectDescriptor.Icon = te; Debug.Log("Icon was created for " + buildObject.ObjectName + "!"); _currentObjectIndex++; return(true); }
private void RunBuildAllObjects() { try { _objectsToBuild = new List <ObjectBuildDescription>(); _state = ObjectBuilderState.Preparing; _currentStatusString = "Preparing objects..."; var objectsPath = "Assets/Objects"; if (!Directory.Exists(objectsPath)) { Directory.CreateDirectory(objectsPath); try { Directory.CreateDirectory(objectsPath); } catch { Debug.LogError("Can't create directory \"" + objectsPath + "\""); EditorUtility.DisplayDialog("Can't create directory", "Can't create directory \"" + objectsPath + "\"", "OK"); return; } } foreach (string objectDir in Directory.EnumerateDirectories("Assets/Objects")) { foreach (string objectPath in Directory.EnumerateFiles(objectDir, "*.prefab")) { GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(objectPath); if (prefab != null) { VarwinObjectDescriptor objToBuild = prefab.GetComponent <VarwinObjectDescriptor>(); if (objToBuild != null) { PreBuild(prefab); //Finally, it's our prefab to build //Debug.Log("Building object " + objToBuild.Name); ObjectBuildDescription descr = new ObjectBuildDescription() { ObjectName = objToBuild.Name, ObjectGuid = objToBuild.RootGuid, PrefabPath = objectPath, FolderPath = objectDir, ContainedObjectDescriptor = objToBuild }; _objectsToBuild.Add(descr); } } } } GenerateWrappers(); } catch (Exception e) { EditorUtility.DisplayDialog("Error!", $"{e.Message}:\nProblem when run build all objects", "OK"); Debug.LogException(e); Close(); } }