Exemplo n.º 1
0
 /// <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)
         );
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
 /// <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;
 }
Exemplo n.º 5
0
    //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;
    }