public ExternalInfo(string name, string path, CacheProceduralObject pObj, bool isWorkshop) { m_name = name; m_object = pObj; this.m_filePath = path; this.isWorkshop = isWorkshop; this.m_selection = null; this.m_externalType = ClipboardProceduralObjects.ClipboardType.Single; }
public void MakeSelectionList(List <ProceduralObject> list, POGroup selectedGroup) { this.selection_objects = new Dictionary <CacheProceduralObject, Vector3>(); for (int i = 0; i < list.Count; i++) { var obj = list[i]; Vector3 relativePos; if (i == 0) { relativePos = Vector3.zero; } else { relativePos = obj.m_position - list[0].m_position; } var cachePO = new CacheProceduralObject(obj); cachePO.temp_id = obj.id; cachePO.parent = -1; this.selection_objects.Add(cachePO, relativePos); } if (selectedGroup != null) { groupInformation = null; return; } else { groupInformation = new Dictionary <CacheProceduralObject, CacheProceduralObject>(); for (int i = 0; i < list.Count; i++) { var obj = list[i]; if (obj.group == null) { continue; } if (obj.isRootOfGroup) { continue; } if (!list.Contains(obj.group.root)) { continue; } groupInformation.Add(selection_objects.Keys.ToList()[i], selection_objects.Keys.ToList()[list.IndexOf(obj.group.root)]); selection_objects.Keys.ToList()[i].parent = obj.group.root.id; } } }
public void SaveToExternal(string name, CacheProceduralObject pobj) { string path = ProceduralObjectsMod.ExternalsConfigPath + name.ToFileName() + ".pobj"; if (File.Exists(path)) { return; } TextWriter tw = new StreamWriter(path); tw.WriteLine("name = " + name); tw.WriteLine("baseInfoType = " + pobj.baseInfoType); tw.WriteLine("basePrefabName = " + pobj.basePrefabName); tw.WriteLine("isPloppableAsphalt = " + pobj.isPloppableAsphalt.ToString()); // tw.WriteLine("scale = " + pobj.scale.ToString()); tw.WriteLine("customTexture = " + ((pobj.customTexture == null) ? "null" : pobj.customTexture.name)); tw.WriteLine("renderDistance = " + pobj.renderDistance.ToString()); tw.WriteLine("rotation = " + pobj.m_rotation.ToString()); tw.WriteLine("disableRecalculation = " + pobj.disableRecalculation.ToString()); if (pobj.tilingFactor != 8) { tw.WriteLine("tilingFactor = " + pobj.tilingFactor.ToString()); } if (pobj.textParam != null) { if (pobj.textParam.Count() > 0) { foreach (TextField field in pobj.textParam.m_textFields) { tw.WriteLine(TextField.SaveString(field)); } } } tw.WriteLine("VERTICES " + pobj.allVertices.Count()); for (int i = 0; i < pobj.allVertices.Count(); i++) { tw.WriteLine("vertex " + i.ToString() + " = " + pobj.allVertices[i].ToString()); } tw.Close(); if (!m_externals.Any(ext => ext.m_object == pobj)) { m_externals.Add(new ExternalInfo(name, path, pobj, false)); } }
public ProceduralObject(CacheProceduralObject sourceCacheObj, int id, Vector3 position, LayerManager layerManager) { if (sourceCacheObj.baseInfoType == "PROP") { PropInfo sourceProp = sourceCacheObj._baseProp; if (sourceCacheObj._baseProp == null) { sourceProp = Resources.FindObjectsOfTypeAll <PropInfo>().FirstOrDefault(info => info.name == sourceCacheObj.basePrefabName); } this._baseProp = sourceProp; this.id = id; this.basePrefabName = sourceCacheObj.basePrefabName; this.baseInfoType = "PROP"; this.isPloppableAsphalt = sourceProp.IsPloppableAsphalt(); m_material = GameObject.Instantiate(sourceProp.m_material); if (sourceCacheObj.meshStatus == 2) { m_mesh = sourceProp.m_mesh.InstantiateMesh(); m_mesh.SetVertices(new List <Vector3>(sourceCacheObj.allVertices)); vertices = Vertex.CreateVertexList(this); meshStatus = 2; } else { meshStatus = 1; m_mesh = sourceProp.m_mesh; vertices = Vertex.CreateVertexList(sourceProp); } if (sourceProp.m_mesh.name == "ploppableasphalt-prop" || sourceProp.m_mesh.name == "ploppableasphalt-decal") { m_color = m_material.ApplyPloppableColor(); } } else if (sourceCacheObj.baseInfoType == "BUILDING")// building { BuildingInfo sourceBuilding = sourceCacheObj._baseBuilding; if (sourceCacheObj._baseBuilding == null) { sourceBuilding = Resources.FindObjectsOfTypeAll <BuildingInfo>().FirstOrDefault(info => info.name == sourceCacheObj.basePrefabName); } this._baseBuilding = sourceBuilding; this.id = id; this.basePrefabName = sourceCacheObj.basePrefabName; this.baseInfoType = "BUILDING"; this.isPloppableAsphalt = false; m_material = GameObject.Instantiate(sourceBuilding.m_material); m_mesh = sourceBuilding.m_mesh.InstantiateMesh(); meshStatus = 2; m_mesh.SetVertices(new List <Vector3>(sourceCacheObj.allVertices)); vertices = Vertex.CreateVertexList(this); m_mesh.colors = new Color[] { }; m_mesh.colors32 = new Color32[] { }; } if (sourceCacheObj.customTexture != null) { m_material.mainTexture = sourceCacheObj.customTexture as Texture; customTexture = sourceCacheObj.customTexture; } m_visibility = sourceCacheObj.visibility; historyEditionBuffer = new HistoryBuffer(this); if (sourceCacheObj.textParam != null) { m_textParameters = TextParameters.Clone(sourceCacheObj.textParam, false); // m_textParameters.SetFonts(); var originalTex = new Texture2D(m_material.mainTexture.width, m_material.mainTexture.height, TextureFormat.RGBA32, false); originalTex.SetPixels(((Texture2D)m_material.mainTexture).GetPixels()); originalTex.Apply(); m_material.mainTexture = m_textParameters.ApplyParameters(originalTex); } else { m_textParameters = null; } if (sourceCacheObj.layer != null) { if (layerManager.m_layers.Contains(sourceCacheObj.layer)) { layer = sourceCacheObj.layer; } } m_color = sourceCacheObj.m_color; m_material.color = m_color; this.flipFaces = sourceCacheObj.flipFaces; this.disableCastShadows = sourceCacheObj.disableCastShadows; if (this.flipFaces) { VertexUtils.flipFaces(this); } renderDistance = sourceCacheObj.renderDistance; renderDistLocked = sourceCacheObj.renderDistLocked; MaterialOptions.FixDecalRenderDist(this); m_position = position; m_rotation = sourceCacheObj.m_rotation; disableRecalculation = sourceCacheObj.disableRecalculation; normalsRecalcMode = sourceCacheObj.normalsRecalculation; this.tilingFactor = sourceCacheObj.tilingFactor; if (sourceCacheObj.modules != null) { m_modules = new List <POModule>(); foreach (var m in sourceCacheObj.modules) { POModule clone; try { clone = m.Clone(); } catch (Exception e) { Debug.LogError("[ProceduralObjects] Error inside module Clone() method!\n" + e); continue; } ModuleManager.instance.modules.Add(clone); if (clone.enabled) { ModuleManager.instance.enabledModules.Add(clone); } clone.parentObject = this; try { clone.OnModuleCreated(ProceduralObjectsLogic.instance); } catch (Exception e) { Debug.LogError("[ProceduralObjects] Error inside module OnModuleCreated() method!\n" + e); } m_modules.Add(clone); } } }
public ProceduralObject(CacheProceduralObject sourceCacheObj, int id, Vector3 position) { if (sourceCacheObj.baseInfoType == "PROP") { PropInfo sourceProp = sourceCacheObj._baseProp; if (sourceCacheObj._baseProp == null) { sourceProp = Resources.FindObjectsOfTypeAll <PropInfo>().FirstOrDefault(info => info.name == sourceCacheObj.basePrefabName); } this._baseProp = sourceProp; this.id = id; this.basePrefabName = sourceCacheObj.basePrefabName; this.baseInfoType = "PROP"; this.isPloppableAsphalt = sourceProp.IsPloppableAsphalt(); renderDistance = sourceCacheObj.renderDistance; m_position = position; m_rotation = sourceCacheObj.m_rotation; m_mesh = sourceProp.m_mesh.InstantiateMesh(); allVertices = sourceCacheObj.allVertices; m_mesh.SetVertices(new List <Vector3>(allVertices)); m_material = GameObject.Instantiate(sourceProp.m_material); if (sourceProp.m_mesh.name == "ploppableasphalt-prop" || sourceProp.m_mesh.name == "ploppableasphalt-decal") { m_material.ApplyPloppableColor(); } } else if (sourceCacheObj.baseInfoType == "BUILDING")// building { BuildingInfo sourceBuilding = sourceCacheObj._baseBuilding; if (sourceCacheObj._baseBuilding == null) { sourceBuilding = Resources.FindObjectsOfTypeAll <BuildingInfo>().FirstOrDefault(info => info.name == sourceCacheObj.basePrefabName); } this._baseBuilding = sourceBuilding; this.id = id; this.basePrefabName = sourceCacheObj.basePrefabName; this.baseInfoType = "BUILDING"; this.isPloppableAsphalt = false; renderDistance = sourceCacheObj.renderDistance; m_position = position; m_rotation = sourceCacheObj.m_rotation; m_mesh = sourceBuilding.m_mesh.InstantiateMesh(); allVertices = sourceCacheObj.allVertices; m_mesh.SetVertices(new List <Vector3>(allVertices)); m_mesh.colors = new Color[] { }; m_mesh.colors32 = new Color32[] { }; m_material = GameObject.Instantiate(sourceBuilding.m_material); } if (sourceCacheObj.customTexture != null) { m_material.mainTexture = sourceCacheObj.customTexture as Texture; customTexture = sourceCacheObj.customTexture; } m_visibility = sourceCacheObj.visibility; historyEditionBuffer = new HistoryBuffer(this); if (sourceCacheObj.textParam != null) { m_textParameters = TextParameters.Clone(sourceCacheObj.textParam, false); // m_textParameters.SetFonts(); var originalTex = new Texture2D(m_material.mainTexture.width, m_material.mainTexture.height, TextureFormat.RGBA32, false); originalTex.SetPixels(((Texture2D)m_material.mainTexture).GetPixels()); originalTex.Apply(); m_material.mainTexture = m_textParameters.ApplyParameters(originalTex); } else { m_textParameters = null; } // this.flipFaces = sourceCacheObj.flipFaces; // if (this.flipFaces) // VertexUtils.flipFaces(this); disableRecalculation = sourceCacheObj.disableRecalculation; this.tilingFactor = sourceCacheObj.tilingFactor; }
private void createSelectionClipboard() { var fileLines = File.ReadAllLines(m_filePath); Dictionary <CacheProceduralObject, Vector3> objects = new Dictionary <CacheProceduralObject, Vector3>(); CacheProceduralObject obj = null; Vector3 relativePos = Vector3.zero; var modulesData = new List <Dictionary <string, string> >(); Dictionary <string, string> currentModuleData = null; string name = ""; for (int i = 0; i < fileLines.Count(); i++) { try { if (currentModuleData != null) { if (fileLines[i].Contains("{")) { continue; } else if (fileLines[i].Contains("}")) { modulesData.Add(currentModuleData); currentModuleData = null; continue; } else if (fileLines[i].Contains(" = ")) { currentModuleData.Add(fileLines[i].GetUntilOrEmpty(" = ").Trim(), fileLines[i].GetStringAfter(" = ").Trim()); } continue; } else if (fileLines[i].Contains("name = ")) { name = fileLines[i].Replace("name = ", "").Trim(); } else if (fileLines[i].Contains("{")) { obj = new CacheProceduralObject(); obj.tilingFactor = 8; obj.m_color = Color.white; obj.parent = -1; obj.meshStatus = 2; relativePos = Vector3.zero; modulesData = new List <Dictionary <string, string> >(); } else if (fileLines[i].Contains("}")) { obj.modules = ModuleManager.LoadModulesFromData(modulesData, false, null); objects[obj] = relativePos; modulesData = null; 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("absPosition = ")) { obj._staticPos = fileLines[i].Replace("absPosition = ", "").ParseVector3(); } else if (fileLines[i].Contains("renderDistance = ")) { obj.renderDistance = float.Parse(fileLines[i].Replace("renderDistance = ", "")); } else if (fileLines[i].Contains("renderDistLocked = ")) { obj.renderDistLocked = bool.Parse(fileLines[i].Replace("renderDistLocked = ", "")); } 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("parenting = ")) { var splited = fileLines[i].Replace("parenting = ", "").Trim().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); obj.temp_id = int.Parse(splited[0]); obj.parent = int.Parse(splited[1]); } else if (fileLines[i].Contains("disableRecalculation = ")) { obj.disableRecalculation = bool.Parse(fileLines[i].Replace("disableRecalculation = ", "")); } else if (fileLines[i].Contains("flipFaces = ")) { obj.flipFaces = bool.Parse(fileLines[i].Replace("flipFaces = ", "")); } else if (fileLines[i].Contains("disableCastShadows = ")) { obj.disableCastShadows = bool.Parse(fileLines[i].Replace("disableCastShadows = ", "")); } else if (fileLines[i].Contains("color = ")) { obj.m_color = SerializableColor.Parse(fileLines[i].Replace("color = ", "")); } else if (fileLines[i].Contains("normalsRecalc = ")) { obj.normalsRecalculation = (NormalsRecalculation)Enum.Parse(typeof(NormalsRecalculation), fileLines[i].Replace("normalsRecalc = ", ""), true); } else if (fileLines[i].Contains("visibility = ")) { obj.visibility = (ProceduralObjectVisibility)Enum.Parse(typeof(ProceduralObjectVisibility), fileLines[i].Replace("visibility = ", ""), true); } else if (fileLines[i].Contains("textParam: ")) { if (obj.textParam == null) { obj.textParam = new TextParameters(); } obj.textParam.AddField(TextField.ParseText(fileLines[i], FontManager.instance)); } 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 = ")) { obj.customTexture = TextureManager.instance.FindTexture(fileLines[i].Replace("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("ORIGINALMODEL")) { obj.meshStatus = 1; } else if (fileLines[i].Contains("MODULE")) { try { if (fileLines[i + 1].Contains("{")) { currentModuleData = new Dictionary <string, string>(); } } catch { continue; } } 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]); } } catch { Debug.LogError("[ProceduralObjects] Error while loading an object from export at path : " + m_filePath); } } ClipboardProceduralObjects selec = new ClipboardProceduralObjects(ClipboardProceduralObjects.ClipboardType.Selection); selec.selection_objects = objects; var groupInfo = new Dictionary <CacheProceduralObject, CacheProceduralObject>(); var objlist = objects.Keys.ToList(); foreach (var o in objlist) { if (o.parent == -1) { continue; } try { var parent = objlist.First(po => po.temp_id == o.parent); groupInfo.Add(o, parent); } catch { continue; } } if (groupInfo.Count > 0) { selec.groupInformation = groupInfo; } this.m_name = name; this.m_selection = selec; this.m_externalType = ClipboardProceduralObjects.ClipboardType.Selection; }
private void createSingleClipboard() { var lines = File.ReadAllLines(m_filePath); CacheProceduralObject obj = new CacheProceduralObject(); try { obj.tilingFactor = 8; obj.m_color = Color.white; string name = ""; var modulesData = new List <Dictionary <string, string> >(); Dictionary <string, string> currentModuleData = null; bool original = lines.Any(s => s.Contains("ORIGINALMODEL")); if (original) { obj.meshStatus = 1; } else { obj.meshStatus = 2; } for (int i = 0; i < lines.Count(); i++) { if (currentModuleData != null) { if (lines[i].Contains("{")) { continue; } else if (lines[i].Contains("}")) { modulesData.Add(currentModuleData); currentModuleData = null; continue; } else if (lines[i].Contains(" = ")) { currentModuleData.Add(lines[i].GetUntilOrEmpty(" = ").Trim(), lines[i].GetStringAfter(" = ").Trim()); } } 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("renderDistLocked = ")) { obj.renderDistLocked = bool.Parse(lines[i].Replace("renderDistLocked = ", "")); } // 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("color = ")) { obj.m_color = SerializableColor.Parse(lines[i].Replace("color = ", "")); } else if (lines[i].Contains("flipFaces = ")) { obj.flipFaces = bool.Parse(lines[i].Replace("flipFaces = ", "")); } else if (lines[i].Contains("disableCastShadows = ")) { obj.disableCastShadows = bool.Parse(lines[i].Replace("disableCastShadows = ", "")); } else if (lines[i].Contains("normalsRecalc = ")) { obj.normalsRecalculation = (NormalsRecalculation)Enum.Parse(typeof(NormalsRecalculation), lines[i].Replace("normalsRecalc = ", ""), true); } else if (lines[i].Contains("visibility = ")) { obj.visibility = (ProceduralObjectVisibility)Enum.Parse(typeof(ProceduralObjectVisibility), lines[i].Replace("visibility = ", ""), true); } else if (lines[i].Contains("customTexture = ")) { obj.customTexture = TextureManager.instance.FindTexture(lines[i].Replace("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], FontManager.instance)); } 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("MODULE")) { try { if (lines[i + 1].Contains("{")) { currentModuleData = new Dictionary <string, string>(); } } catch { continue; } } else if (!original) { 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]); } } } obj.modules = ModuleManager.LoadModulesFromData(modulesData, false, null); } catch { Debug.LogError("[ProceduralObjects] Couldn't load an External Procedural Object : Invalid, corrupted or edited file at path : " + m_filePath); } this.m_externalType = ClipboardProceduralObjects.ClipboardType.Single; this.m_object = obj; }
public void SaveToExternal(string name, CacheProceduralObject pobj) { string path = ProceduralObjectsMod.ExternalsConfigPath + name.ToFileName() + ".pobj"; if (File.Exists(path)) { return; } TextWriter tw = new StreamWriter(path); tw.WriteLine("name = " + name); tw.WriteLine("baseInfoType = " + pobj.baseInfoType); tw.WriteLine("basePrefabName = " + pobj.basePrefabName); tw.WriteLine("isPloppableAsphalt = " + pobj.isPloppableAsphalt.ToString()); // tw.WriteLine("scale = " + pobj.scale.ToString()); tw.WriteLine("customTexture = " + ((pobj.customTexture == null) ? "null" : pobj.customTexture.name)); tw.WriteLine("renderDistance = " + pobj.renderDistance.ToString()); tw.WriteLine("renderDistLocked = " + pobj.renderDistLocked.ToString()); tw.WriteLine("rotation = " + pobj.m_rotation.ToStringUnrounded()); tw.WriteLine("disableRecalculation = " + pobj.disableRecalculation.ToString()); if (pobj.tilingFactor != 8) { tw.WriteLine("tilingFactor = " + pobj.tilingFactor.ToString()); } tw.WriteLine("color = " + ((SerializableColor)pobj.m_color).ToString()); tw.WriteLine("flipFaces = " + pobj.flipFaces.ToString()); tw.WriteLine("disableCastShadows = " + pobj.disableCastShadows.ToString()); tw.WriteLine("normalsRecalc = " + pobj.normalsRecalculation.ToString()); tw.WriteLine("visibility = " + pobj.visibility.ToString()); if (pobj.textParam != null) { if (pobj.textParam.Count() > 0) { foreach (TextField field in pobj.textParam.m_textFields) { tw.WriteLine(TextField.SaveString(field)); } } } if (pobj.modules != null) { if (pobj.modules.Count > 0) { ModuleManager.WriteModules(tw, pobj.modules, false); } } if (pobj.meshStatus == 1) { tw.WriteLine("ORIGINALMODEL"); } else { tw.WriteLine("VERTICES " + pobj.allVertices.Count()); for (int i = 0; i < pobj.allVertices.Count(); i++) { tw.WriteLine("vertex " + i.ToString() + " = " + pobj.allVertices[i].ToStringUnrounded()); } tw.Close(); } if (!m_externals.Any(ext => ext.m_object == pobj)) { m_externals.Add(new ExternalInfo(name, path, pobj, false)); } }
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); } }