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); }
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; } } }