Тема: Обсуждение / Вопросы Перевод координат
Показать сообщение отдельно
Старый 09.04.2025, 14:21  
HiranoKohta
Нуб
Аватар для HiranoKohta
OFFLINE
Регистрация: 23.05.2024
Сообщений: 0
Благодарностей:
4 всего
Репутация: 13

Вопрос решил методом научного тыка:

Код VB.NET
Код:
    Private Maps() As Map

    Private Structure Map
        Public MapCode As String
        Public MapName As String
        Public Start As Point
        Public Scale As PointF
    End Structure

    Private Sub MapsInit()
        MapsAdd("NeutralA", "ГШ Акретов", -14969, 15581, 294.35, 294.6133)
        MapsAdd("NeutralAS1", "Застава 213", -9868, 10164, 205.4, 205.4875)
        MapsAdd("NeutralAS2", "Застава 117", -12180, 11986, 252.5625, 252.6375)
        MapsAdd("NeutralB", "ГШ Беллато", -10790, 11633, 226.725, 226.4125)
        MapsAdd("NeutralBS1", "Солус", -13151, 12204, 257.2875, 257.925)
        MapsAdd("NeutralBS2", "Анакаде", -9977, 9177, 189.4625, 189.425)
        MapsAdd("NeutralC", "ГШ Кор", -12112, 13038, 242.9625, 242.7625)
        MapsAdd("NeutralCS1", "Харам", -16872, 12425, 309.0125, 308.625)
        MapsAdd("NeutralCS2", "Нумерус", -11642, 18115, 248.75, 248.1111)
        MapsAdd("Resources", "Краговы Шахты", -15610, 14739, 255.7125, 255.75)
        MapsAdd("Sette", "Сеттова Пустыня", -6312, 6437, 131.075, 131.5125)
        MapsAdd("Platform01", "Этер", -12520, 13315, 263.575, 263.3875)
        MapsAdd("Medicallab", "Лаборатория Картела (1)", -9813, 4204, 111.6875, 65.3875)
        MapsAdd("Medicallab2", "Лаборатория Картела (2)", -9813, 4204, 111.6875, 65.3875)
        MapsAdd("Elan", "Элан", -8106, 7096, 161.6875, 161.675)
        MapsAdd("Cauldron01", "Вулкан Котёл", -5604, 6554, 118.5375, 118.375)
        MapsAdd("Exile_Land", "Земли изгнанников", -10149, 12150, 199.9875, 200.0127)
        MapsAdd("Mountain_Beast", "Горы Чудовищ", -10150, 10149, 200, 199.9875)
        MapsAdd("Cora", "Земля Эльфов")
        LastMapIndex = Maps.Length - 1
    End Sub

    Private Function WorldToMap(ByVal MapCode As String, ByVal WorldPoint As Point) As Point
        Dim X As Single = 1, Y As Single = 1
        For Each Map In Maps
            If Map.MapCode = MapCode Then
                X = Int(4 * (WorldPoint.X - Map.Start.X) / Map.Scale.X)
                Y = Int(4 * (Map.Start.Y - WorldPoint.Y) / Map.Scale.Y)
            End If
        Next
        Return New Point(X, Y)
    End Function

    Private Sub MapsAdd(ByVal MapCode As String, ByVal MapName As String, Optional ByVal X As Integer = 0, Optional ByVal Y As Integer = 0, Optional ByVal SX As Single = 1, Optional ByVal SY As Single = 1)
        Dim I As Integer
        For I = 0 To Maps.Length - 1
            If Maps(I).MapCode = MapCode Then
                Exit For
            End If
        Next I
        If I = Maps.Length Then
            ReDim Preserve Maps(I)
            With Maps(I)
                .MapCode = MapCode
                .MapName = MapName
                .Start.X = X
                .Start.Y = Y
                .Scale.X = SX
                .Scale.Y = SY
            End With
        End If
    End Sub
 
Ответить с цитированием
Сказали спасибо:
Diantro (17.04.2025), DungeonKeeper (09.04.2025)