public void OpenFile() { #if UNITY_EDITOR fileName = EditorUtility.OpenFilePanel("Please select the JSON file", "", "json"); #else OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.RestoreDirectory = true; OpenFile.InitialDirectory = @"C:\\"; OpenFile.Title = "Please select the JSON file"; OpenFile.Filter = "JSON Files (*.json) | *.json |All Files | *.* "; if (OpenFile.ShowDialog() == DialogResult.OK) { fileName = OpenFile.FileName; } else { fileName = ""; } #endif if (fileName.Length != 0) { ClearTemp(); changeM.ResetChange(); structureM.LoadingJson(fileName); } }
// Если сделали двойной клик в пустоту. public void DoubleTapToNull() { //Debug.Log("Я кликнул два раза в пустоту"); isConnection = false; SelectActive(startConnectionObject, false); startConnectionObject = null; string name = PredicateModule.NameSystem.GetName("Vertex"); Vector3[] position = new Vector3[1]; // 5f - расстояние создания. Vector3 mousePosFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 5f); position[0] = Camera.main.ScreenToWorldPoint(mousePosFar); structureM.AddNode(name); structureM.AddNodeData(name, position, "Vertex"); predicateM.TactBuild(name, "Vertex"); changeM.ResetChange(); isNowSelected = true; freeCamera.selectedObject = name; changeM.ShowChangeMenu(name); }
// Загрузка из JSON. public void LoadingJson(string path) { // СТАДИЯ 1. ЗАГРУЗКА ИЗ JSON В СТРУКТУРУ. // Очищаем выделение, если оно и было. changeM.ResetChange(); // Очищаем объекты unity сцены. SceneCleaning.Instance.Clean(); // Очищаем систему имён. PredicateModule.NameSystem.Clear(); // Создаём новую структуру. NewStructure(); using (StreamReader sr = new StreamReader(path)) { string json = sr.ReadToEnd(); json = json.Replace("\t", string.Empty); json = json.Replace("\n", string.Empty); json = json.Replace("\r", string.Empty); Structure[] structureArr = JsonHelper.FromJson <Structure>(json); foreach (var part in structureArr) { structure[part.Name] = part; } } // TO DO Возможно после билда не заработает. string pathTemp = Application.dataPath + "/MetagraphEditorTemp"; string homeLocation = Path.GetDirectoryName(LoadSaveDialog.GetInstance().fileName); if (!Directory.Exists(pathTemp)) { Directory.CreateDirectory(pathTemp); } foreach (var part in structure) { foreach (var parent in part.Value.ParentStructuresKeys) { part.Value.ParentStructures.Add(parent, structure[parent]); } foreach (var child in part.Value.ChildStructuresKeys) { part.Value.ChildStructures.Add(child, structure[child]); } // Поправить как-нибудь. TO DO // При десериализации null становится empty. if (part.Value.Description == string.Empty) { part.Value.Description = null; } if (part.Value.Start == string.Empty) { part.Value.Start = null; } if (part.Value.End == string.Empty) { part.Value.End = null; } if (part.Value.NameModel != null && part.Value.NameModel != string.Empty) { File.Copy(homeLocation + "/" + part.Value.NameModel, pathTemp + "/" + part.Value.NameModel, true); } else { part.Value.NameModel = null; } } // Загружаем новые имена в менеджер имён. PredicateModule.NameSystem.LoadNameDict(ref structure); // СТАДИЯ 2. ПОСТРОЕНИЕ ГРАФА ПО СТРУКТУРЕ. predicateM.BuildGraphs(); }