/// <summary> /// Loads the field from a given directory /// </summary> /// <param name="directory">field directory</param> /// <returns>whether the process was successful</returns> bool LoadField(string directory) { fieldPath = directory; fieldObject = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; if (!File.Exists(directory + "\\definition.bxdf")) { return(false); } FieldDataHandler.Load(fieldPath); Controls.Init(); string loadResult; fieldDefinition = (UnityFieldDefinition)BXDFProperties.ReadProperties(directory + "\\definition.bxdf", out loadResult); Debug.Log(loadResult); fieldDefinition.CreateTransform(fieldObject.transform); return(fieldDefinition.CreateMesh(directory + "\\mesh.bxda")); }
/// <summary> /// Loads the field from a given directory /// </summary> /// <param name="directory">field directory</param> /// <returns>whether the process was successful</returns> public static bool LoadField(string directory = null) { string fieldPath; GameObject fieldObject; UnityFieldDefinition fieldDefinition; if (directory == null) { directory = PlayerPrefs.GetString("simSelectedField"); } fieldPath = directory; fieldObject = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; string loadResult; fieldDefinition = (UnityFieldDefinition)BXDFProperties.ReadProperties(directory + "\\definition.bxdf", out loadResult); Debug.Log(loadResult); fieldDefinition.CreateTransform(fieldObject.transform); return(fieldDefinition.CreateMesh(directory + "\\mesh.bxda")); }
public void UpdateFieldGuid() { if (fieldGuid.Length > 0) { return; } string fieldFile = PlayerPrefs.GetString("simSelectedField") + "\\definition.bxdf"; if (!File.Exists(fieldFile)) { CancelSync(); return; } Task <FieldDefinition> loadingTask = new Task <FieldDefinition>(() => BXDFProperties.ReadProperties(fieldFile)); loadingTask.ContinueWith(t => { if (t.Result == null) { CancelSync(); return; } fieldGuid = t.Result.GUID.ToString(); }); loadingTask.Start(); }
/// <summary> /// Creates a new BulletFieldDefinition from a set of .bxda and .bxdf files /// </summary> /// <param name="path"></param> /// <returns></returns> public static BulletFieldDefinition FromFile(string path) { Factory = delegate(Guid guid, string name) { return(new BulletFieldDefinition(guid, name)); }; BulletFieldDefinition toReturn = (BulletFieldDefinition)BXDFProperties.ReadProperties(path + "definition.bxdf"); toReturn.CreateMesh(path + "mesh.bxda"); return(toReturn); }
/// <summary> /// Checks if the resources held by the other identity need to be transferred to /// this instance. /// </summary> public void CheckDependencies() { ReceivedFiles.Clear(); dependencyCount = 0; List <int> unresolvedDependencies = new List <int>(); RobotFolder = PlayerPrefs.GetString("simSelectedRobot"); foreach (PlayerIdentity otherIdentity in FindObjectsOfType <PlayerIdentity>().Where(p => p.id != id)) { string robotsDirectory = PlayerPrefs.GetString("RobotDirectory"); otherIdentity.RobotFolder = string.Empty; foreach (string dir in Directory.GetDirectories(robotsDirectory, otherIdentity.robotName)) { RigidNode_Base root = BXDJSkeleton.ReadSkeleton(dir + "\\skeleton.bxdj"); if (root.GUID.ToString().Equals(otherIdentity.robotGuid)) { otherIdentity.RobotFolder = dir; break; } } if (otherIdentity.RobotFolder.Length == 0) { unresolvedDependencies.Add(otherIdentity.id); otherIdentity.RobotFolder = robotsDirectory + "\\" + otherIdentity.robotName; } } string fieldsDirectory = PlayerPrefs.GetString("FieldDirectory"); MatchManager.Instance.FieldFolder = string.Empty; foreach (string dir in Directory.GetDirectories(fieldsDirectory, MatchManager.Instance.FieldName)) { FieldDefinition definition = BXDFProperties.ReadProperties(dir + "\\definition.bxdf"); if (definition.GUID.ToString().Equals(MatchManager.Instance.FieldGuid)) { MatchManager.Instance.FieldFolder = dir; break; } } if (MatchManager.Instance.FieldFolder.Length == 0) { unresolvedDependencies.Add(-1); MatchManager.Instance.FieldFolder = fieldsDirectory + "\\" + MatchManager.Instance.FieldName; } CmdAddDependencies(unresolvedDependencies.ToArray()); }
bool LoadField(string directory) { fieldObject = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; string loadResult; fieldDefinition = (UnityFieldDefinition)BXDFProperties.ReadProperties(directory + "\\definition.bxdf", out loadResult); Debug.Log(loadResult); fieldDefinition.CreateTransform(fieldObject.transform); return(fieldDefinition.CreateMesh(directory + "\\mesh.bxda")); }
/// <summary> /// Exports the BXDF and BXDA files. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Exporter_DoWork(object sender, DoWorkEventArgs e) { if (FilePathTextBox.Text.Length == 0 || FileNameTextBox.Text.Length == 0 || FileNameTextBox.Text.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) >= 0) { e.Result = "Invalid Export Parameters."; return; } FieldDefinition fieldDefinition = new FieldDefinition(FileNameTextBox.Text); SurfaceExporter exporter = new SurfaceExporter(); ComponentOccurrencesEnumerator componentOccurrences = ((AssemblyDocument)Program.INVENTOR_APPLICATION.ActiveDocument).ComponentDefinition.Occurrences.AllLeafOccurrences; for (int i = 0; i < componentOccurrences.Count; i++) { progressWindow.Invoke(new Action(() => { progressWindow.ProcessInfoLabel.Text = "Exporting: " + (Math.Round((i / (float)componentOccurrences.Count) * 100.0f, 2)).ToString() + "%"; progressWindow.ProcessProgressBar.Value = i; })); if (componentOccurrences[i + 1].Visible) { exporter.Reset(); exporter.Export(componentOccurrences[i + 1], false, true); // Index starts at 1? BXDAMesh output = exporter.GetOutput(); FieldNode outputNode = new FieldNode(componentOccurrences[i + 1].Name, CollisionObjectsView.Nodes.Find(componentOccurrences[i + 1].Name, true).Length > 0 ? FieldNodeCollisionType.MESH : FieldNodeCollisionType.NONE); outputNode.AddSubMeshes(output); fieldDefinition.AddChild(outputNode); } } BXDFProperties.WriteProperties(FilePathTextBox.Text + "\\" + FileNameTextBox.Text + ".bxdf", fieldDefinition); fieldDefinition.CreateMesh(); fieldDefinition.GetMeshOutput().WriteToFile(FilePathTextBox.Text + "\\" + FileNameTextBox.Text + ".bxda"); FieldDefinition_Base copyDefinition = BXDFProperties.ReadProperties(FilePathTextBox.Text + "\\" + FileNameTextBox.Text + ".bxdf"); e.Result = "Export Successful!"; }
private void TryLoadField() { activeField = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; Debug.Log(filePath); string loadResult; field = (UnityFieldDefinition)BXDFProperties.ReadProperties(filePath + "definition.bxdf", out loadResult); Debug.Log(loadResult); field.CreateTransform(activeField.transform); fieldLoaded = field.CreateMesh(filePath + "mesh.bxda"); }
private void TryLoadField() { activeField = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; try { string loadResult; UnityFieldDefinition field = (UnityFieldDefinition)BXDFProperties.ReadProperties(Application.dataPath + "//resources//ConfigurationEnvironment//definition.bxdf", out loadResult); Debug.Log(loadResult); field.CreateTransform(activeField.transform); bool fieldLoaded = field.CreateMesh(Application.dataPath + "//resources//ConfigurationEnvironment//mesh.bxda"); } catch { Debug.Log("Field loading failed!"); } }
/// <summary> /// Loads the field from a given directory /// </summary> /// <param name="directory">field directory</param> /// <returns>whether the process was successful</returns> bool LoadField(string directory) { if (string.IsNullOrEmpty(directory)) { UserMessageManager.Dispatch("Field not found", 7); } fieldPath = directory; fieldObject = new GameObject("Field"); FieldDefinition.Factory = delegate(Guid guid, string name) { return(new UnityFieldDefinition(guid, name)); }; bool isEmptyGrid = directory == "" || new DirectoryInfo(directory).Name == UnityFieldDefinition.EmptyGridName; if (!File.Exists(directory + Path.DirectorySeparatorChar + "definition.bxdf") && !isEmptyGrid) { return(false); } FieldDataHandler.LoadFieldMetaData(fieldPath); Controls.Load(); Controls.UpdateFieldControls(); if (!Controls.HasBeenSaved()) { Controls.Save(true); } if (isEmptyGrid) { return(true); } fieldDefinition = (UnityFieldDefinition)BXDFProperties.ReadProperties(directory + Path.DirectorySeparatorChar + "definition.bxdf", out string loadResult); // Debug.Log("Field load result: " + loadResult); fieldDefinition.CreateTransform(fieldObject.transform); return(fieldDefinition.CreateMesh(directory + Path.DirectorySeparatorChar + "mesh.bxda")); }
/// <summary> /// Executes the actual exporting. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void exporter_DoWork(object sender, DoWorkEventArgs e) { FieldDefinition fieldDefinition = FieldDefinition.Factory(Guid.NewGuid(), Program.ASSEMBLY_DOCUMENT.DisplayName); foreach (PropertySet ps in Program.MAINWINDOW.GetPropertySetsTabControl().TranslateToPropertySets()) { fieldDefinition.AddPropertySet(ps); } SurfaceExporter surfaceExporter = new SurfaceExporter(); List <string> exportedMeshes = new List <string>(); List <string> exportedColliders = new List <string>(); StringBuilder pathBuilder = new StringBuilder(); int numOccurrences = Program.ASSEMBLY_DOCUMENT.ComponentDefinition.Occurrences.AllLeafOccurrences.Count; int progressPercent = 0; int currentOccurrenceID = 0; foreach (ComponentOccurrence currentOccurrence in Program.ASSEMBLY_DOCUMENT.ComponentDefinition.Occurrences.AllLeafOccurrences) { if (exporter.CancellationPending) { e.Cancel = true; return; } progressPercent = (int)Math.Floor((currentOccurrenceID / (double)numOccurrences) * 100.0); exporter.ReportProgress(progressPercent, "Exporting... " + progressPercent + "%"); if (currentOccurrence.Visible && currentOccurrence.ReferencedDocumentDescriptor != null && currentOccurrence.ReferencedDocumentDescriptor.ReferencedDocumentType == DocumentTypeEnum.kPartDocumentObject && currentOccurrence.SurfaceBodies.Count > 0) { FieldNode outputNode = new FieldNode(currentOccurrence.Name); outputNode.Position = Utilities.ToBXDVector(currentOccurrence.Transformation.Translation); outputNode.Rotation = Utilities.QuaternionFromMatrix(currentOccurrence.Transformation); if (!exportedMeshes.Contains(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName)) { surfaceExporter.Reset(); surfaceExporter.Export(((PartDocument)currentOccurrence.ReferencedDocumentDescriptor.ReferencedDocument).ComponentDefinition, false, true); BXDAMesh.BXDASubMesh outputMesh = surfaceExporter.GetOutput().meshes.First(); exportedMeshes.Add(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); fieldDefinition.AddSubMesh(outputMesh); } outputNode.SubMeshID = exportedMeshes.IndexOf(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); ComponentPropertiesTabPage componentProperties = Program.MAINWINDOW.GetPropertySetsTabControl().GetParentTabPage(currentOccurrence.Name); if (componentProperties != null) { outputNode.PropertySetID = componentProperties.Name; PropertySet propertySet = fieldDefinition.GetPropertySets()[outputNode.PropertySetID]; if (propertySet.Collider.CollisionType == PropertySet.PropertySetCollider.PropertySetCollisionType.MESH && ((PropertySet.MeshCollider)propertySet.Collider).Convex) { if (!exportedColliders.Contains(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName)) { exportedColliders.Add(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); fieldDefinition.AddCollisionMesh(ConvexHullCalculator.GetHull(fieldDefinition.GetSubMesh(outputNode.SubMeshID))); } outputNode.CollisionMeshID = exportedColliders.IndexOf(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); } } pathBuilder.Clear(); foreach (ComponentOccurrence co in currentOccurrence.OccurrencePath) { pathBuilder.Append(co.Name + "/"); } pathBuilder.Length--; fieldDefinition.NodeGroup[pathBuilder.ToString()] = outputNode; } currentOccurrenceID++; } exporter.ReportProgress(100, "Export Successful!"); fieldDefinition.GetMeshOutput().WriteToFile(filePathTextBox.Text + "\\mesh.bxda"); BXDFProperties.WriteProperties(filePathTextBox.Text + "\\definition.bxdf", fieldDefinition); // Use the commented code below for debugging. /** / * string result; * FieldDefinition readDefinition = BXDFProperties.ReadProperties(filePathTextBox.Text + "\\definition.bxdf", out result); * MessageBox.Show(result); * /**/ }
/// <summary> /// Executes the actual exporting. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void exporter_DoWork(object sender, DoWorkEventArgs e) { string directory = FIELD_FOLDER + fieldNameTextBox.Text; // Create directory if it does not exist if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // Warn user of overwrite if it does exist else if (MessageBox.Show("A field with this name already exists. Continue?", "Overwrite Existing Field", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { e.Cancel = true; return; } FieldDefinition fieldDefinition = FieldDefinition.Factory(Guid.NewGuid(), Program.ASSEMBLY_DOCUMENT.DisplayName); foreach (PropertySet ps in Program.MAINWINDOW.GetPropertySetsTabControl().TranslateToPropertySets()) { fieldDefinition.AddPropertySet(ps); } SurfaceExporter surfaceExporter = new SurfaceExporter(); List <string> exportedMeshes = new List <string>(); List <string> exportedColliders = new List <string>(); StringBuilder pathBuilder = new StringBuilder(); int numOccurrences = Program.ASSEMBLY_DOCUMENT.ComponentDefinition.Occurrences.AllLeafOccurrences.Count; int progressPercent = 0; int currentOccurrenceID = 0; foreach (ComponentOccurrence currentOccurrence in Program.ASSEMBLY_DOCUMENT.ComponentDefinition.Occurrences.AllLeafOccurrences) { if (exporter.CancellationPending) { e.Cancel = true; return; } progressPercent = (int)Math.Floor((currentOccurrenceID / (double)numOccurrences) * 100.0); exporter.ReportProgress(progressPercent, "Exporting... " + progressPercent + "%"); if (currentOccurrence.Visible && currentOccurrence.ReferencedDocumentDescriptor != null && currentOccurrence.ReferencedDocumentDescriptor.ReferencedDocumentType == DocumentTypeEnum.kPartDocumentObject && currentOccurrence.SurfaceBodies.Count > 0) { FieldNode outputNode = new FieldNode(currentOccurrence.Name); outputNode.Position = Utilities.ToBXDVector(currentOccurrence.Transformation.Translation); outputNode.Rotation = Utilities.QuaternionFromMatrix(currentOccurrence.Transformation); if (!exportedMeshes.Contains(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName)) { surfaceExporter.Reset(); surfaceExporter.Export(((PartDocument)currentOccurrence.ReferencedDocumentDescriptor.ReferencedDocument).ComponentDefinition, false, true); BXDAMesh.BXDASubMesh outputMesh = surfaceExporter.GetOutput().meshes.First(); exportedMeshes.Add(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); fieldDefinition.AddSubMesh(outputMesh); } outputNode.SubMeshID = exportedMeshes.IndexOf(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); ComponentPropertiesTabPage componentProperties = Program.MAINWINDOW.GetPropertySetsTabControl().GetParentTabPage(currentOccurrence.Name); if (componentProperties != null) { outputNode.PropertySetID = componentProperties.Name; PropertySet propertySet = fieldDefinition.GetPropertySets()[outputNode.PropertySetID]; if (propertySet.Collider.CollisionType == PropertySet.PropertySetCollider.PropertySetCollisionType.MESH && ((PropertySet.MeshCollider)propertySet.Collider).Convex) { if (!exportedColliders.Contains(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName)) { exportedColliders.Add(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); var test = fieldDefinition.GetSubMesh(outputNode.SubMeshID); fieldDefinition.AddCollisionMesh(ConvexHullCalculator.GetHull(fieldDefinition.GetSubMesh(outputNode.SubMeshID))); } outputNode.CollisionMeshID = exportedColliders.IndexOf(currentOccurrence.ReferencedDocumentDescriptor.FullDocumentName); } } pathBuilder.Clear(); foreach (ComponentOccurrence co in currentOccurrence.OccurrencePath) { pathBuilder.Append(co.Name + "/"); } pathBuilder.Length--; fieldDefinition.NodeGroup[pathBuilder.ToString()] = outputNode; } currentOccurrenceID++; } exporter.ReportProgress(100, "Export Successful!"); fieldDefinition.GetMeshOutput().WriteToFile(directory + "\\mesh.bxda"); // Field data such as spawnpoints and gamepieces ExportFieldData(directory); // Property sets BXDFProperties.WriteProperties(directory + "\\definition.bxdf", fieldDefinition); // Open the export directory when done if (openFolderCheckBox.Checked) { Process.Start("explorer.exe", "/select, " + directory); } }