Exemple #1
0
        private void PopSkinnedDecalsMeshRenderer()
        {
            SkinnedDecalsMeshRenderer renderer = this.m_SkinnedDecalsMeshRenderers[this.m_SkinnedDecalsMeshRenderers.Count - 1];

            if (Application.isPlaying)
            {
                Destroy(renderer.SkinnedMeshRenderer.sharedMesh);
                Destroy(renderer.gameObject);
            }
            this.m_SkinnedDecalsMeshRenderers.RemoveAt(this.m_SkinnedDecalsMeshRenderers.Count - 1);
        }
Exemple #2
0
        private void PushSkinnedDecalsMeshRenderer()
        {
            GameObject obj2      = new GameObject("Decals Mesh Renderer");
            Transform  transform = obj2.transform;

            transform.parent        = base.transform;
            transform.localPosition = Vector3.zero;
            transform.localRotation = Quaternion.identity;
            transform.localScale    = Vector3.one;
            SkinnedDecalsMeshRenderer item = this.AddSkinnedDecalsMeshRendererComponentToGameObject(obj2);

            item.SkinnedMeshRenderer.material = base.CurrentMaterial;
            this.m_SkinnedDecalsMeshRenderers.Add(item);
        }
Exemple #3
0
        public override void InitializeDecalsMeshRenderers()
        {
            this.m_SkinnedDecalsMeshRenderers.Clear();
            Transform cachedTransform = base.CachedTransform;

            for (int i = 0; i < cachedTransform.childCount; i++)
            {
                SkinnedDecalsMeshRenderer component = cachedTransform.GetChild(i).GetComponent <SkinnedDecalsMeshRenderer>();
                if (component != null)
                {
                    this.m_SkinnedDecalsMeshRenderers.Add(component);
                }
            }
        }
Exemple #4
0
        public override void UpdateVertexColors(SkinnedDecalsMesh a_DecalsMesh)
        {
            base.UpdateVertexColors(a_DecalsMesh);
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < this.m_SkinnedDecalsMeshRenderers.Count; i++)
            {
                SkinnedDecalsMeshRenderer renderer = this.m_SkinnedDecalsMeshRenderers[i];
                Mesh sharedMesh = renderer.SkinnedMeshRenderer.sharedMesh;
                num2 = (num2 + sharedMesh.vertexCount) - 1;
                Color[] colorArray = a_DecalsMesh.PreservedVertexColorArrays[i];
                CopyListRangeToArray <Color>(ref colorArray, a_DecalsMesh.VertexColors, num, num2);
                sharedMesh.colors = colorArray;
                num = num2;
            }
        }
Exemple #5
0
        public override void UpdateProjectedUVs(SkinnedDecalsMesh a_DecalsMesh)
        {
            base.UpdateProjectedUVs(a_DecalsMesh);
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < this.m_SkinnedDecalsMeshRenderers.Count; i++)
            {
                SkinnedDecalsMeshRenderer renderer = this.m_SkinnedDecalsMeshRenderers[i];
                Mesh sharedMesh = renderer.SkinnedMeshRenderer.sharedMesh;
                num2 = (num2 + sharedMesh.vertexCount) - 1;
                Vector2[] vectorArray = a_DecalsMesh.PreservedProjectedUVArrays[i];
                CopyListRangeToArray <Vector2>(ref vectorArray, a_DecalsMesh.UVs, num, num2);
                sharedMesh.uv = vectorArray;
                num           = num2;
            }
        }
Exemple #6
0
        private Mesh MeshOfSkinnedDecalsMeshRenderer(SkinnedDecalsMeshRenderer a_SkinnedDecalsMeshRenderer)
        {
            Mesh sharedMesh;

            if (a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.sharedMesh != null)
            {
                sharedMesh = a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.sharedMesh;
                sharedMesh.Clear();
            }
            else
            {
                sharedMesh = new Mesh {
                    name = "Skinned Decal Mesh"
                };
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.sharedMesh = sharedMesh;
            }
            return(sharedMesh);
        }
