public void RaycastParticle(Particle particle)
        {
            particle.YLimit         = m_yLimit;
            particle.GenerateSplash = true;
            Block block = BlocksManager.Blocks[Terrain.ExtractContents(m_topmostValue)];

            if (!block.IsTransparent)
            {
                return;
            }
            Ray3        ray = new Ray3(new Vector3(particle.Position.X - (float)Point.X, 1f, particle.Position.Z - (float)Point.Y), -Vector3.UnitY);
            int         nearestBoxIndex;
            BoundingBox nearestBox;
            float?      num = block.Raycast(ray, m_subsystemWeather.SubsystemTerrain, m_topmostValue, useInteractionBoxes: false, out nearestBoxIndex, out nearestBox);

            if (num.HasValue)
            {
                particle.YLimit -= num.Value;
                return;
            }
            particle.YLimit -= 1f;
            if (BlocksManager.Blocks[Terrain.ExtractContents(m_topmostBelowValue)].IsFaceTransparent(m_subsystemWeather.SubsystemTerrain, 4, m_topmostBelowValue))
            {
                particle.GenerateSplash = false;
            }
        }