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);
         }
     }
 }
Exemplo n.º 2
0
        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)));
                }
            }
        }