/// <summary> /// Sends a subscribe event through the mesh. /// </summary> /// <param name="subscription"></param> /// <param name="peer">The node to notify.</param> public static void NotifySubscribe(this Subscription subscription, MeshMember peer) { // Send it as a command peer.Send( MeshEmitterEvent.Acquire(MeshEventType.Subscribe, subscription.ContractKey, subscription.Channel) ); }
public override bool Equals(object obj) { if (!(obj is MeshMember)) { return(false); } MeshMember mM = (MeshMember)obj; if (this.SmoothingGroup == null) { if (this.Vertex == mM.Vertex && this.Triangle == mM.Triangle && this.Material == mM.Material) { return(true); } return(false); } else { if (this.Vertex == mM.Vertex && this.Material == mM.Material && this.SmoothingGroup == mM.SmoothingGroup) { return(true); } return(false); } }
public bool Equals(MeshMember mM) { if (this.SmoothingGroup == null) { if (this.Vertex == mM.Vertex && this.Triangle == mM.Triangle && this.Material == mM.Material) { return(true); } return(false); } else { if (this.Vertex == mM.Vertex && this.Material == mM.Material && this.SmoothingGroup == mM.SmoothingGroup) { return(true); } return(false); } }
/// <summary> /// Creates a new instance of the <see cref="ClusterEventArgs"/> object. /// </summary> /// <param name="n">Node that joins or leaves the cluster.</param> public ClusterEventArgs(MeshMember n) { Node = n; }
//Fills Mesh With OWN AND CHILDS vertices and triangles public void FillMesh(Transform transform, bool destroyChildsFirst) { if (destroyChildsFirst) { destroyAllSubmeshContainer(transform); } mR = transform.gameObject.GetOrAddComponent <MeshRenderer>(); mC = transform.gameObject.GetOrAddComponent <MeshCollider>(); mF = transform.gameObject.GetOrAddComponent <MeshFilter>(); Stopwatch sw = new Stopwatch(); sw.Start(); if (relatedUnityMesh != null) { relatedUnityMesh.Clear(); } else { relatedUnityMesh = new Mesh(); } relatedUnityMesh.name = "GeneratedModularMesh"; tmpMaterialTriangles = CollectTriangles(); triangleIndices.Clear(); test.Clear(); materials = tmpMaterialTriangles.Keys.ToArray(); foreach (KeyValuePair <Material, List <Triangle> > item in tmpMaterialTriangles) { triangleIndices.Add(triangleIndices.Count, new List <int>()); for (int i = 0; i < item.Value.Count; i++) //Loop over each Triangle in list { Vertex[] triangleVertices = item.Value[i].Vertices; for (int j = 0; j < 3; j++) { if (item.Value[i].SmoothingGroups.Count == 0) { MeshMember member = new MeshMember(triangleVertices[j], item.Value[i], item.Key, null); if (!test.ContainsKey(member)) { test.Add(member, test.Count); } triangleIndices[triangleIndices.Count - 1].Add(test[member]); } else { for (int k = 0; k < item.Value[i].SmoothingGroups.Count; k++) { MeshMember member = new MeshMember(triangleVertices[j], item.Value[i], item.Key, item.Value[i].SmoothingGroups[k]); if (!test.ContainsKey(member)) { test.Add(member, test.Count); } triangleIndices[triangleIndices.Count - 1].Add(test[member]); } } } } } Vector3[] vertexPositions = new Vector3[test.Count]; Vector3[] vertexNormals = new Vector3[test.Count]; Vector4[] vertexTangents = new Vector4[test.Count]; Vector2[] vertexUVs = new Vector2[test.Count]; foreach (KeyValuePair <MeshMember, int> kV in test) { vertexPositions[kV.Value] = kV.Key.Vertex.Position - transform.position; // DONE if (kV.Key.SmoothingGroup == null) { vertexNormals[kV.Value] = kV.Key.Triangle.Normal; } else { vertexNormals[kV.Value] = kV.Key.SmoothingGroup.Normal(kV.Key.Vertex); } vertexUVs[kV.Value] = new Vector2(kV.Key.Vertex.X, kV.Key.Vertex.Y); // TODO } mR.materials = materials; relatedUnityMesh.subMeshCount = materials.Length; relatedUnityMesh.vertices = vertexPositions; relatedUnityMesh.normals = vertexNormals; relatedUnityMesh.tangents = vertexTangents; relatedUnityMesh.uv = vertexUVs; foreach (KeyValuePair <int, List <int> > kV in triangleIndices) { relatedUnityMesh.SetTriangles(kV.Value.ToArray(), kV.Key); } relatedUnityMesh.RecalculateBounds(); relatedUnityMesh.RecalculateNormals(); // TODO: Check if this works mF.mesh = relatedUnityMesh; mC.sharedMesh = relatedUnityMesh; }