/// <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);
     }
 }
Beispiel #3
0
        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);
            }));
        }