public override void Clean(IProgressMonitor monitor, CombineEntry entry) { base.Clean(monitor, entry); CProject project = entry as CProject; if (project == null) { return; } StringBuilder cleanFiles = new StringBuilder(); foreach (ProjectFile file in project.ProjectFiles) { if (file.BuildAction == BuildAction.Compile) { cleanFiles.Append(Path.ChangeExtension(file.Name, ".o") + " "); cleanFiles.Append(Path.ChangeExtension(file.Name, ".d") + " "); } } ProcessWrapper p = Runtime.ProcessService.StartProcess("rm", cleanFiles.ToString(), null, null); p.WaitForExit(); p.Close(); }
void Next(T value, int index) { T[] vs = values; int len = vs.Length; ulong[] ne = nonempty; lock (this) { int ac = activeCount; if (!HasValue(ne, index)) { activeCount = ++ac; SetHasValue(ne, index); } vs[index] = value; if (ac != len) { return; } CombineEntry ce = new CombineEntry(); ce.array = new T[len]; ce.index = index; Array.Copy(vs, 0, ce.array, 0, len); q.OfferRef(ref ce); } Drain(); }
public static void _CombineMeshes() { CombineEntry[] combineEntries = new CombineEntry[Selection.transforms.Length]; for (int i = 0; i < Selection.transforms.Length; i++) { Transform trs = Selection.transforms[i]; combineEntries[i] = new CombineEntry(trs.GetComponent <MeshFilter>(), trs); } GameObject outputGo = CombineMeshes.Instance.outputGo; CombineMode combineMode = CombineMeshes.Instance.combineMode; bool autoSetMaterial = CombineMeshes.Instance.autoSetMaterial; bool autoSetColliders = CombineMeshes.Instance.autoSetColliders; bool shouldMakeAsset = CombineMeshes.Instance.shouldMakeAsset; string saveAssetAtPath = CombineMeshes.Instance.saveAssetAtPath; CombineMeshes combineMeshes = new GameObject().AddComponent <CombineMeshes>(); combineMeshes.outputGo = outputGo; combineMeshes.combineMode = combineMode; combineMeshes.autoSetMaterial = autoSetMaterial; combineMeshes.autoSetColliders = autoSetColliders; combineMeshes.shouldMakeAsset = shouldMakeAsset; combineMeshes.saveAssetAtPath = saveAssetAtPath; combineMeshes.combineEntries = combineEntries; combineMeshes.OnEnable(); DestroyImmediate(combineMeshes.gameObject); }
// This seems to be the best place to place this code public override void SetNeedsBuilding (CombineEntry entry, bool val) { base.SetNeedsBuilding (entry, val); filesPerLanguage.Clear (); Project project = entry as Project; if (project == null) return; foreach (ProjectFile file in project.ProjectFiles) { if (file.Subtype != Subtype.Code) continue; for (int i = 0; i < SupportedExtensions.GetLength (0); i++) { if (Path.GetExtension (file.Name).ToUpper ().Equals (SupportedExtensions[i,1])) { string language = SupportedExtensions[i,0]; if (!filesPerLanguage.ContainsKey (language)) filesPerLanguage.Add (language, new List<string> ()); filesPerLanguage[language].Add (file.Name); break; } } } StringBuilder builder = new StringBuilder (); string tagsDirectory = Path.Combine (entry.BaseDirectory, ".tags"); string arguments = string.Empty; object[] nodes = AddinManager.GetExtensionObjects ("/CTagsCompletion/Specialization"); if (!Directory.Exists (tagsDirectory)) Directory.CreateDirectory (tagsDirectory); foreach (KeyValuePair<string, List<string>> kvp in filesPerLanguage) { foreach (ITagsSpecialization node in nodes) { if (node.Language.Equals (kvp.Key)) arguments = node.CTagsArguments; } builder.AppendFormat ("-f {0}TAGS {1}", kvp.Key, arguments); foreach (string file in kvp.Value) { builder.Append (" " + file); } try { ProcessWrapper p = Runtime.ProcessService.StartProcess ( "ctags", builder.ToString (), tagsDirectory, null); p.WaitForExit (); } catch (Exception ex) { throw new Exception ("Could not create tags file", ex); } builder.Remove (0, builder.Length); } }
private void PopulateCombo() { IconService service = (IconService)ServiceManager.GetService(typeof(IconService)); Combine cmb = IdeApp.ProjectOperations.CurrentOpenCombine; if (cmb != null) { CombineEntry selected = IdeApp.ProjectOperations.CurrentSelectedCombineEntry; TreeIter activeIter = TreeIter.Zero; foreach (Project proj in cmb.Entries) { Gdk.Pixbuf pixbuf = null; if (proj is DotNetProject && (proj as DotNetProject).LanguageBinding == null) { pixbuf = MonoDevelop.Core.Gui.Services.Resources.GetIcon(Stock.DialogError); } else { string icon = service.GetImageForProjectType(proj.ProjectType); pixbuf = MonoDevelop.Core.Gui.Services.Resources.GetIcon(icon); } TreeIter iter = store.AppendValues(pixbuf, "<b>" + proj.Name + "</b>", proj, null); foreach (ProjectFile file in proj.ProjectFiles) { if (file.Subtype != Subtype.Directory) { continue; } pixbuf = MonoDevelop.Core.Gui.Services.Resources.GetIcon(Stock.Directory); store.AppendValues(iter, pixbuf, file.Name, proj, file); } if (proj == selected) { activeIter = iter; } } if (activeIter.Equals(TreeIter.Zero)) { if (store.GetIterFirst(out activeIter)) { this.SetActiveIter(activeIter); } } else { this.SetActiveIter(activeIter); } } }
public override ICompilerResult Build (IProgressMonitor monitor, CombineEntry entry) { CProject project = entry as CProject; if (project == null) return base.Build (monitor, entry); foreach (CProject p in project.DependedOnProjects ()) { p.Build (monitor, true); } if (((CProjectConfiguration)project.ActiveConfiguration).CompileTarget != CompileTarget.Bin) project.WriteMDPkgPackage (); return base.Build (monitor, entry); }
public override void Clean (IProgressMonitor monitor, CombineEntry entry) { base.Clean (monitor, entry); CProject project = entry as CProject; if (project == null) return; StringBuilder cleanFiles = new StringBuilder (); foreach (ProjectFile file in project.ProjectFiles) { if (file.BuildAction == BuildAction.Compile) { cleanFiles.Append (Path.ChangeExtension (file.Name, ".o") + " "); cleanFiles.Append (Path.ChangeExtension (file.Name, ".d") + " "); } } ProcessWrapper p = Runtime.ProcessService.StartProcess ("rm", cleanFiles.ToString (), null, null); p.WaitForExit (); p.Close (); }
public static void _CombineCubes() { CombineEntry[] combineEntries = new CombineEntry[Selection.transforms.Length]; for (int i = 0; i < Selection.transforms.Length; i++) { Transform trs = Selection.transforms[i]; combineEntries[i] = new CombineEntry(trs.GetComponent <MeshFilter>(), trs); } GameObject outputGo = CombineCubes.Instance.outputGo; bool autoAddRigidbody = CombineCubes.Instance.autoAddRigidbody; bool autoSetColliders = CombineCubes.Instance.autoSetColliders; CombineCubes combineCubes = new GameObject().AddComponent <CombineCubes>(); combineCubes.outputGo = outputGo; combineCubes.combineEntries = combineEntries; combineCubes.autoAddRigidbody = autoAddRigidbody; combineCubes.autoSetColliders = autoSetColliders; combineCubes.OnEnable(); DestroyImmediate(combineCubes.gameObject); }
public override ICompilerResult Build(IProgressMonitor monitor, CombineEntry entry) { CProject project = entry as CProject; if (project == null) { return(base.Build(monitor, entry)); } foreach (CProject p in project.DependedOnProjects()) { p.Build(monitor, true); } if (((CProjectConfiguration)project.ActiveConfiguration).CompileTarget != CompileTarget.Bin) { project.WriteMDPkgPackage(); } return(base.Build(monitor, entry)); }
public void OnEnable() { if (combineEntries.Length == 0) { return; } KeyValuePair <Mesh, Transform>[] meshesAndTransforms = new KeyValuePair <Mesh, Transform> [combineEntries.Length]; CombineInstance[] combineInstances = new CombineInstance[combineEntries.Length]; for (int i = 0; i < combineEntries.Length; i++) { CombineEntry combineEntry = combineEntries[i]; meshesAndTransforms[i] = new KeyValuePair <Mesh, Transform>(combineEntry.meshFilter.sharedMesh, combineEntry.trs); CombineInstance combineInstance = combineInstances[i]; combineInstance.mesh = Instantiate(combineEntry.meshFilter.sharedMesh); combineInstance.transform = combineEntry.trs.localToWorldMatrix; combineEntry.trs.gameObject.SetActive(false); combineInstances[i] = combineInstance; } for (int i = 0; i < meshesAndTransforms.Length; i++) { KeyValuePair <Mesh, Transform> meshAndTransform = meshesAndTransforms[i]; for (int i2 = 0; i2 < meshesAndTransforms.Length; i2++) { KeyValuePair <Mesh, Transform> otherMeshAndTransform = meshesAndTransforms[i2]; Vector3 toOtherTrs = otherMeshAndTransform.Value.position - meshAndTransform.Value.position; if (toOtherTrs.sqrMagnitude == 1) { MeshExtensions.MeshTriangle[] meshTriangles = MeshExtensions.GetMeshTriangles(new KeyValuePair <Mesh, Transform>[1] { meshAndTransform }); MeshExtensions.MeshTriangle[] otherMeshTriangles = MeshExtensions.GetMeshTriangles(new KeyValuePair <Mesh, Transform>[1] { otherMeshAndTransform }); int toOtherTrsXSign = MathfExtensions.Sign(toOtherTrs.x); int toOtherTrsYSign = MathfExtensions.Sign(toOtherTrs.y); int toOtherTrsZSign = MathfExtensions.Sign(toOtherTrs.z); if (toOtherTrsXSign != 0) { for (int i3 = 0; i3 < meshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.x - meshAndTransform.Value.position.x) == toOtherTrsXSign && Mathf.Sign(meshTriangle.point2.x - meshAndTransform.Value.position.x) == toOtherTrsXSign && Mathf.Sign(meshTriangle.point3.x - meshAndTransform.Value.position.x) == toOtherTrsXSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < meshTriangles.Length; i4++) { if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { meshTriangles[i4].triangleIndex--; } } } } for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign && Mathf.Sign(meshTriangle.point2.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign && Mathf.Sign(meshTriangle.point3.x - otherMeshAndTransform.Value.position.x) == -toOtherTrsXSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++) { if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { otherMeshTriangles[i4].triangleIndex--; } } } } } else if (toOtherTrsYSign != 0) { for (int i3 = 0; i3 < meshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.y - meshAndTransform.Value.position.y) == toOtherTrsYSign && Mathf.Sign(meshTriangle.point2.y - meshAndTransform.Value.position.y) == toOtherTrsYSign && Mathf.Sign(meshTriangle.point3.y - meshAndTransform.Value.position.y) == toOtherTrsYSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < meshTriangles.Length; i4++) { if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { meshTriangles[i4].triangleIndex--; } } } } for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign && Mathf.Sign(meshTriangle.point2.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign && Mathf.Sign(meshTriangle.point3.y - otherMeshAndTransform.Value.position.y) == -toOtherTrsYSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++) { if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { otherMeshTriangles[i4].triangleIndex--; } } } } } else { for (int i3 = 0; i3 < meshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = meshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.z - meshAndTransform.Value.position.z) == toOtherTrsZSign && Mathf.Sign(meshTriangle.point2.z - meshAndTransform.Value.position.z) == toOtherTrsZSign && Mathf.Sign(meshTriangle.point3.z - meshAndTransform.Value.position.z) == toOtherTrsZSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < meshTriangles.Length; i4++) { if (meshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { meshTriangles[i4].triangleIndex--; } } } } for (int i3 = 0; i3 < otherMeshTriangles.Length; i3++) { MeshExtensions.MeshTriangle meshTriangle = otherMeshTriangles[i3]; if (Mathf.Sign(meshTriangle.point1.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign && Mathf.Sign(meshTriangle.point2.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign && Mathf.Sign(meshTriangle.point3.z - otherMeshAndTransform.Value.position.z) == -toOtherTrsZSign) { meshTriangle.RemoveFromMesh(); for (int i4 = 0; i4 < otherMeshTriangles.Length; i4++) { if (otherMeshTriangles[i4].triangleIndex > meshTriangle.triangleIndex) { otherMeshTriangles[i4].triangleIndex--; } } } } } } } } MeshFilter meshFilter; Rigidbody rigid = null; if (outputGo == null) { outputGo = new GameObject(); meshFilter = outputGo.AddComponent <MeshFilter>(); outputGo.AddComponent <MeshRenderer>(); } else { meshFilter = outputGo.GetComponent <MeshFilter>(); if (meshFilter == null) { meshFilter = outputGo.AddComponent <MeshFilter>(); } if (autoAddRigidbody) { rigid = outputGo.GetComponent <Rigidbody>(); } } if (autoAddRigidbody) { if (rigid == null) { rigid = outputGo.AddComponent <Rigidbody>(); } rigid.mass = combineEntries.Length; } if (autoSetColliders) { Collider[] colliders = outputGo.GetComponents <Collider>(); for (int i2 = 0; i2 < colliders.Length; i2++) { Collider collider = colliders[i2]; DestroyImmediate(collider); } for (int i = 0; i < combineEntries.Length; i++) { CombineEntry combineEntry = combineEntries[i]; BoxCollider boxCollider = outputGo.AddComponent <BoxCollider>(); Transform outputTrs = outputGo.GetComponent <Transform>(); boxCollider.center = outputTrs.InverseTransformPoint(combineEntry.trs.position); boxCollider.size = outputTrs.InverseTransformPoint(combineEntry.trs.lossyScale); } } meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.CombineMeshes(combineInstances); // for (int i = 0; i < combineEntries.Length; i ++) // DestroyImmediate(combineEntries[i].trs.gameObject); outputGo = null; combineEntries = new CombineEntry[0]; }
// This seems to be the best place to place this code public override void SetNeedsBuilding(CombineEntry entry, bool val) { base.SetNeedsBuilding(entry, val); filesPerLanguage.Clear(); Project project = entry as Project; if (project == null) { return; } foreach (ProjectFile file in project.ProjectFiles) { if (file.Subtype != Subtype.Code) { continue; } for (int i = 0; i < SupportedExtensions.GetLength(0); i++) { if (Path.GetExtension(file.Name).ToUpper().Equals(SupportedExtensions[i, 1])) { string language = SupportedExtensions[i, 0]; if (!filesPerLanguage.ContainsKey(language)) { filesPerLanguage.Add(language, new List <string> ()); } filesPerLanguage[language].Add(file.Name); break; } } } StringBuilder builder = new StringBuilder(); string tagsDirectory = Path.Combine(entry.BaseDirectory, ".tags"); string arguments = string.Empty; object[] nodes = AddinManager.GetExtensionObjects("/CTagsCompletion/Specialization"); if (!Directory.Exists(tagsDirectory)) { Directory.CreateDirectory(tagsDirectory); } foreach (KeyValuePair <string, List <string> > kvp in filesPerLanguage) { foreach (ITagsSpecialization node in nodes) { if (node.Language.Equals(kvp.Key)) { arguments = node.CTagsArguments; } } builder.AppendFormat("-f {0}TAGS {1}", kvp.Key, arguments); foreach (string file in kvp.Value) { builder.Append(" " + file); } try { ProcessWrapper p = Runtime.ProcessService.StartProcess( "ctags", builder.ToString(), tagsDirectory, null); p.WaitForExit(); } catch (Exception ex) { throw new Exception("Could not create tags file", ex); } builder.Remove(0, builder.Length); } }
public void OnEnable() { if (combineEntries.Length == 0) { return; } if (combineMode == CombineMode.Default) { CombineInstance[] combineInstances = new CombineInstance[combineEntries.Length]; for (int i = 0; i < combineEntries.Length; i++) { CombineEntry combineEntry = combineEntries[i]; CombineInstance combineInstance = combineInstances[i]; combineInstance.mesh = Instantiate(combineEntry.meshFilter.sharedMesh); combineInstance.transform = combineEntry.trs.localToWorldMatrix; combineInstances[i] = combineInstance; } if (outputGo == null) { outputGo = new GameObject(); } MeshFilter meshFilter = outputGo.GetComponent <MeshFilter>(); if (meshFilter == null) { meshFilter = outputGo.AddComponent <MeshFilter>(); } MeshRenderer meshRenderer = outputGo.GetComponent <MeshRenderer>(); if (meshRenderer == null) { meshRenderer = outputGo.AddComponent <MeshRenderer>(); } meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.CombineMeshes(combineInstances); if (autoSetMaterial) { meshRenderer.sharedMaterial = combineEntries[0].meshFilter.GetComponent <MeshRenderer>().sharedMaterial; } if (autoSetColliders) { Collider[] colliders = outputGo.GetComponents <Collider>(); for (int i2 = 0; i2 < colliders.Length; i2++) { Collider collider = colliders[i2]; DestroyImmediate(collider); } for (int i = 0; i < combineEntries.Length; i++) { CombineEntry combineEntry = combineEntries[i]; BoxCollider boxCollider = outputGo.AddComponent <BoxCollider>(); Transform outputTrs = outputGo.GetComponent <Transform>(); boxCollider.center = outputTrs.InverseTransformPoint(combineEntry.trs.position); boxCollider.size = outputTrs.InverseTransformPoint(combineEntry.trs.lossyScale); } } #if UNITY_EDITOR if (shouldMakeAsset) { if (autoRenameAssetPath) { string newAssetPath = saveAssetAtPath; while (File.Exists(newAssetPath)) { newAssetPath = newAssetPath.Replace(".asset", "1.asset"); } } AssetDatabase.CreateAsset(meshFilter.sharedMesh, saveAssetAtPath); AssetDatabase.SaveAssets(); } #endif } combineEntries = new CombineEntry[0]; }