Esempio n. 1
0
        private void ParseRoadLookFiles()
        {
            var roadLookFiles = Directory.GetFiles(LutSiiFolder + @"road\", "*.sii");

            roadLookFiles.ToList().ForEach(file =>
            {
                string road       = String.Empty;
                var fileData      = File.ReadLines(file);
                Ets2RoadLook look = null;
                foreach (var k in fileData)
                {
                    //value:
                    if (k.Contains(":") && !road.Equals(String.Empty) && look != null)
                    {
                        var key  = k;
                        var data = key.Substring(key.IndexOf(':') + 1).Trim();
                        key      = key.Substring(0, key.IndexOf(':')).Trim();

                        switch (key)
                        {
                        case "road_size_left":
                            float.TryParse(data, out look.SizeLeft);
                            break;

                        case "road_size_right":
                            float.TryParse(data, out look.SizeRight);
                            break;

                        case "shoulder_size_right":
                            float.TryParse(data, out look.ShoulderLeft);
                            break;

                        case "shoulder_size_left":
                            float.TryParse(data, out look.ShoulderRight);
                            break;

                        case "road_offset":
                            float.TryParse(data, out look.Offset);
                            break;

                        case "lanes_left[]":
                            look.LanesLeft++;
                            look.IsLocal   = (data.Equals("traffic_lane.road.local") || data.Equals("traffic_lane.road.local.tram"));
                            look.IsExpress = (data.Equals("traffic_lane.road.expressway") || data.Equals("traffic_lane.road.divided"));
                            look.IsHighway = (data.Equals("traffic_lane.road.motorway") || data.Equals("traffic_lane.road.motorway.low_density") ||
                                              data.Equals("traffic_lane.road.freeway") || data.Equals("traffic_lane.road.freeway.low_density") ||
                                              data.Equals("traffic_lane.road.divided"));
                            look.IsNoVehicles = (data.Equals("traffic_lane.no_vehicles"));
                            break;

                        case "lanes_right[]":
                            look.LanesRight++;
                            look.IsLocal   = (data.Equals("traffic_lane.road.local") || data.Equals("traffic_lane.road.local.tram"));
                            look.IsExpress = (data.Equals("traffic_lane.road.expressway") || data.Equals("traffic_lane.road.divided"));
                            look.IsHighway = (data.Equals("traffic_lane.road.motorway") || data.Equals("traffic_lane.road.motorway.low_density") ||
                                              data.Equals("traffic_lane.road.freeway") || data.Equals("traffic_lane.road.freeway.low_density") ||
                                              data.Equals("traffic_lane.road.divided"));
                            look.IsNoVehicles = (data.Equals("traffic_lane.no_vehicles"));
                            break;
                        }
                    }
                    if (k.StartsWith("road_look"))
                    {
                        var d = k.Split(':');
                        d[1]  = d[1].Trim();
                        if (d[1].Length > 3)
                        {
                            road = d[1].Substring(0, d[1].Length - 1).Trim();
                            look = new Ets2RoadLook(road);
                        }
                    }
                    if (k.Trim() == "}")
                    {
                        if (look != null && !RoadLookLookup.Contains(look))
                        {
                            RoadLookLookup.Add(look);
                        }
                        road = String.Empty;
                    }
                }
            });
        }
Esempio n. 2
0
        private void LoadLUT()
        {
            // PREFABS
            var prefabSii = LUTSIIFolder + "-prefab.sii";
            var prefabCsv = LUTCSVFolder + "-prefab.csv";

            if (File.Exists(prefabSii) && File.Exists(prefabCsv))
            {

                Dictionary<string, string> prefab2file = new Dictionary<string, string>();
                Dictionary<int, string> idx2prefab = new Dictionary<int, string>();
                var csvLines = File.ReadAllLines(prefabCsv);
                foreach (var k in csvLines)
                {
                    var d = k.Split(",".ToCharArray());
                    int idx;

                    if (int.TryParse(d[2], NumberStyles.HexNumber, null, out idx))
                    {
                        if (idx2prefab.ContainsKey(idx) == false)
                            idx2prefab.Add(idx, d[1]);
                    }
                }

                var siiLines = File.ReadAllLines(prefabSii);

                var prefab = string.Empty;
                var file = string.Empty;
                foreach (var k in siiLines)
                {
                    if (k.Trim() == "}")
                    {
                        if (prefab != string.Empty && file != string.Empty)
                        {
                            prefab2file.Add(prefab, file);
                        }

                        prefab = string.Empty;
                        file = string.Empty;
                    }

                    if (k.StartsWith("prefab_model"))
                    {
                        var d = k.Split(":".ToCharArray()).Select(x => x.Trim()).ToArray();
                        if (d[1].Length > 3)
                        {
                            prefab = d[1].Substring(0, d[1].Length - 1).Trim();
                        }
                    }

                    if (k.Contains("prefab_desc"))
                    {
                        var d = k.Split("\"".ToCharArray());
                        file = d[1].Trim();
                    }

                }

                // Link all prefabs
                foreach (var id2fab in idx2prefab)
                {
                    if (prefab2file.ContainsKey(id2fab.Value))
                    {
                        var f = prefab2file[id2fab.Value];
                        var obj = PrefabsLookup.FirstOrDefault(x => x.IsFile(f));

                        if (obj != null)
                        {
                            obj.IDX = id2fab.Key;
                            obj.IDSII = id2fab.Value;

                            PrefabLookup.Add(id2fab.Key, obj);
                        }
                    }
                }
            }

            // COMPANIES
            if (File.Exists(LUTCSVFolder + "-companies.csv"))
            {
                CompaniesLookup =
                    File.ReadAllLines(LUTCSVFolder + "-companies.csv").Select(x => new Ets2Company(x, this)).ToList();
            }

            // CITIES
            if (File.Exists(LUTCSVFolder + "-cities.csv"))
            {
                CitiesLookup = File.ReadAllLines(LUTCSVFolder + "-cities.csv").Select(x =>
                {
                    var d = x.Split(",".ToCharArray());
                    var id = ulong.Parse(d[0], NumberStyles.HexNumber);
                    var city = d[1];
                    return new KeyValuePair<ulong, string>(id, city);
                }).ToDictionary(x => x.Key, x => x.Value);
            }

            // ROAD LOOKS
            if (File.Exists(LUTCSVFolder + "-roads.csv"))
            {
                RoadLookup = File.ReadAllLines(LUTCSVFolder + "-roads.csv").Select(x =>
                {
                    var d = x.Split(",".ToCharArray());
                    var id = uint.Parse(d[0], NumberStyles.HexNumber);
                    var look = d[1];
                    var lookObj = new Ets2RoadLook(look, this);
                    return new KeyValuePair<uint, Ets2RoadLook>(id, lookObj);
                }).ToDictionary(x => x.Key, x => x.Value);
            }
        }