Imports System.Runtime.CompilerServices
Imports Microsoft.VisualBasic.CompilerServices
Namespace Dofus.Pathfinding
Public Class Dofus1Line
' Methods
Public Shared Function GetLine(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As ArrayList
Dim num As Integer = 0
Dim pointd As Point3D = Nothing
Dim point As Point = Nothing
Dim num2 As Integer = 0
Dim num3 As Integer = 0
Dim d As Double = 0
Dim a As Double = 0
Dim num6 As Double = 0
Dim num7 As Double = 0
Dim num8 As Double = 0
Dim num9 As Double = 0
Dim num10 As Double = 0
Dim num11 As Double = 0
Dim num12 As UInt32 = 0
Dim num13 As UInt32 = 0
Dim list As New ArrayList
Dim pointd2 As New Point3D(CDbl(x1), CDbl(y1), 0)
Dim pointd3 As New Point3D(CDbl(x2), CDbl(y2), 0)
pointd = New Point3D((pointd2.X + 0.5), (pointd2.Y + 0.5), pointd2.Z)
Dim pointd4 As New Point3D((pointd3.X + 0.5), (pointd3.Y + 0.5), pointd3.Z)
Dim num14 As Double = 0
Dim num15 As Double = 0
Dim num16 As Double = 0
Dim list2 As New ArrayList
Dim list3 As New ArrayList
Dim num17 As UInt32 = 0
If (Math.Abs(CDbl((pointd.X - pointd4.X))) = Math.Abs(CDbl((pointd.Y - pointd4.Y)))) Then
num16 = Math.Abs(CDbl((pointd.X - pointd4.X)))
num14 = If((pointd4.X > pointd.X), CDbl(1), CDbl(-1))
num15 = If((pointd4.Y > pointd.Y), CDbl(1), CDbl(-1))
Dim num1 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 1
ElseIf (Math.Abs(CDbl((pointd.X - pointd4.X))) > Math.Abs(CDbl((pointd.Y - pointd4.Y)))) Then
num16 = Math.Abs(CDbl((pointd.X - pointd4.X)))
num14 = If((pointd4.X > pointd.X), CDbl(1), CDbl(-1))
num15 = If((pointd4.Y > pointd.Y), If((Math.Abs(CDbl((pointd.Y - pointd4.Y))) = 0), 0, (Math.Abs(CDbl((pointd.Y - pointd4.Y))) / num16)), (-Math.Abs(CDbl((pointd.Y - pointd4.Y))) / num16))
num15 = (num15 * 100)
num15 = (Math.Ceiling(num15) / 100)
Dim num18 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 2
Else
num16 = Math.Abs(CDbl((pointd.Y - pointd4.Y)))
num14 = If((pointd4.X > pointd.X), If((Math.Abs(CDbl((pointd.X - pointd4.X))) = 0), 0, (Math.Abs(CDbl((pointd.X - pointd4.X))) / num16)), (-Math.Abs(CDbl((pointd.X - pointd4.X))) / num16))
num14 = (num14 * 100)
num14 = (Math.Ceiling(num14) / 100)
num15 = If((pointd4.Y > pointd.Y), CDbl(1), CDbl(-1))
Dim num19 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 3
End If
For num = 0 To num16 - 1
num2 = CInt(Math.Round(Math.Floor(CDbl((3 + (num16 / 2))))))
num3 = CInt(Math.Round(Math.Floor(CDbl((97 - (num16 / 2))))))
Select Case num17
Case 2
d = (Math.Ceiling(CDbl(((pointd.Y * 100) + (num15 * 50)))) / 100)
a = (Math.Floor(CDbl(((pointd.Y * 100) + (num15 * 150)))) / 100)
num6 = (Math.Floor(Math.Abs(CDbl(((Math.Floor(d) * 100) - (d * 100))))) / 100)
num7 = (Math.Ceiling(Math.Abs(CDbl(((Math.Ceiling(a) * 100) - (a * 100))))) / 100)
If (Math.Floor(d) = Math.Floor(a)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
If (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
End If
ElseIf (Math.Ceiling(d) = Math.Ceiling(a)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
If (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
End If
ElseIf (Math.Floor(CDbl((num6 * 100))) <= num2) Then
Dim list4 As New ArrayList
list4.Add(Math.Floor(a))
list3 = list4
ElseIf (Math.Floor(CDbl((num7 * 100))) >= num3) Then
Dim list5 As New ArrayList
list5.Add(Math.Floor(d))
list3 = list5
Else
Dim list6 As New ArrayList
list6.Add(Math.Floor(d))
list6.Add(Math.Floor(a))
list3 = list6
End If
Exit Select
Case 3
num8 = (Math.Ceiling(CDbl(((pointd.X * 100) + (num14 * 50)))) / 100)
num9 = (Math.Floor(CDbl(((pointd.X * 100) + (num14 * 150)))) / 100)
num10 = (Math.Floor(Math.Abs(CDbl(((Math.Floor(num8) * 100) - (num8 * 100))))) / 100)
num11 = (Math.Ceiling(Math.Abs(CDbl(((Math.Ceiling(num9) * 100) - (num9 * 100))))) / 100)
If (Math.Floor(num8) = Math.Floor(num9)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
If (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
End If
ElseIf (Math.Ceiling(num8) = Math.Ceiling(num9)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
If (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
End If
ElseIf (Math.Floor(CDbl((num10 * 100))) <= num2) Then
list2 = Dofus1Line.smethod_0(New Object() {num9})
ElseIf (Math.Floor(CDbl((num11 * 100))) >= num3) Then
list2 = Dofus1Line.smethod_0(New Object() {num8})
Else
list2 = Dofus1Line.smethod_0(New Object() {num8, num9})
End If
Exit Select
End Select
If (list3.Count > 0) Then
num12 = 0
Do While (num12 < list3.Count)
point = New Point(Math.Floor(CDbl((pointd.X + num14))), Conversions.ToDouble(list3.Item(CInt(num12))))
list.Add(point)
num12 = (num12 + 1)
Loop
ElseIf (list2.Count > 0) Then
num13 = 0
Do While (num13 < list2.Count)
point = New Point(Conversions.ToDouble(list2.Item(CInt(num13))), Math.Floor(CDbl((pointd.Y + num15))))
list.Add(point)
num13 = (num13 + 1)
Loop
ElseIf (num17 = 1) Then
point = New Point(Math.Floor(CDbl((pointd.X + num14))), Math.Floor(CDbl((pointd.Y + num15))))
list.Add(point)
End If
pointd.X = (((pointd.X * 100) + (num14 * 100)) / 100)
pointd.Y = (((pointd.Y * 100) + (num15 * 100)) / 100)
Next num
Return list
End Function
Private Shared Function smethod_0(ByVal object_0 As Object()) As ArrayList
Dim list As New ArrayList
list.AddRange(object_0)
Return list
End Function
' Nested Types
Public Class Point
' Methods
Public Sub New(ByVal X As Double, ByVal Y As Double)
Me.X = X
Me.Y = Y
End Sub
' Properties
Public Property X As Double
Get
Return Me.double_0
End Get
Set(ByVal value As Double)
Me.double_0 = value
End Set
End Property
Public Property Y As Double
Get
Return Me.double_1
End Get
Set(ByVal value As Double)
Me.double_1 = value
End Set
End Property
' Fields
<CompilerGenerated> _
Private double_0 As Double
<CompilerGenerated> _
Private double_1 As Double
End Class
Public Class Point3D
' Methods
Public Sub New(ByVal X As Double, ByVal Y As Double, ByVal Z As Double)
Me.X = X
Me.Y = Y
Me.Z = Z
End Sub
' Properties
Public Property X As Double
Get
Return Me.double_0
End Get
Set(ByVal value As Double)
Me.double_0 = value
End Set
End Property
Public Property Y As Double
Get
Return Me.double_1
End Get
Set(ByVal value As Double)
Me.double_1 = value
End Set
End Property
Public Property Z As Double
Get
Return Me.double_2
End Get
Set(ByVal value As Double)
Me.double_2 = value
End Set
End Property
' Fields
<CompilerGenerated> _
Private double_0 As Double
<CompilerGenerated> _
Private double_1 As Double
<CompilerGenerated> _
Private double_2 As Double
End Class
End Class
End Namespace