示例#1
0
        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();
        }
示例#3
0
    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 ();
		}
示例#8
0
    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);
    }
示例#9
0
        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));
        }
示例#10
0
    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);
            }
        }
示例#12
0
    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];
    }