public void Reassign(Tools.Layer layer, Transform parent, float worldScale) { CloudMesh.transform.parent = parent; CloudMesh.transform.localPosition = Vector3.zero; float localScale; if (isMainMenu) { localScale = worldScale * 10f; } else { localScale = (worldScale / parent.lossyScale.x); } CloudMesh.transform.localScale = (Vector3.one) * localScale; CloudMesh.layer = (int)layer; float radiusScaleWorld = radius * worldScale; radiusScaleLocal = radius * localScale; macroCloudMaterial.ApplyMaterialProperties(CloudMaterial, worldScale); cloudsMat.ApplyMaterialProperties(CloudMaterial, worldScale); if (layer == Tools.Layer.Local) { Sunlight = Sun.Instance.GetComponent <Light>(); CloudMaterial.SetFloat("_OceanRadius", (float)celestialBody.Radius * worldScale); CloudMaterial.EnableKeyword("WORLD_SPACE_ON"); CloudMaterial.EnableKeyword("SOFT_DEPTH_ON"); CloudMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; } else { //hack to get protected variable FieldInfo field = typeof(Sun).GetFields(BindingFlags.Instance | BindingFlags.NonPublic).First( f => f.Name == "scaledSunLight"); Sunlight = (Light)field.GetValue(Sun.Instance); CloudMaterial.DisableKeyword("WORLD_SPACE_ON"); CloudMaterial.DisableKeyword("SOFT_DEPTH_ON"); CloudMaterial.renderQueue = (int)Tools.Queue.Transparent - 1; } if (isMainMenu) { try { Sunlight = GameObject.FindObjectsOfType <Light>().Last(l => l.isActiveAndEnabled); } catch { } } if (ShadowProjector != null) { float dist = (float)(2 * radiusScaleWorld); ShadowProjector.farClipPlane = dist; ShadowProjector.orthographicSize = radiusScaleWorld; macroCloudMaterial.ApplyMaterialProperties(ShadowProjector.material, worldScale); cloudsMat.ApplyMaterialProperties(ShadowProjector.material, worldScale); ShadowProjector.material.SetFloat("_Radius", (float)radiusScaleLocal); ShadowProjector.material.SetFloat("_PlanetRadius", (float)celestialBody.Radius * worldScale); ShadowProjector.transform.parent = parent; ShadowProjectorGO.layer = (int)layer; if (layer == Tools.Layer.Local) { ShadowProjector.ignoreLayers = ~(Tools.Layer.Default.Mask() | Tools.Layer.TransparentFX.Mask() | Tools.Layer.Water.Mask() | Tools.Layer.Local.Mask() | Tools.Layer.Kerbals.Mask() | Tools.Layer.Parts.Mask()); ShadowProjector.material.EnableKeyword("WORLD_SPACE_ON"); } else { ShadowProjector.ignoreLayers = ~layer.Mask(); ShadowProjector.material.DisableKeyword("WORLD_SPACE_ON"); } } }