Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        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}");
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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();
        }
Пример #6
0
 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);
 }
Пример #7
0
        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();
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
                        }
                    }
                }
            }
        }
Пример #10
0
        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);
                        }
                    }
                }
            }
        }
Пример #11
0
 public TsMapRenderer(TsMapper mapper, MapPalette palette)
 {
     _mapper  = mapper;
     _palette = palette;
 }
Пример #12
0
 public TsMapRenderer(TsMapper mapper)
 {
     _mapper = mapper;
 }