コード例 #1
0
        public void DeleteExternal(ExternalInfo info)
        {
            if (m_externals == null)
            {
                return;
            }
            if (!m_externals.Contains(info))
            {
                return;
            }
            if (info.isWorkshop)
            {
                return;
            }
            if (!File.Exists(info.m_filePath))
            {
                return;
            }

            File.Delete(info.m_filePath);
            if (File.Exists(info.m_filePath.Replace(".pobj", " - required assets.html")))
            {
                File.Delete(info.m_filePath.Replace(".pobj", " - required assets.html"));
            }
            if (m_externals.Contains(info))
            {
                m_externals.Remove(info);
            }
        }
コード例 #2
0
        private void LoadOneExternal(string path, bool fromWorkshop, FontManager fManager)
        {
            try
            {
                var    first10lines    = GUIUtils.GetFirstLinesOfFile(path, 12);
                bool   isStatic        = first10lines.Any(line => line.Contains("externaltype = static"));
                bool   isPlopSelection = first10lines.Any(line => line.Contains("externaltype = selection"));
                bool   isSubstitute    = first10lines.Any(line => line.ToLower().Contains("substituteforconversionof"));
                string name            = first10lines.First(line => line.StartsWith("name = ")).Replace("name = ", "").Trim();

                if (isStatic && isSubstitute)
                {
                    Debug.LogError("[ProceduralObjects] A PO  export named \"" + name + "\" was not loaded. Exported POs cannot be both static and substitutes for conversion !");
                    return;
                }

                ExternalInfo info = new ExternalInfo(name, path,
                                                     (isStatic || isPlopSelection) ? ClipboardProceduralObjects.ClipboardType.Selection : ClipboardProceduralObjects.ClipboardType.Single, isStatic, fromWorkshop);

                if (isSubstitute)
                {
                    m_defaultPOsUponConversion.Add(first10lines.First(line => line.ToLower().Contains("substituteforconversionof")).GetStringAfter(" = "), info);
                }
                else
                {
                    m_externals.Add(info);
                }
            }
            catch
            {
                Debug.LogError("[ProceduralObjects] Couldn't load an External Procedural Object : Invalid or corrupted file at path : " + path);
            }
        }
コード例 #3
0
        public void RenameExternal(ExternalInfo info, string newName)
        {
            if (info.isWorkshop)
            {
                Debug.LogWarning("[ProceduralObjects] Failed to rename an ExternalInfo instance because it came from the workshop");
                return;
            }
            if (!File.Exists(info.m_filePath))
            {
                Debug.LogError("[ProceduralObjects] Failed to rename an ExternalInfo instance because it was moved from its original directory");
                return;
            }
            var lines = File.ReadAllLines(info.m_filePath);

            for (int i = 0; i < lines.Count(); i++)
            {
                if (lines[i].Contains("name = "))
                {
                    lines[i] = "name = " + newName;
                }
            }
            File.Delete(info.m_filePath);
            File.WriteAllLines(info.m_filePath, lines);
            info.m_name = newName;
        }
コード例 #4
0
 public void DeleteExternal(ExternalInfo info, List <Texture2D> textures, FontManager fManager)
 {
     if (m_externals == null)
     {
         LoadExternals(textures, fManager);
         return;
     }
     if (!m_externals.Contains(info))
     {
         LoadExternals(textures, fManager);
         return;
     }
     if (info.isWorkshop)
     {
         LoadExternals(textures, fManager);
         return;
     }
     if (!File.Exists(info.m_filePath))
     {
         LoadExternals(textures, fManager);
         return;
     }
     File.Delete(info.m_filePath);
     if (m_externals.Contains(info))
     {
         m_externals.Remove(info);
     }
 }