Exemple #7
0
        private void ApplyToSkinnedDecalsMeshRenderer(SkinnedDecalsMeshRenderer a_SkinnedDecalsMeshRenderer, SkinnedDecalsMesh a_SkinnedDecalsMesh)
        {
            Mesh mesh = this.MeshOfSkinnedDecalsMeshRenderer(a_SkinnedDecalsMeshRenderer);

            mesh.Clear();
            if (!Edition.IsDX11)
            {
                mesh.MarkDynamic();
            }
            if (a_SkinnedDecalsMesh.OriginalVertices.Count == 0)
            {
                mesh.vertices = new Vector3[1];
                if (base.CurrentNormalsMode != NormalsMode.None)
                {
                    mesh.normals = new Vector3[1];
                }
                if (base.CurrentTangentsMode != TangentsMode.None)
                {
                    mesh.tangents = new Vector4[1];
                }
                if (base.UseVertexColors)
                {
                    mesh.colors = new Color[1];
                }
                mesh.uv = new Vector2[1];
                if (base.CurrentUV2Mode != UV2Mode.None)
                {
                    mesh.uv2 = new Vector2[1];
                }
                mesh.boneWeights = new BoneWeight[1];
                mesh.bindposes   = new Matrix4x4[1];
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.bones               = new Transform[] { a_SkinnedDecalsMeshRenderer.transform };
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.localBounds         = mesh.bounds;
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.updateWhenOffscreen = false;
            }
            else
            {
                mesh.vertices = a_SkinnedDecalsMesh.OriginalVertices.ToArray();
                if (base.CurrentNormalsMode != NormalsMode.None)
                {
                    mesh.normals = a_SkinnedDecalsMesh.Normals.ToArray();
                }
                if (base.CurrentTangentsMode != TangentsMode.None)
                {
                    mesh.tangents = a_SkinnedDecalsMesh.Tangents.ToArray();
                }
                if (base.UseVertexColors)
                {
                    Color[] colorArray = a_SkinnedDecalsMesh.VertexColors.ToArray();
                    if (a_SkinnedDecalsMesh.PreserveVertexColorArrays)
                    {
                        a_SkinnedDecalsMesh.PreservedVertexColorArrays.Add(colorArray);
                    }
                    mesh.colors = colorArray;
                }
                Vector2[] item = a_SkinnedDecalsMesh.UVs.ToArray();
                if (a_SkinnedDecalsMesh.PreserveProjectedUVArrays)
                {
                    a_SkinnedDecalsMesh.PreservedProjectedUVArrays.Add(item);
                }
                mesh.uv = item;
                if (base.CurrentUV2Mode != UV2Mode.None)
                {
                    Vector2[] vectorArray2 = a_SkinnedDecalsMesh.UV2s.ToArray();
                    if (a_SkinnedDecalsMesh.PreserveProjectedUV2Arrays)
                    {
                        a_SkinnedDecalsMesh.PreservedProjectedUV2Arrays.Add(vectorArray2);
                    }
                    mesh.uv2 = vectorArray2;
                }
                mesh.boneWeights = a_SkinnedDecalsMesh.BoneWeights.ToArray();
                mesh.triangles   = a_SkinnedDecalsMesh.Triangles.ToArray();
                mesh.bindposes   = a_SkinnedDecalsMesh.BindPoses.ToArray();
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.bones               = a_SkinnedDecalsMesh.Bones.ToArray();
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.localBounds         = mesh.bounds;
                a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.updateWhenOffscreen = true;
            }
        }
Exemple #8
0
 public override void UpdateDecalsMeshes(SkinnedDecalsMesh a_DecalsMesh)
 {
     base.UpdateDecalsMeshes(a_DecalsMesh);
     if (a_DecalsMesh.Vertices.Count <= 0xffff)
     {
         if (this.m_SkinnedDecalsMeshRenderers.Count == 0)
         {
             this.PushSkinnedDecalsMeshRenderer();
         }
         else if (this.m_SkinnedDecalsMeshRenderers.Count > 1)
         {
             while (this.m_SkinnedDecalsMeshRenderers.Count > 1)
             {
                 this.PopSkinnedDecalsMeshRenderer();
             }
         }
         SkinnedDecalsMeshRenderer renderer = this.m_SkinnedDecalsMeshRenderers[0];
         this.ApplyToSkinnedDecalsMeshRenderer(renderer, a_DecalsMesh);
     }
     else
     {
         int num  = 0;
         int num2 = 0;
         while (true)
         {
             if (num2 >= a_DecalsMesh.Projectors.Count)
             {
                 while ((num + 1) < this.m_SkinnedDecalsMeshRenderers.Count)
                 {
                     this.PopSkinnedDecalsMeshRenderer();
                 }
                 break;
             }
             GenericDecalProjectorBase base2 = a_DecalsMesh.Projectors[num2];
             GenericDecalProjectorBase base3 = a_DecalsMesh.Projectors[num2];
             if (num >= this.m_SkinnedDecalsMeshRenderers.Count)
             {
                 this.PushSkinnedDecalsMeshRenderer();
             }
             SkinnedDecalsMeshRenderer renderer2 = this.m_SkinnedDecalsMeshRenderers[num];
             int num3 = 0;
             int num4 = num2;
             GenericDecalProjectorBase base4 = a_DecalsMesh.Projectors[num2];
             while (true)
             {
                 if ((num2 >= a_DecalsMesh.Projectors.Count) || ((num3 + base4.DecalsMeshVertexCount) > 0xffff))
                 {
                     if (num4 != num2)
                     {
                         this.ApplyToSkinnedDecalsMeshRenderer(renderer2, a_DecalsMesh, base2, base3);
                         num++;
                     }
                     num2++;
                     break;
                 }
                 base3 = base4;
                 num3 += base4.DecalsMeshVertexCount;
                 num2++;
                 if (num2 < a_DecalsMesh.Projectors.Count)
                 {
                     base4 = a_DecalsMesh.Projectors[num2];
                 }
             }
         }
     }
     base.SetDecalsMeshesAreNotOptimized();
 }
