public void MovingBlocksStopped(IMovingBlockSet movingBlockSet) { if (movingBlockSet.Id == "CollapsingBlock") { Point3 p = Terrain.ToCell(MathUtils.Round(movingBlockSet.Position.X), MathUtils.Round(movingBlockSet.Position.Y), MathUtils.Round(movingBlockSet.Position.Z)); foreach (MovingBlock block in movingBlockSet.Blocks) { Point3 point = p + block.Offset; base.SubsystemTerrain.DestroyCell(0, point.X, point.Y, point.Z, block.Value, noDrop: false, noParticleSystem: false); } m_subsystemMovingBlocks.RemoveMovingBlockSet(movingBlockSet); if (movingBlockSet.Blocks.Count > 0) { m_subsystemSoundMaterials.PlayImpactSound(movingBlockSet.Blocks[0].Value, movingBlockSet.Position, 1f); } } }
public void StopPiston(Point3 position) { IMovingBlockSet movingBlockSet = m_subsystemMovingBlocks.FindMovingBlocks("Piston", position); if (movingBlockSet != null) { int cellValue = m_subsystemTerrain.Terrain.GetCellValue(position.X, position.Y, position.Z); int num = Terrain.ExtractContents(cellValue); int data = Terrain.ExtractData(cellValue); bool flag = num == 237; bool isExtended = false; m_subsystemMovingBlocks.RemoveMovingBlockSet(movingBlockSet); foreach (MovingBlock block in movingBlockSet.Blocks) { int x = Terrain.ToCell(MathUtils.Round(movingBlockSet.Position.X)) + block.Offset.X; int y = Terrain.ToCell(MathUtils.Round(movingBlockSet.Position.Y)) + block.Offset.Y; int z = Terrain.ToCell(MathUtils.Round(movingBlockSet.Position.Z)) + block.Offset.Z; if (!(new Point3(x, y, z) == position)) { int num2 = Terrain.ExtractContents(block.Value); if (flag || num2 != 238) { m_subsystemTerrain.DestroyCell(0, x, y, z, block.Value, noDrop: false, noParticleSystem: false); if (num2 == 238) { isExtended = true; } } } } if (flag) { m_subsystemTerrain.ChangeCell(position.X, position.Y, position.Z, Terrain.MakeBlockValue(237, 0, PistonBlock.SetIsExtended(data, isExtended))); } } }