コード例 #5
0
        private void LoadSelectionExternal(string[] fileLines, string path, List <Texture2D> availableTextures, bool fromWorkshop, FontManager fManager)
        {
            Dictionary <CacheProceduralObject, Vector3> objects = new Dictionary <CacheProceduralObject, Vector3>();

            CacheProceduralObject obj = null;
            Vector3 relativePos       = Vector3.zero;

            string name = "";

            for (int i = 0; i < fileLines.Count(); i++)
            {
                if (fileLines[i].Contains("name = "))
                {
                    name = fileLines[i].Replace("name = ", "").Trim();
                }
                else if (fileLines[i].Contains("{"))
                {
                    obj = new CacheProceduralObject();
                    obj.tilingFactor = 8;
                    relativePos      = Vector3.zero;
                }
                else if (fileLines[i].Contains("}"))
                {
                    objects[obj] = relativePos;
                    obj          = null;
                    relativePos  = Vector3.zero;
                }
                else if (fileLines[i].Contains("baseInfoType = "))
                {
                    obj.baseInfoType = fileLines[i].Replace("baseInfoType = ", "");
                }
                else if (fileLines[i].Contains("basePrefabName = "))
                {
                    obj.basePrefabName = fileLines[i].Replace("basePrefabName = ", "");
                }
                else if (fileLines[i].Contains("relativePosition = "))
                {
                    relativePos = fileLines[i].Replace("relativePosition = ", "").ParseVector3();
                }
                else if (fileLines[i].Contains("renderDistance = "))
                {
                    obj.renderDistance = float.Parse(fileLines[i].Replace("renderDistance = ", ""));
                }
                //   else if (lines[i].Contains("scale = "))
                //       obj.scale = float.Parse(lines[i].Replace("scale = ", ""));
                else if (fileLines[i].Contains("isPloppableAsphalt = "))
                {
                    obj.isPloppableAsphalt = bool.Parse(fileLines[i].Replace("isPloppableAsphalt = ", ""));
                }
                else if (fileLines[i].Contains("rotation = "))
                {
                    obj.m_rotation = VertexUtils.ParseQuaternion(fileLines[i].Replace("rotation = ", ""));
                }
                else if (fileLines[i].Contains("disableRecalculation = "))
                {
                    obj.disableRecalculation = bool.Parse(fileLines[i].Replace("disableRecalculation = ", ""));
                }
                else if (fileLines[i].Contains("tilingFactor = "))
                {
                    obj.tilingFactor = int.Parse(fileLines[i].Replace("tilingFactor = ", ""));
                }
                else if (fileLines[i].Contains("textParam: "))
                {
                    if (obj.textParam == null)
                    {
                        obj.textParam = new TextParameters();
                    }
                    obj.textParam.AddField(TextField.ParseText(fileLines[i], fManager));
                }
                else if (fileLines[i].Contains("colorRect: "))
                {
                    if (obj.textParam == null)
                    {
                        obj.textParam = new TextParameters();
                    }
                    obj.textParam.AddField(TextField.ParseColorRect(fileLines[i]));
                }
                else if (fileLines[i].Contains("customTexture = "))
                {
                    if (fileLines[i].Replace("customTexture = ", "") == "null")
                    {
                        obj.customTexture = null;
                    }
                    else if (!availableTextures.Any(tex => tex.name == fileLines[i].Replace("customTexture = ", "")))
                    {
                        Debug.LogError("[ProceduralObjects] A saved object was found with a texture that doesn't exist anymore with the name " + fileLines[i].Replace("customTexture = ", "") + ", therefore loading the default object texture");
                    }
                    else
                    {
                        obj.customTexture = availableTextures.FirstOrDefault(tex => tex.name == fileLines[i].Replace("customTexture = ", ""));
                    }
                }
                else if (fileLines[i].Contains("VERTICES "))
                {
                    obj.allVertices = new Vector3[int.Parse(fileLines[i].Replace("VERTICES ", ""))];
                }
                else if (fileLines[i].Contains("vertex"))
                {
                    string[] split = fileLines[i].Replace("vertex ", "").Split(new string[] { " = " }, StringSplitOptions.RemoveEmptyEntries);
                    obj.allVertices[int.Parse(split[0])] = VertexUtils.ParseVector3(split[1]);
                }
            }
            ClipboardProceduralObjects selec = new ClipboardProceduralObjects(ClipboardProceduralObjects.ClipboardType.Selection);

            selec.selection_objects = objects;
            ExternalInfo info = new ExternalInfo(name, path, selec, fromWorkshop);

            m_externals.Add(info);
        }