Exemple #9
0
        private void ApplyToSkinnedDecalsMeshRenderer(SkinnedDecalsMeshRenderer a_SkinnedDecalsMeshRenderer, SkinnedDecalsMesh a_SkinnedDecalsMesh, GenericDecalProjectorBase a_FirstProjector, GenericDecalProjectorBase a_LastProjector)
        {
            int  decalsMeshLowerVertexIndex   = a_FirstProjector.DecalsMeshLowerVertexIndex;
            int  decalsMeshUpperVertexIndex   = a_LastProjector.DecalsMeshUpperVertexIndex;
            int  decalsMeshLowerTriangleIndex = a_FirstProjector.DecalsMeshLowerTriangleIndex;
            int  decalsMeshUpperTriangleIndex = a_LastProjector.DecalsMeshUpperTriangleIndex;
            Mesh mesh = this.MeshOfSkinnedDecalsMeshRenderer(a_SkinnedDecalsMeshRenderer);

            mesh.Clear();
            if (!Edition.IsDX11)
            {
                mesh.MarkDynamic();
            }
            Vector3[] vectorArray = new Vector3[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
            CopyListRangeToArray <Vector3>(ref vectorArray, a_SkinnedDecalsMesh.OriginalVertices, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
            mesh.vertices = vectorArray;
            BoneWeight[] weightArray = new BoneWeight[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
            CopyListRangeToArray <BoneWeight>(ref weightArray, a_SkinnedDecalsMesh.BoneWeights, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
            mesh.boneWeights = weightArray;
            int[] numArray = new int[(decalsMeshUpperTriangleIndex - decalsMeshLowerTriangleIndex) + 1];
            CopyListRangeToArray <int>(ref numArray, a_SkinnedDecalsMesh.Triangles, decalsMeshLowerTriangleIndex, decalsMeshUpperTriangleIndex);
            for (int i = 0; i < numArray.Length; i++)
            {
                numArray[i] -= decalsMeshLowerVertexIndex;
            }
            mesh.triangles = numArray;
            Vector2[] vectorArray2 = new Vector2[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
            CopyListRangeToArray <Vector2>(ref vectorArray2, a_SkinnedDecalsMesh.UVs, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
            if (a_SkinnedDecalsMesh.PreserveProjectedUVArrays)
            {
                a_SkinnedDecalsMesh.PreservedProjectedUVArrays.Add(vectorArray2);
            }
            mesh.uv = vectorArray2;
            if ((base.CurrentUV2Mode == UV2Mode.None) || (base.CurrentUV2Mode == UV2Mode.Lightmapping))
            {
                mesh.uv2 = null;
            }
            else
            {
                Vector2[] vectorArray3 = new Vector2[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
                CopyListRangeToArray <Vector2>(ref vectorArray3, a_SkinnedDecalsMesh.UV2s, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
                if (a_SkinnedDecalsMesh.PreserveProjectedUV2Arrays)
                {
                    a_SkinnedDecalsMesh.PreservedProjectedUV2Arrays.Add(vectorArray3);
                }
                mesh.uv2 = vectorArray3;
            }
            if (base.CurrentNormalsMode == NormalsMode.None)
            {
                mesh.normals = null;
            }
            else
            {
                Vector3[] vectorArray4 = new Vector3[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
                CopyListRangeToArray <Vector3>(ref vectorArray4, a_SkinnedDecalsMesh.Normals, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
                mesh.normals = vectorArray4;
            }
            if (base.CurrentTangentsMode == TangentsMode.None)
            {
                mesh.tangents = null;
            }
            else
            {
                Vector4[] vectorArray5 = new Vector4[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
                CopyListRangeToArray <Vector4>(ref vectorArray5, a_SkinnedDecalsMesh.Tangents, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
                mesh.tangents = vectorArray5;
            }
            if (!base.UseVertexColors)
            {
                mesh.colors = null;
            }
            else
            {
                Color[] colorArray = new Color[(decalsMeshUpperVertexIndex - decalsMeshLowerVertexIndex) + 1];
                CopyListRangeToArray <Color>(ref colorArray, a_SkinnedDecalsMesh.VertexColors, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex);
                if (a_SkinnedDecalsMesh.PreserveVertexColorArrays)
                {
                    a_SkinnedDecalsMesh.PreservedVertexColorArrays.Add(colorArray);
                }
                mesh.colors = colorArray;
            }
            mesh.bindposes = a_SkinnedDecalsMesh.BindPoses.ToArray();
            Transform[] transformArray = a_SkinnedDecalsMesh.Bones.ToArray();
            a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.bones               = transformArray;
            a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.localBounds         = mesh.bounds;
            a_SkinnedDecalsMeshRenderer.SkinnedMeshRenderer.updateWhenOffscreen = true;
        }