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