/// <summary> /// /// </summary> /// <param name="stream"></param> private void LoadMetaData(Stream stream) { stream.Position = 0; using (var reader = new StreamReader(stream, Encoding.UTF8)) { string line; bool foundheader = false; while ((line = reader.ReadLine()) != null) { List <String> items = new List <String>(line.Trim().Split(new string[] { " ", "\t", "," }, StringSplitOptions.RemoveEmptyEntries)); if (items[0] != "//") { if (foundheader == false) { //Parse the header float lat; float lon; if (float.TryParse(items[0], out lat)) { Latitude = lat; } if (float.TryParse(items[1], out lon)) { Longitude = lon; } items.RemoveRange(0, 2); Comments = String.Join(" ", items.ToArray()); foundheader = true; } else { if (items.Count() == 8) { var date = DateUtilities.TryParseDate(items[0]); if (date != null) { if (StartDate == null) { StartDate = date; } //Parse the met data EndDate = date; MaxT.Add(double.Parse(items[2])); MinT.Add(double.Parse(items[3])); Rain.Add(double.Parse(items[4])); PanEvap.Add(double.Parse(items[5])); Radiation.Add(double.Parse(items[6])); VP.Add(double.Parse(items[7])); } } } } } } }
private void AddDrops() { for (int i = 0; i < 100; i++) { Drop d = new Drop(_random.Next(0, Form.Width), _random.Next(-200, -100), _random.Next(4, 10)); Rain.Add(d); } }
public override void Bind(Entity entity, Main main, bool creating = false) { entity.CannotSuspendByDistance = true; Transform transform = entity.GetOrCreate <Transform>("Transform"); Rain rain = entity.GetOrCreate <Rain>("Rain"); ParticleEmitter emitter = entity.GetOrCreate <ParticleEmitter>("Emitter"); emitter.Add(new Binding <Vector3>(emitter.Jitter, rain.Jitter)); rain.Add(new Binding <int>(rain.ParticlesPerSecond, emitter.ParticlesPerSecond)); Components.DirectionalLight lightning = entity.GetOrCreate <Components.DirectionalLight>("Lightning"); lightning.Serialize = false; lightning.Add(new Binding <Quaternion>(lightning.Quaternion, transform.Quaternion)); lightning.Add(new Binding <bool>(lightning.Shadowed, rain.LightningShadowed)); lightning.Enabled.Value = false; lightning.Add(new TwoWayBinding <Vector3>(rain.CurrentLightningColor, lightning.Color)); if (!main.EditorEnabled) { lightning.Add(new Binding <bool>(lightning.Enabled, rain.LightningEnabled)); } emitter.AddParticle = delegate(Vector3 position, Vector3 velocity, float prime) { Vector3 kernelCoord = (position - rain.KernelOffset) / Rain.KernelSpacing; float height = rain.RaycastHeights[Math.Max(0, Math.Min(Rain.KernelSize - 1, (int)kernelCoord.X)), Math.Max(0, Math.Min(Rain.KernelSize - 1, (int)kernelCoord.Z))]; if (height < position.Y) { emitter.ParticleSystem.AddParticle(position, Vector3.Zero, Math.Min((position.Y - height) / Rain.VerticalSpeed, Rain.MaxLifetime), -1.0f, prime); } }; emitter.Add(new Binding <Vector3>(emitter.Position, x => x + new Vector3(0.0f, Rain.StartHeight, 0.0f), main.Camera.Position)); this.SetMain(entity, main); emitter.ParticleType.Value = "Rain"; entity.Add("ThunderIntervalMin", rain.ThunderIntervalMin); entity.Add("ThunderIntervalMax", rain.ThunderIntervalMax); entity.Add("ThunderMaxDelay", rain.ThunderMaxDelay); entity.Add("ParticlesPerSecond", emitter.ParticlesPerSecond); entity.Add("LightningShadowed", rain.LightningShadowed); entity.Add("LightningColor", rain.LightningColor); entity.Add(new PostInitialization(delegate() { rain.Update(); emitter.Prime(Vector3.Zero); })); }