Example #1
0
        public AtmosphereVolume(string body, Vector2 speed)
        {
            VolumeParent = new GameObject();
            CelestialBody[] celestialBodies = (CelestialBody[])CelestialBody.FindObjectsOfType(typeof(CelestialBody));
            CelestialBody   celestialBody   = celestialBodies.First(n => n.bodyName == body);

            BodyRadius = (float)celestialBody.Radius;
            VolumeParent.transform.parent        = celestialBody.transform;
            VolumeParent.transform.localPosition = Vector3.zero;
            VolumeParent.transform.localScale    = Vector3.one;
            Speed = speed;
            CloudParticleMaterial = new Material(CloudLayer.CloudParticleShader);
            Texture2D tex1 = GameDatabase.Instance.GetTexture("KerbalWeatherSystems/Textures/Clouds/particle/1", false);
            Texture2D tex2 = GameDatabase.Instance.GetTexture("KerbalWeatherSystems/Textures/Clouds/particle/2", false);
            Texture2D tex3 = GameDatabase.Instance.GetTexture("KerbalWeatherSystems/Textures/Clouds/particle/3", false);

            tex1.wrapMode = TextureWrapMode.Clamp;
            tex2.wrapMode = TextureWrapMode.Clamp;
            tex3.wrapMode = TextureWrapMode.Clamp;
            CloudParticleMaterial.SetTexture("_TopTex", tex1);
            CloudParticleMaterial.SetTexture("_LeftTex", tex2);
            CloudParticleMaterial.SetTexture("_FrontTex", tex3);
            CloudParticleMaterial.SetFloat("_DistFade", 1f / 2250f);
            Volume = new VolumeManager(BodyRadius, CloudParticleMaterial, VolumeParent.transform);
            Volumes.Add(this);
            if (!BodyDatabase.ContainsKey(body))
            {
                BodyDatabase.Add(body, new List <AtmosphereVolume>());
            }
            BodyDatabase[body].Add(this);
        }
 internal void ApplyGUIUpdate(CloudGUI cloudGUI)
 {
     mainTexture.Clone(cloudGUI.MainTexture);
     detailTexture.Clone(cloudGUI.DetailTexture);
     scaledShaderFloats.Clone(cloudGUI.ScaledShaderFloats);
     shaderFloats.Clone(cloudGUI.ShaderFloats);
     altitude  = cloudGUI.Altitude.AltitudeF;
     color     = cloudGUI.Color.Color;
     useVolume = cloudGUI.UseVolume;
     UpdateTextures();
     UpdateFloats();
     CloudOverlay.UpdateAltitude(true, altitude);
     if (useVolume)
     {
         CloudOverlay.MacroCallback    = MacroCallback;
         CloudOverlay.DominantCallback = DominantCallback;
         if (volume != null)
         {
             volume.Destroy();
             volume = null;
         }
     }
     else
     {
         CloudOverlay.MacroCallback    = null;
         CloudOverlay.DominantCallback = null;
         if (volume != null)
         {
             volume.Destroy();
             volume = null;
         }
     }
 }
 private void MacroCallback(bool isNotScaled)
 {
     if (volume != null)
     {
         volume.Enabled = isNotScaled;
         CloudLayer.Log("Volume Enabled=" + isNotScaled);
     }
     else if (volume == null && isNotScaled)
     {
         volume = new VolumeManager(CloudOverlay.Radius, (Texture2D)this.mainTexture.Texture, CloudParticleMaterial, this.CloudOverlay.Transform);
     }
 }
 private void DominantCallback(bool isDominant)
 {
     if (volume != null && !isDominant)
     {
         volume.Destroy();
         volume = null;
     }
     else if (volume == null && isDominant)
     {
         volume = new VolumeManager(CloudOverlay.Radius, (Texture2D)this.mainTexture.Texture, CloudParticleMaterial, this.CloudOverlay.Transform);
     }
 }
 internal void Remove(bool fromList = true)
 {
     this.CloudOverlay.RemoveOverlay();
     BodyDatabase[body].Remove(this);
     ConfigBodyDatabase[url][body].Remove(this);
     if (fromList)
     {
         Layers.Remove(this);
     }
     if (volume != null)
     {
         volume.Destroy();
         volume = null;
     }
 }
        public AtmosphereVolume(string body, Vector2 speed)
        {
            VolumeParent = new GameObject();
            CelestialBody[] celestialBodies = (CelestialBody[])CelestialBody.FindObjectsOfType(typeof(CelestialBody));
            CelestialBody celestialBody = celestialBodies.First(n => n.bodyName == body);
            BodyRadius = (float)celestialBody.Radius;
            VolumeParent.transform.parent = celestialBody.transform;
            VolumeParent.transform.localPosition = Vector3.zero;
            VolumeParent.transform.localScale = Vector3.one;

            Speed = speed;

            CloudParticleMaterial = new Material(CloudLayer.CloudParticleShader);

            Texture2D tex1 = GameDatabase.Instance.GetTexture("BoulderCo/Clouds/Textures/particle/1", false);
            Texture2D tex2 = GameDatabase.Instance.GetTexture("BoulderCo/Clouds/Textures/particle/2", false);
            Texture2D tex3 = GameDatabase.Instance.GetTexture("BoulderCo/Clouds/Textures/particle/3", false);

            tex1.wrapMode = TextureWrapMode.Clamp;
            tex2.wrapMode = TextureWrapMode.Clamp;
            tex3.wrapMode = TextureWrapMode.Clamp;

            CloudParticleMaterial.SetTexture("_TopTex", tex1);
            CloudParticleMaterial.SetTexture("_LeftTex", tex2);
            CloudParticleMaterial.SetTexture("_FrontTex", tex3);
            CloudParticleMaterial.SetFloat("_DistFade", 1f / 2250f);

            Volume = new VolumeManager(BodyRadius, CloudParticleMaterial, VolumeParent.transform);

            Volumes.Add(this);
            if(!BodyDatabase.ContainsKey(body))
            {
                BodyDatabase.Add(body, new List<AtmosphereVolume>());
            }
            BodyDatabase[body].Add(this);
        }
 private void MacroCallback(bool isNotScaled)
 {
     if (volume != null)
     {
         volume.Enabled = isNotScaled;
         CloudLayer.Log("Volume Enabled=" + isNotScaled);
     }
     else if (volume == null && isNotScaled)
     {
         volume = new VolumeManager(CloudOverlay.Radius, (Texture2D)this.mainTexture.Texture, CloudParticleMaterial, this.CloudOverlay.Transform);
     }
 }
 private void DominantCallback(bool isDominant)
 {
     if (volume != null && !isDominant)
     {
         volume.Destroy();
         volume = null;
     }
     else if (volume == null && isDominant)
     {
         volume = new VolumeManager(CloudOverlay.Radius, (Texture2D)this.mainTexture.Texture, CloudParticleMaterial, this.CloudOverlay.Transform);
     }
 }
 internal void Remove(bool fromList = true)
 {
     this.CloudOverlay.RemoveOverlay();
     BodyDatabase[body].Remove(this);
     ConfigBodyDatabase[url][body].Remove(this);
     if (fromList)
     {
         Layers.Remove(this);
     }
     if (volume != null)
     {
         volume.Destroy();
         volume = null;
     }
 }
 internal void ApplyGUIUpdate(CloudGUI cloudGUI)
 {
     mainTexture.Clone(cloudGUI.MainTexture);
     detailTexture.Clone(cloudGUI.DetailTexture);
     scaledShaderFloats.Clone(cloudGUI.ScaledShaderFloats);
     shaderFloats.Clone(cloudGUI.ShaderFloats);
     altitude = cloudGUI.Altitude.AltitudeF;
     color = cloudGUI.Color.Color;
     useVolume = cloudGUI.UseVolume;
     UpdateTextures();
     UpdateFloats();
     CloudOverlay.UpdateAltitude(true, altitude);
     if (useVolume)
     {
         CloudOverlay.MacroCallback = MacroCallback;
         CloudOverlay.DominantCallback = DominantCallback;
         if(volume != null)
         {
             volume.Destroy();
             volume = null;
         }
     }
     else
     {
         CloudOverlay.MacroCallback = null;
         CloudOverlay.DominantCallback = null;
         if (volume != null)
         {
             volume.Destroy();
             volume = null;
         }
     }
 }