Esempio n. 1
0
 public BlockpartVisualizeInfo(ChunkPos i_pos, MeshVisualizeInfo i_meshVI, MeshType i_meshType, int i_materialID, byte i_meshRotation)
 {
     pos          = i_pos;
     meshInfo     = i_meshVI;
     meshType     = i_meshType;
     materialID   = i_materialID;
     meshRotation = i_meshRotation;
 }
Esempio n. 2
0
    public override bool Equals(object obj)
    {
        // Check for null values and compare run-time types.
        if (obj == null || GetType() != obj.GetType())
        {
            return(false);
        }

        MeshVisualizeInfo p = (MeshVisualizeInfo)obj;

        return((faceIndex == p.faceIndex) & (illumination == p.illumination) & (materialType == p.materialType));
    }
Esempio n. 3
0
    private void CreateBlockpartsRenderer(MeshVisualizeInfo mvi)
    {
        if (renderers.ContainsKey(mvi))
        {
            return;
        }
        var processingIndexes = new List <int>();

        for (int i = 0; i < blockVisualizersList.Count; i++)
        {
            if (blockVisualizersList[i].meshInfo == mvi)
            {
                processingIndexes.Add(i);
            }
        }

        int pcount = processingIndexes.Count;

        if (pcount > 0)
        {
            Mesh visibleMesh = new Mesh(), colliderMesh = new Mesh();
            INLINE_CombineMeshes(ref processingIndexes, ref visibleMesh, ref colliderMesh);
            GameObject g = new GameObject();
            //удаление копий вершин на стыках - отменено из-за uv

            var mf = g.AddComponent <MeshFilter>();
            mf.sharedMesh = visibleMesh;
            var mr = g.AddComponent <MeshRenderer>();
            mr.shadowCastingMode    = UnityEngine.Rendering.ShadowCastingMode.Off;
            mr.receiveShadows       = PoolMaster.shadowCasting;
            mr.lightProbeUsage      = UnityEngine.Rendering.LightProbeUsage.Off;
            mr.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
            if (!PoolMaster.useIlluminationSystem)
            {
                mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType);
            }
            else
            {
                mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination);
            }

            g.transform.parent = renderersHolders[mvi.faceIndex].transform;
            g.AddComponent <MeshCollider>().sharedMesh = colliderMesh;
            g.tag = BLOCK_COLLIDER_TAG;

            renderers.Add(mvi, g);
        }
    }
Esempio n. 4
0
    private void RedrawRenderer(MeshVisualizeInfo mvi)
    {
        GameObject g;

        renderers.TryGetValue(mvi, out g);
        if (g != null)
        {
            int n = blockVisualizersList.Count;
            if (n > 0)
            {
                var indexes = new List <int>();
                for (int i = 0; i < n; i++)
                {
                    if (blockVisualizersList[i].meshInfo == mvi)
                    {
                        indexes.Add(i);
                    }
                }

                n = indexes.Count;
                if (n > 0)
                {
                    Mesh visibleMesh = new Mesh(), colliderMesh = new Mesh();
                    INLINE_CombineMeshes(ref indexes, ref visibleMesh, ref colliderMesh);
                    g.GetComponent <MeshFilter>().sharedMesh   = visibleMesh;
                    g.GetComponent <MeshCollider>().sharedMesh = colliderMesh;
                    if (PoolMaster.useIlluminationSystem)
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination);
                    }
                    else
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType);
                    }
                }
                else
                {
                    renderers.Remove(mvi);
                    Destroy(g);
                }
            }
        }
        else
        {
            CreateBlockpartsRenderer(mvi);
        }
    }
Esempio n. 5
0
    private void RedrawRenderer(MeshVisualizeInfo mvi)
    {
        GameObject g;

        renderers.TryGetValue(mvi, out g);
        if (g != null)
        {
            int n = blockVisualizersList.Count;
            if (n > 0)
            {
                var indexes = new List <int>();
                for (int i = 0; i < n; i++)
                {
                    if (blockVisualizersList[i].meshInfo == mvi)
                    {
                        indexes.Add(i);
                    }
                }

                n = indexes.Count;
                if (n > 0)
                {
                    CombineInstance[]      cir = new CombineInstance[n], cic = new CombineInstance[n];
                    BlockpartVisualizeInfo bvi;
                    Mesh      cm;
                    Matrix4x4 mtr;
                    for (int i = 0; i < n; i++)
                    {
                        bvi              = blockVisualizersList[indexes[i]];
                        cm               = MeshMaster.GetMesh(bvi.meshType, bvi.materialID);
                        cir[i].mesh      = cm;
                        mtr              = bvi.GetPositionMatrix();
                        cir[i].transform = mtr;
                        cic[i].mesh      = bvi.meshType == MeshType.Quad ? cm : MeshMaster.GetMeshColliderLink(bvi.meshType);
                        cic[i].transform = mtr;
                    }
                    cm = new Mesh();
                    cm.CombineMeshes(cir);
                    g.GetComponent <MeshFilter>().sharedMesh = cm;
                    cm = new Mesh();
                    cm.CombineMeshes(cic);
                    g.GetComponent <MeshCollider>().sharedMesh = cm;
                    if (PoolMaster.useIlluminationSystem)
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination);
                    }
                    else
                    {
                        g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType);
                    }
                }
                else
                {
                    renderers.Remove(mvi);
                    Destroy(g);
                }
            }
        }
        else
        {
            CreateBlockpartsRenderer(mvi);
        }
    }
Esempio n. 6
0
    private void CreateBlockpartsRenderer(MeshVisualizeInfo mvi)
    {
        if (renderers.ContainsKey(mvi))
        {
            return;
        }
        var processingIndexes = new List <int>();

        for (int i = 0; i < blockVisualizersList.Count; i++)
        {
            if (blockVisualizersList[i].meshInfo == mvi)
            {
                processingIndexes.Add(i);
            }
        }

        int pcount = processingIndexes.Count;

        if (pcount > 0)
        {
            var  ci = new CombineInstance[pcount];
            Mesh m;
            BlockpartVisualizeInfo cdata;
            for (int j = 0; j < pcount; j++)
            {
                cdata           = blockVisualizersList[processingIndexes[j]];
                m               = MeshMaster.GetMesh(cdata.meshType, cdata.materialID);
                ci[j].mesh      = m;
                ci[j].transform = cdata.GetPositionMatrix();
            }

            GameObject g = new GameObject();
            m = new Mesh();
            m.CombineMeshes(ci, true); // все подмеши используют один материал

            //удаление копий вершин на стыках - отменено из-за uv

            var mf = g.AddComponent <MeshFilter>();
            mf.sharedMesh = m;

            var mr = g.AddComponent <MeshRenderer>();
            mr.shadowCastingMode    = UnityEngine.Rendering.ShadowCastingMode.Off;
            mr.receiveShadows       = PoolMaster.shadowCasting;
            mr.lightProbeUsage      = UnityEngine.Rendering.LightProbeUsage.Off;
            mr.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
            if (!PoolMaster.useIlluminationSystem)
            {
                mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType);
            }
            else
            {
                mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination);
            }

            g.transform.parent = renderersHolders[mvi.faceIndex].transform;
            g.AddComponent <MeshCollider>().sharedMesh = m;
            g.tag = BLOCK_COLLIDER_TAG;

            renderers.Add(mvi, g);
        }
    }