public TsCity(TsMapper mapper, string path) { _mapper = mapper; var file = _mapper.Rfs.GetFileEntry(path); if (file == null) { return; } var fileContent = file.Entry.Read(); var lines = Encoding.UTF8.GetString(fileContent).Split('\n'); foreach (var line in lines) { if (line.Contains("city_data")) { Token = ScsHash.StringToToken(line.Split('.')[1].Trim()); } else if (line.Contains("city_name") && !line.Contains("uppercase")) { Name = line.Split('"')[1]; } else if (line.Contains("country")) { Country = line.Split(':')[1].Trim(); } } }
public TsMapOverlay(TsMapper mapper, string filePath) { _filePath = filePath; var file = mapper.Rfs.GetFileEntry(_filePath); if (file != null) { var icon = new OverlayIcon(file); if (!icon.Valid) { return; } _overlayBitmap = new Bitmap((int)icon.Width, (int)icon.Height, PixelFormat.Format32bppArgb); var bd = _overlayBitmap.LockBits(new Rectangle(0, 0, _overlayBitmap.Width, _overlayBitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); var ptr = bd.Scan0; Marshal.Copy(icon.GetData(), 0, ptr, (bd.Width * bd.Height * 0x4)); _overlayBitmap.UnlockBits(bd); } else { Log.Msg($"Map Overlay file not found, {filePath}"); } }
public TsPrefabNode GetNearestNode(TsMapper _mapper, TsNode item, int mode) { // Mode: 0 -> Only Input Points ; 1 -> Only Output Points ; whatever else -> All Points TsPrefabNode node = default(TsPrefabNode); node.id = -1; float min = float.MaxValue; var originNode = _mapper.GetNodeByUid(this.Nodes[0]); var mapPointOrigin = this.Prefab.PrefabNodes[this.Origin]; var prefabStartX = originNode.X - mapPointOrigin.X; var prefabStartZ = originNode.Z - mapPointOrigin.Z; var rot = (float)(originNode.Rotation - Math.PI - Math.Atan2(mapPointOrigin.RotZ, mapPointOrigin.RotX) + Math.PI / 2); foreach (var nod in this.Prefab.PrefabNodes) { if (nod.InputPoints.Count <= 0 && mode == 0) { continue; } if (nod.OutputPoints.Count <= 0 && mode == 1) { continue; } var newPoint = TsMapRenderer.RotatePoint(prefabStartX + nod.X, prefabStartZ + nod.Z, rot, originNode.X, originNode.Z); float dist = (float)Math.Sqrt(Math.Pow(item.X - (newPoint.X), 2) + Math.Pow(item.Z - (newPoint.Y), 2)); if (dist < min && dist < 0.2) { node = nod; min = dist; } } return(node); }
public TsCountry(TsMapper mapper, string path) { _mapper = mapper; var file = _mapper.Rfs.GetFileEntry(path); if (file == null) { return; } LocalizedNames = new Dictionary <string, string>(); var fileContent = file.Entry.Read(); var lines = Encoding.UTF8.GetString(fileContent).Split('\n'); foreach (var line in lines) { var(validLine, key, value) = SiiHelper.ParseLine(line); if (!validLine) { continue; } if (key == "country_data") { Token = ScsHash.StringToToken(SiiHelper.Trim(value.Split('.')[2])); } else if (key == "country_id") { CountryId = int.Parse(value); } else if (key == "name") { Name = value.Split('"')[1]; } else if (key == "name_localized") { LocalizationToken = value.Split('"')[1]; LocalizationToken = LocalizationToken.Replace("@", ""); } else if (key == "country_code") { CountryCode = value.Split('"')[1]; } else if (key == "pos") { var vector = value.Split('(')[1].Split(')')[0]; var values = vector.Split(','); X = float.Parse(values[0], CultureInfo.InvariantCulture); Y = float.Parse(values[2], CultureInfo.InvariantCulture); } } }
public TsSector(TsMapper mapper, string filePath) { Mapper = mapper; FilePath = filePath; var file = Mapper.Rfs.GetFileEntry(FilePath); if (file == null) { _empty = true; return; } Stream = file.Entry.Read(); }
public TsNode NodeIteminPrefab(TsMapper _mapper, TsItem item) { foreach (var nodePId in this.Nodes) { var nodeP = _mapper.GetNodeByUid(nodePId); if (nodeP.ForwardItem == item) { return(nodeP); } if (nodeP.BackwardItem == item) { return(nodeP); } } return(null); }
public TsPrefab(TsMapper mapper, string filePath, ulong token, string category) { FilePath = filePath; Token = token; Category = category; var file = mapper.Rfs.GetFileEntry(FilePath); if (file == null) { return; } _stream = file.Entry.Read(); Parse(); }
public List <Tuple <TsNode, TsPrefabItem> > NodePrefabinPrefab(TsMapper _mapper) { List <Tuple <TsNode, TsPrefabItem> > prefabs = new List <Tuple <TsNode, TsPrefabItem> >(); foreach (var nodePId in this.Nodes) { var nodeP = _mapper.GetNodeByUid(nodePId); if (nodeP.ForwardItem != null && nodeP.ForwardItem.Type == TsItemType.Prefab && nodeP.ForwardItem != this) { prefabs.Add(new Tuple <TsNode, TsPrefabItem>(nodeP, (TsPrefabItem)nodeP.ForwardItem)); } if (nodeP.BackwardItem != null && nodeP.BackwardItem.Type == TsItemType.Prefab && nodeP.BackwardItem != this) { prefabs.Add(new Tuple <TsNode, TsPrefabItem>(nodeP, (TsPrefabItem)nodeP.BackwardItem)); } } return(prefabs); }
public TsCity(TsMapper mapper, string path) { _mapper = mapper; var file = _mapper.Rfs.GetFileEntry(path); if (file == null) { return; } var fileContent = file.Entry.Read(); var lines = Encoding.UTF8.GetString(fileContent).Split('\n'); var offsetCount = 0; XOffsets = new List <int>(); YOffsets = new List <int>(); foreach (var line in lines) { if (line.Contains("city_data")) { Token = ScsHash.StringToToken(line.Split('.')[1].Trim()); } else if (line.Contains("city_name") && !line.Contains("uppercase") && !line.Contains("short") && !line.Contains("localized")) { Name = line.Split('"')[1]; } else if (line.Contains("city_name_localized")) { NameLocalized = line.Split('"')[1]; NameLocalized = NameLocalized.Substring(2, NameLocalized.Length - 4); } else if (line.Contains("country")) { Country = line.Split(':')[1].Trim(); } else if (line.Contains("map_x_offsets[]")) { if (++offsetCount > 4) { var offset = 0; if (int.TryParse(line.Split(':')[1].Trim(), out offset)) { XOffsets.Add(offset); } } if (offsetCount == 8) { offsetCount = 0; } } else if (line.Contains("map_y_offsets[]")) { if (++offsetCount > 4) { var offset = 0; if (int.TryParse(line.Split(':')[1].Trim(), out offset)) { YOffsets.Add(offset); } } } } }
public TsCity(TsMapper mapper, string path) { _mapper = mapper; var file = _mapper.Rfs.GetFileEntry(path); if (file == null) { return; } LocalizedNames = new Dictionary <string, string>(); var fileContent = file.Entry.Read(); var lines = Encoding.UTF8.GetString(fileContent).Split('\n'); var offsetCount = 0; XOffsets = new List <int>(); YOffsets = new List <int>(); foreach (var line in lines) { var(validLine, key, value) = SiiHelper.ParseLine(line); if (!validLine) { continue; } if (key == "city_data") { Token = ScsHash.StringToToken(SiiHelper.Trim(value.Split('.')[1])); } else if (key == "city_name") { Name = line.Split('"')[1]; } else if (key == "city_name_localized") { LocalizationToken = value.Split('"')[1]; LocalizationToken = LocalizationToken.Replace("@", ""); } else if (key == "country") { Country = value; } else if (key.Contains("map_x_offsets[]")) { if (++offsetCount > 4) { if (int.TryParse(value, out var offset)) { XOffsets.Add(offset); } } if (offsetCount == 8) { offsetCount = 0; } } else if (key.Contains("map_y_offsets[]")) { if (++offsetCount > 4) { if (int.TryParse(value, out var offset)) { YOffsets.Add(offset); } } } } }
public TsMapRenderer(TsMapper mapper, MapPalette palette) { _mapper = mapper; _palette = palette; }
public TsMapRenderer(TsMapper mapper) { _mapper = mapper; }