internal void Apply(CelestialBody celestialBody, Transform scaledCelestialTransform, CloudsMaterial cloudsMaterial, float radius, Tools.Layer layer = Tools.Layer.Scaled) { CloudsManager.Log("Applying 2D clouds..."); Remove(); this.celestialBody = celestialBody; this.scaledCelestialTransform = scaledCelestialTransform; HalfSphere hp = new HalfSphere(radius, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; CloudMaterial.name = "Clouds2D"; this.radius = radius; macroCloudMaterial.Radius = radius; this.cloudsMat = cloudsMaterial; this.scaledLayer = layer; CloudMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); if (shadowMaterial != null) { ShadowProjectorGO = new GameObject(); 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); } Scaled = true; }
public void Apply(CloudsMaterial material, float radius, Transform parent) { Remove(); particleMaterial.MaxScale = size.y; particleMaterial.MaxTrans = maxTranslation; particleMaterial.NoiseScale = new Vector3(noiseScale.x, noiseScale.y, noiseScale.z / radius); ParticleMaterial = new Material(ParticleCloudShader); particleMaterial.ApplyMaterialProperties(ParticleMaterial); material.ApplyMaterialProperties(ParticleMaterial); ParticleMaterial.EnableKeyword("SOFT_DEPTH_ON"); volumeHolder = new GameObject(); //Add the renderer here so othe rentities (shadows) //can easily access it. Renderer r = volumeHolder.AddComponent<MeshRenderer>(); r.material = ParticleMaterial; ParticleMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); ParticleMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; r.enabled = false; volumeHolder.transform.parent = parent; volumeHolder.transform.localPosition = Vector3.zero; volumeHolder.transform.localScale = Vector3.one; volumeHolder.transform.localRotation = Quaternion.identity; volumeHolder.layer = (int)Tools.Layer.Local; volumeManager = new VolumeManager(radius, size, ParticleMaterial, volumeHolder.transform, area.x, (int)area.y); }
public void Apply(CloudsMaterial material, float radius, Transform parent) { Remove(); particleMaterial.MaxScale = size.y; particleMaterial.MaxTrans = maxTranslation; particleMaterial.NoiseScale = new Vector3(noiseScale.x, noiseScale.y, noiseScale.z / radius); ParticleMaterial = new Material(ParticleCloudShader); particleMaterial.ApplyMaterialProperties(ParticleMaterial); material.ApplyMaterialProperties(ParticleMaterial); ParticleMaterial.EnableKeyword("SOFT_DEPTH_ON"); volumeHolder = new GameObject(); //Add the renderer here so othe rentities (shadows) //can easily access it. Renderer r = volumeHolder.AddComponent <MeshRenderer>(); r.material = ParticleMaterial; ParticleMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); ParticleMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; r.enabled = false; volumeHolder.transform.parent = parent; volumeHolder.transform.localPosition = Vector3.zero; volumeHolder.transform.localScale = Vector3.one; volumeHolder.transform.localRotation = Quaternion.identity; volumeHolder.layer = (int)Tools.Layer.Local; volumeManager = new VolumeManager(radius, size, ParticleMaterial, volumeHolder.transform, area.x, (int)area.y); }
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; }
internal void Apply(String body, CloudsMaterial cloudsMaterial, Clouds2D layer2D, CloudsVolume layerVolume, float altitude, Vector3d speed, Vector3d detailSpeed, Vector3 offset, Matrix4x4 rotationAxis, bool killBodyRotation) { this.body = body; this.cloudsMaterial = cloudsMaterial; this.layer2D = layer2D; this.layerVolume = layerVolume; this.altitude = altitude; this.offset = -offset; this.rotationAxis = rotationAxis; this.killBodyRotation = killBodyRotation; celestialBody = Tools.GetCelestialBody(body); scaledCelestialTransform = Tools.GetScaledTransform(body); PQS pqs = null; if (celestialBody != null && celestialBody.pqsController != null) { pqs = celestialBody.pqsController; } else { CloudsManager.Log("No PQS! Instanciating one."); pqs = PQSManagerClass.GetPQS(body); } CloudsManager.Log("PQS Applied"); if (pqs != null) { this.sphere = pqs; this.transform.parent = pqs.transform; this.requirements = PQS.ModiferRequirements.Default; this.modEnabled = true; this.order += 10; this.transform.localPosition = Vector3.zero; this.transform.localRotation = Quaternion.identity; this.transform.localScale = Vector3.one; this.radius = (altitude + celestialBody.Radius); double circumference = 2f * Mathf.PI * radius; mainPeriod = -(speed) / circumference; detailPeriod = -(detailSpeed) / circumference; if (layer2D != null) { this.layer2D.Apply(celestialBody, scaledCelestialTransform, cloudsMaterial, this.name, (float)radius); } if (!pqs.isActive || HighLogic.LoadedScene == GameScenes.TRACKSTATION) { this.OnSphereInactive(); } else { this.OnSphereActive(); } this.OnSetup(); pqs.EnableSphere(); } else { CloudsManager.Log("PQS is null somehow!?"); } GameEvents.OnMapExited.Add(ExitMapView); GameEvents.onGameSceneLoadRequested.Add(SceneLoaded); if (HighLogic.LoadedScene == GameScenes.MAINMENU) { ApplyToMainMenu(); } }
internal void Apply(String body, CloudsMaterial cloudsMaterial, Clouds2D layer2D, CloudsVolume layerVolume, float altitude, Vector3d speed, Vector3d detailSpeed, Vector3 offset, Matrix4x4 rotationAxis, bool killBodyRotation) { this.body = body; this.cloudsMaterial = cloudsMaterial; this.layer2D = layer2D; this.layerVolume = layerVolume; this.altitude = altitude; this.offset = -offset; this.rotationAxis = rotationAxis; this.killBodyRotation = killBodyRotation; celestialBody = Tools.GetCelestialBody(body); scaledCelestialTransform = Tools.GetScaledTransform(body); PQS pqs = null; if (celestialBody != null && celestialBody.pqsController != null) { pqs = celestialBody.pqsController; } else { CloudsManager.Log("No PQS! Instanciating one."); pqs = PQSManagerClass.GetPQS(body); } CloudsManager.Log("PQS Applied"); if (pqs != null) { this.sphere = pqs; this.transform.parent = pqs.transform; this.requirements = PQS.ModiferRequirements.Default; this.modEnabled = true; this.order += 10; this.transform.localPosition = Vector3.zero; this.transform.localRotation = Quaternion.identity; this.transform.localScale = Vector3.one; this.radius = (altitude + celestialBody.Radius); double circumference = 2f * Mathf.PI * radius; mainPeriod = -(speed) / circumference; detailPeriod = -(detailSpeed) / circumference; if (layer2D != null) { this.layer2D.Apply(celestialBody, scaledCelestialTransform, cloudsMaterial, (float)radius); } if (!pqs.isActive || HighLogic.LoadedScene == GameScenes.TRACKSTATION) { this.OnSphereInactive(); } else { this.OnSphereActive(); } this.OnSetup(); pqs.EnableSphere(); } else { CloudsManager.Log("PQS is null somehow!?"); } GameEvents.OnMapExited.Add(ExitMapView); GameEvents.onGameSceneLoadRequested.Add(SceneLoaded); if (HighLogic.LoadedScene == GameScenes.MAINMENU) { ApplyToMainMenu(); } }
internal void Apply(CelestialBody celestialBody, Transform scaledCelestialTransform, CloudsMaterial cloudsMaterial, float radius, Tools.Layer layer = Tools.Layer.Scaled) { CloudsManager.Log("Applying 2D clouds..."); Remove(); this.celestialBody = celestialBody; this.scaledCelestialTransform = scaledCelestialTransform; HalfSphere hp = new HalfSphere(radius, ref CloudMaterial, CloudShader); CloudMesh = hp.GameObject; CloudMaterial.name = "Clouds2D"; this.radius = radius; macroCloudMaterial.Radius = radius; this.cloudsMat = cloudsMaterial; this.scaledLayer = layer; CloudMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); if (shadowMaterial != null) { ShadowProjectorGO = new GameObject(); 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); } Scaled = true; }