コード例 #6
0
        private void LoadOneExternal(string path, List <Texture2D> availableTextures, bool fromWorkshop, FontManager fManager)
        {
            try
            {
                var lines = File.ReadAllLines(path);

                if (lines.Any(line => line.Contains("externaltype = selection")))
                {
                    LoadSelectionExternal(lines, path, availableTextures, fromWorkshop, fManager);
                }
                else
                {
                    CacheProceduralObject obj = new CacheProceduralObject();
                    obj.tilingFactor = 8;
                    string name = "";
                    for (int i = 0; i < lines.Count(); i++)
                    {
                        if (lines[i].Contains("name = "))
                        {
                            name = lines[i].Replace("name = ", "").Trim();
                        }
                        else if (lines[i].Contains("baseInfoType = "))
                        {
                            obj.baseInfoType = lines[i].Replace("baseInfoType = ", "");
                        }
                        else if (lines[i].Contains("basePrefabName = "))
                        {
                            obj.basePrefabName = lines[i].Replace("basePrefabName = ", "");
                        }
                        else if (lines[i].Contains("renderDistance = "))
                        {
                            obj.renderDistance = float.Parse(lines[i].Replace("renderDistance = ", ""));
                        }
                        //   else if (lines[i].Contains("scale = "))
                        //       obj.scale = float.Parse(lines[i].Replace("scale = ", ""));
                        else if (lines[i].Contains("isPloppableAsphalt = "))
                        {
                            obj.isPloppableAsphalt = bool.Parse(lines[i].Replace("isPloppableAsphalt = ", ""));
                        }
                        else if (lines[i].Contains("tilingFactor = "))
                        {
                            obj.tilingFactor = int.Parse(lines[i].Replace("tilingFactor = ", ""));
                        }
                        else if (lines[i].Contains("rotation = "))
                        {
                            obj.m_rotation = VertexUtils.ParseQuaternion(lines[i].Replace("rotation = ", ""));
                        }
                        else if (lines[i].Contains("disableRecalculation = "))
                        {
                            obj.disableRecalculation = bool.Parse(lines[i].Replace("disableRecalculation = ", ""));
                        }
                        else if (lines[i].Contains("customTexture = "))
                        {
                            if (lines[i].Replace("customTexture = ", "") == "null")
                            {
                                obj.customTexture = null;
                            }
                            else if (!availableTextures.Any(tex => tex.name == lines[i].Replace("customTexture = ", "")))
                            {
                                Debug.LogError("[ProceduralObjects] A saved object was found with a texture that doesn't exist anymore with the name " + lines[i].Replace("customTexture = ", "") + ", therefore loading the default object texture");
                            }
                            else
                            {
                                obj.customTexture = availableTextures.FirstOrDefault(tex => tex.name == lines[i].Replace("customTexture = ", ""));
                            }
                        }
                        else if (lines[i].Contains("textParam: "))
                        {
                            if (obj.textParam == null)
                            {
                                obj.textParam = new TextParameters();
                            }
                            obj.textParam.AddField(TextField.ParseText(lines[i], fManager));
                        }
                        else if (lines[i].Contains("colorRect: "))
                        {
                            if (obj.textParam == null)
                            {
                                obj.textParam = new TextParameters();
                            }
                            obj.textParam.AddField(TextField.ParseColorRect(lines[i]));
                        }
                        else if (lines[i].Contains("VERTICES "))
                        {
                            obj.allVertices = new Vector3[int.Parse(lines[i].Replace("VERTICES ", ""))];
                        }
                        else if (lines[i].Contains("vertex"))
                        {
                            string[] split = lines[i].Replace("vertex ", "").Split(new string[] { " = " }, StringSplitOptions.RemoveEmptyEntries);
                            obj.allVertices[int.Parse(split[0])] = VertexUtils.ParseVector3(split[1]);
                        }
                    }
                    ExternalInfo info = new ExternalInfo(name, path, obj, fromWorkshop);
                    m_externals.Add(info);
                }
            }
            catch
            {
                Debug.LogError("[ProceduralObjects] Couldn't load an External Procedural Object : Invalid, corrupted or edited file at path : " + path);
            }
        }