Exemple #1
0
        protected DateTime ProcessFileData(YamlFileData fileData, bool dontRun = false)
        {
            DateTime currentTime;

            //-- Header
            if (!string.IsNullOrWhiteSpace(fileData.Type))
            {
                World.Type = fileData.Type;
            }

            if (!string.IsNullOrWhiteSpace(fileData.Version))
            {
                World.Version = fileData.Version;
            }

            if (!fileData.ModDate.Equals(new DateTime(0)))
            {
                World.ModDate = fileData.ModDate;
            }

            World.Author = fileData.Author;

            //-- Background
            foreach (var u in fileData.Units)
            {
                if (u != null)
                {
                    if (string.IsNullOrWhiteSpace(u.Id))
                    {
                        throw new Exception("Unit must have an id");
                    }
                    World.Units.Add(u.Id, World.CreateUnit(u.Id, u.Name, u.Description, u.Symbol));
                }
            }

            foreach (var r in fileData.Resources)
            {
                if (string.IsNullOrWhiteSpace(r.Id))
                {
                    throw new Exception("Resource must have an id");
                }
                World.Resources.Add(r.Id,
                                    World.CreateResource(r.Id, r.Name, r.Description, r.Type,
                                                         string.IsNullOrWhiteSpace(r.Unit_Id) ? null : World.Units[r.Unit_Id],
                                                         r.Distribution, r.Range, r.Attenuation));
            }

            foreach (var k in fileData.Kpis)
            {
                World.Kpis.Add(World.CreateKpi(k.Name, k.Description, k.Formula,
                                               !string.IsNullOrEmpty(k.Unit_Id) ? World.Units[k.Unit_Id] : null));
            }

            World.Time.StepUnit = fileData.Time.StepUnit switch
            {
                "month" => TimeStep.month,
                "day" => TimeStep.day,
                _ => TimeStep.year
            };
            World.Time.StepValue = fileData.Time.StepValue;
            World.Time.Start     = fileData.Time.Start;
            World.Time.End       = fileData.Time.End;

            World.CreateMap(fileData.Map.SizeX, fileData.Map.SizeY);
            foreach (var cell in fileData.Map.Cells)
            {
                if (cell.Stocks != null)
                {
                    foreach (var stock in cell.Stocks)
                    {
                        World.Map.Cells[cell.X, cell.Y].SetInitialStock(stock.Key, stock.Value);
                    }
                }

                if (!string.IsNullOrWhiteSpace(cell.Jm2_Id))
                {
                    var jm2 = World.CreateJM2(cell.Jm2_Id, DataDictionary.ConvertGenericData(cell.Jm2_Init));
                    World.Map.Cells[cell.X, cell.Y].Jm2 = jm2;
                }
            }

            //-- Current Simulation State
            var stopWatch = new Stopwatch();

            stopWatch.Start();
            currentTime = World.Time.Current;
            if (fileData.CurrentTime.Ticks != DateTime.MinValue.Ticks)
            {
                currentTime = fileData.CurrentTime;
                if (!dontRun)
                {
                    World.Time.Current = fileData.CurrentTime;
                }
            }

            stopWatch.Stop();
            CurrentStateDelay = stopWatch.Elapsed;
            //-- Done
            return(currentTime);
        }
    }