Пример #1
0
 private void BuildOnlyAssetBundle(ObjectBuildDescription buildObject)
 {
     _state           = ObjectBuilderState.BuildingAssetBundles;
     _stopAfterOneTry = true;
     _objectsToBuild  = new List <ObjectBuildDescription>();
     _objectsToBuild.Add(buildObject);
 }
Пример #2
0
        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++;
        }
Пример #3
0
 private void BuildOnlyZip(ObjectBuildDescription buildObject)
 {
     _state           = ObjectBuilderState.CreatingFiles;
     _stopAfterOneTry = true;
     _objectsToBuild  = new List <ObjectBuildDescription>();
     _objectsToBuild.Add(buildObject);
 }
Пример #4
0
 private void BuildOnlyWrapper(ObjectBuildDescription buildObject)
 {
     _state           = ObjectBuilderState.GeneratingWrapper;
     _stopAfterOneTry = true;
     _objectsToBuild  = new List <ObjectBuildDescription>();
     _objectsToBuild.Add(buildObject);
 }
Пример #5
0
        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();
            }
        }
Пример #6
0
        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();
            }
        }
Пример #7
0
        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;
                }
            }
        }
Пример #8
0
        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;
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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();
            }
        }