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