internal void Apply(Material mat, CelestialBody cb, List <CelestialBody> list, GameObject go, ScreenSpaceShadow scShadow) { shadowMat = mat; body = cb; shadowList = list; screenSpaceShadowGO = go; screenSpaceShadow = scShadow; }
internal void Apply(CelestialBody celestialBody, Transform scaledCelestialTransform, CloudsMaterial cloudsMaterial, string name, float radius, float arc, Tools.Layer layer = Tools.Layer.Scaled) { CloudsManager.Log("Applying 2D clouds..."); Remove(); this.celestialBody = celestialBody; this.scaledCelestialTransform = scaledCelestialTransform; if (arc == 360) { HalfSphere hp = new HalfSphere(radius, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; } else { UVSphere hp = new UVSphere(radius, arc, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; } CloudMesh.name = name; CloudMaterial.name = "Clouds2D"; this.radius = radius; this.arc = arc; macroCloudMaterial.Radius = radius; this.cloudsMat = cloudsMaterial; this.scaledLayer = layer; CloudMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); if (shadowMaterial != null) { ShadowProjectorGO = new GameObject("EVE ShadowProjector"); ShadowProjector = ShadowProjectorGO.AddComponent <Projector>(); ShadowProjector.nearClipPlane = 10; ShadowProjector.fieldOfView = 60; ShadowProjector.aspectRatio = 1; ShadowProjector.orthographic = true; ShadowProjector.transform.parent = celestialBody.transform; ShadowProjector.material = new Material(CloudShadowShader); shadowMaterial.ApplyMaterialProperties(ShadowProjector.material); // Workaround Unity bug (Case 841236) ShadowProjector.enabled = false; ShadowProjector.enabled = true; // Here create the screenSpaceShadowMaterialStuff screenSpaceShadowGO = new GameObject("EVE ScreenSpaceShadow"); screenSpaceShadowGO.transform.parent = celestialBody.transform; screenSpaceShadow = screenSpaceShadowGO.AddComponent <ScreenSpaceShadow>(); //can this be a single class that will handle the mesh, and meshrenderer and everything? screenSpaceShadow.material = new Material(ScreenSpaceCloudShadowShader); shadowMaterial.ApplyMaterialProperties(screenSpaceShadow.material); screenSpaceShadow.Init(); screenSpaceShadowGO.SetActive(false); screenSpaceShadow.SetActive(false); } Scaled = true; }
public void Apply() { ShadowManager.Log("Applying to " + body); CelestialBody celestialBody = Tools.GetCelestialBody(body); Transform transform = Tools.GetScaledTransform(body); if (transform != null) { Renderer mr = transform.GetComponent <Renderer>(); if (mr != null && hasSurface) { shadowMat = new Material(ShadowShader); GameObject go = new GameObject(); go.name = "EVE Shadows"; localShadowMat = new Material(ScreenSpaceShadowShader); screenSpaceShadowGO = new GameObject("EVE Celestial ScreenSpaceShadow"); screenSpaceShadowGO.transform.parent = celestialBody.transform; screenSpaceShadow = screenSpaceShadowGO.AddComponent <ScreenSpaceShadow>(); screenSpaceShadow.material = localShadowMat; screenSpaceShadow.Init(); screenSpaceShadowGO.SetActive(false); screenSpaceShadow.SetActive(false); shadowMat.SetFloat(ShaderProperties._SunRadius_PROPERTY, (float)(ScaledSpace.InverseScaleFactor * Sun.Instance.sun.Radius)); localShadowMat.SetFloat(ShaderProperties._SunRadius_PROPERTY, (float)(Sun.Instance.sun.Radius)); shadowMat.name = materialName; shadowMat.renderQueue = (int)Tools.Queue.Geometry + 3; localShadowMat.name = materialName; localShadowMat.renderQueue = (int)Tools.Queue.Geometry + 3; DeferredRenderer.Add(mr.gameObject, shadowMat); } ScaledShadowComponent sc = transform.gameObject.AddComponent <ScaledShadowComponent>(); LocalShadowComponent lsc = FlightCamera.fetch.mainCamera.gameObject.AddComponent <LocalShadowComponent>(); List <CelestialBody> casters = new List <CelestialBody>(); if (caster != null) { foreach (String b in caster) { casters.Add(Tools.GetCelestialBody(b)); } } sc.Apply(shadowMat, celestialBody, casters); lsc.Apply(localShadowMat, celestialBody, casters, screenSpaceShadowGO, screenSpaceShadow); } ApplyToMainMenu(); GameEvents.onGameSceneLoadRequested.Add(SceneLoaded); if (HighLogic.LoadedScene == GameScenes.MAINMENU) { ApplyToMainMenu(); } }