Esempio n. 1
0
        public override void OnNeighborBlockChanged(int x, int y, int z, int neighborX, int neighborY, int neighborZ)
        {
            int num       = Terrain.ExtractContents(base.SubsystemTerrain.Terrain.GetCellValue(x, y, z));
            int cellValue = base.SubsystemTerrain.Terrain.GetCellValue(x, y - 1, z);
            int num2      = Terrain.ExtractContents(cellValue);

            switch (num)
            {
            case 131:
            case 244:
                if (num2 != 8 && num2 != 2 && num2 != 168)
                {
                    base.SubsystemTerrain.DestroyCell(0, x, y, z, 0, noDrop: false, noParticleSystem: false);
                }
                break;

            case 132:
            {
                Block block = BlocksManager.Blocks[num2];
                if (block.IsFaceTransparent(base.SubsystemTerrain, 4, cellValue) && !(block is FenceBlock))
                {
                    base.SubsystemTerrain.DestroyCell(0, x, y, z, 0, noDrop: false, noParticleSystem: false);
                }
                break;
            }

            default:
                if (num2 != 8 && num2 != 2 && num2 != 7 && num2 != 168)
                {
                    base.SubsystemTerrain.DestroyCell(0, x, y, z, 0, noDrop: false, noParticleSystem: false);
                }
                break;
            }
        }
        public bool IsCollapseSupportBlock(int value)
        {
            int num = Terrain.ExtractContents(value);

            if (num != 0)
            {
                int   data  = Terrain.ExtractData(value);
                Block block = BlocksManager.Blocks[num];
                if (block is TrapdoorBlock)
                {
                    if (TrapdoorBlock.GetUpsideDown(data))
                    {
                        return(!TrapdoorBlock.GetOpen(data));
                    }
                    return(false);
                }
                if (block.BlockIndex == 238)
                {
                    return(true);
                }
                if (block.IsFaceTransparent(base.SubsystemTerrain, 4, value))
                {
                    return(block is SoilBlock);
                }
                return(true);
            }
            return(false);
        }
Esempio n. 3
0
        public bool IsSupport(int value, int face)
        {
            Block block = BlocksManager.Blocks[Terrain.ExtractContents(value)];

            if (block.IsCollidable)
            {
                return(!block.IsFaceTransparent(base.SubsystemTerrain, CellFace.OppositeFace(face), value));
            }
            return(false);
        }
Esempio n. 4
0
        public bool DegradesSoilIfOnTopOfIt(int value)
        {
            int   num   = Terrain.ExtractContents(value);
            Block block = BlocksManager.Blocks[num];

            if (!block.IsFaceTransparent(base.SubsystemTerrain, 5, value))
            {
                return(block.IsCollidable);
            }
            return(false);
        }
        public bool KillsGrassIfOnTopOfIt(int value)
        {
            int   num   = Terrain.ExtractContents(value);
            Block block = BlocksManager.Blocks[num];

            if (!(block is FluidBlock))
            {
                if (!block.IsFaceTransparent(base.SubsystemTerrain, 5, value))
                {
                    return(block.IsCollidable);
                }
                return(false);
            }
            return(true);
        }
        public override void OnNeighborBlockChanged(CellFace cellFace, int neighborX, int neighborY, int neighborZ)
        {
            Point3 point = CellFace.FaceToPoint3(cellFace.Face);
            int    x     = cellFace.X - point.X;
            int    y     = cellFace.Y - point.Y;
            int    z     = cellFace.Z - point.Z;

            if (base.SubsystemElectricity.SubsystemTerrain.Terrain.IsCellValid(x, y, z))
            {
                int   cellValue = base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(x, y, z);
                Block block     = BlocksManager.Blocks[Terrain.ExtractContents(cellValue)];
                if ((!block.IsCollidable || block.IsFaceTransparent(base.SubsystemElectricity.SubsystemTerrain, cellFace.Face, cellValue)) && (cellFace.Face != 4 || !(block is FenceBlock)))
                {
                    base.SubsystemElectricity.SubsystemTerrain.DestroyCell(0, cellFace.X, cellFace.Y, cellFace.Z, 0, noDrop: false, noParticleSystem: false);
                }
            }
        }