Пример #1
0
    public void RefreshBlockVisualising(Block b, byte face)
    {
        if (b == null)
        {
            return;
        }
        byte visibilityMask = GetVisibilityMask(b.pos);
        BlockpartVisualizeInfo currentBlockInfo = null;

        for (int i = 0; i < blockVisualizersList.Count; i++)
        {
            var bvi = blockVisualizersList[i];
            if (bvi.pos == b.pos && bvi.meshInfo.faceIndex == face)
            {
                currentBlockInfo = bvi;
                blockVisualizersList.RemoveAt(i);
            }
        }

        if ((visibilityMask & (1 << face)) != 0) // должен быть видимым
        {
            if (currentBlockInfo == null)
            {
                currentBlockInfo = b.GetFaceVisualData(face);
                if (currentBlockInfo == null)
                {
                    return;
                }
                blockVisualizersList.Add(currentBlockInfo);
                if (!redrawRequiredTypes.Contains(currentBlockInfo.meshInfo))
                {
                    redrawRequiredTypes.Add(currentBlockInfo.meshInfo);
                }
            }
            else
            {
                if (!redrawRequiredTypes.Contains(currentBlockInfo.meshInfo))
                {
                    redrawRequiredTypes.Add(currentBlockInfo.meshInfo);
                }
                currentBlockInfo = b.GetFaceVisualData(face);
                blockVisualizersList.Add(currentBlockInfo);
                if (!redrawRequiredTypes.Contains(currentBlockInfo.meshInfo))
                {
                    redrawRequiredTypes.Add(currentBlockInfo.meshInfo);
                }
            }
        }
        else // не должен быть виден
        {
            if (currentBlockInfo != null)
            {
                if (!redrawRequiredTypes.Contains(currentBlockInfo.meshInfo))
                {
                    redrawRequiredTypes.Add(currentBlockInfo.meshInfo);
                }
            }
        }
        chunkRenderUpdateRequired = true;
    }
Пример #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);
        }

        BlockpartVisualizeInfo p = (BlockpartVisualizeInfo)obj;

        return((p.pos == pos) && (p.meshInfo == meshInfo) && (meshType == p.meshType) && (materialID == p.materialID) && (meshRotation == p.meshRotation));
    }
Пример #3
0
    public void RefreshBlockVisualising(Block b)
    {
        if (GameMaster.loading)
        {
            return;
        }
        var correctData = b.GetVisualizeInfo(GetVisibilityMask(b.pos));
        var pos         = b.pos;

        if (correctData == null)
        { // нет видимых частей, удалить все, что относится к блоку
            RemoveBlockVisualisers(pos);
            return;
        }
        else
        {
            int  i           = 0;
            bool corrections = false;
            MeshVisualizeInfo mvi;
            byte findex;
            var  correctDataArray = new BlockpartVisualizeInfo[8];
            foreach (var fbvi in correctData)
            {
                findex = fbvi.meshInfo.faceIndex;
                correctDataArray[findex] = fbvi;
            }
            correctData = null;
            BlockpartVisualizeInfo bvi;
            while (i < blockVisualizersList.Count)
            {
                if (blockVisualizersList[i].pos == pos)
                {
                    bvi    = blockVisualizersList[i];
                    mvi    = bvi.meshInfo;
                    findex = bvi.meshInfo.faceIndex;
                    if (correctDataArray[findex] != null)
                    {
                        // замена существующих данных
                        if (bvi != correctDataArray[findex])
                        {
                            blockVisualizersList[i] = correctDataArray[findex];
                            corrections             = true;
                            if (!redrawRequiredTypes.Contains(mvi))
                            {
                                redrawRequiredTypes.Add(mvi);                                     // удаленный тип
                            }
                            mvi = correctDataArray[findex].meshInfo;
                            if (!redrawRequiredTypes.Contains(mvi))
                            {
                                redrawRequiredTypes.Add(mvi); // новый тип
                            }
                            correctDataArray[findex] = null;  // все записанные стираются, незаписанные впишутся позже
                        }
                        i++;
                    }
                    else
                    {
                        blockVisualizersList.RemoveAt(i);
                        corrections = true;
                        if (!redrawRequiredTypes.Contains(mvi))
                        {
                            redrawRequiredTypes.Add(mvi);
                        }
                        continue;
                    }
                }
                else
                {
                    i++;
                }
            }
            foreach (var fbvi in correctDataArray)
            {
                if (fbvi != null)
                {
                    blockVisualizersList.Add(fbvi);
                    corrections = true;
                    mvi         = fbvi.meshInfo;
                    if (!redrawRequiredTypes.Contains(mvi))
                    {
                        redrawRequiredTypes.Add(mvi);
                    }
                }
            }
            if (corrections)
            {
                chunkRenderUpdateRequired = true;
            }
        }
    }