コード例 #1
0
        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");
                }
            }
        }