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); } }
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); } }
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; }
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); } }
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); }
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); } }