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); }
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); }
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); } } }