Fix EntityMove Battle Animation Type

This commit is contained in:
JappaWakka 2023-06-23 11:03:39 +02:00
parent 030f5a5c74
commit d96152d133
2 changed files with 142 additions and 69 deletions

View File

@ -2,11 +2,14 @@
Inherits BattleAnimation3D Inherits BattleAnimation3D
Public StartPosition As Vector3
Public TargetEntity As Entity Public TargetEntity As Entity
Public Destination As Vector3 Public Destination As Vector3
Public MoveDistance As New Vector3(0.0F)
Public MoveSpeed As Single Public MoveSpeed As Single
Public MoveYSpeed As Single Public MoveYSpeed As Single
Public InterpolationSpeed As Single Public InterpolationSpeed As Single
Public InterpolationYSpeed As Single
Public SpinX As Boolean = False Public SpinX As Boolean = False
Public SpinZ As Boolean = False Public SpinZ As Boolean = False
Public SpinSpeedX As Single = 0.1F Public SpinSpeedX As Single = 0.1F
@ -15,6 +18,7 @@
Private EasedIn As Boolean = False Private EasedIn As Boolean = False
Private EasedOut As Boolean = False Private EasedOut As Boolean = False
Public RemoveEntityAfter As Boolean Public RemoveEntityAfter As Boolean
Dim ReadyAxis As Vector3 = New Vector3(0.0F)
Public Enum Curves As Integer Public Enum Curves As Integer
EaseIn EaseIn
EaseOut EaseOut
@ -24,7 +28,6 @@
Public Sub New(ByRef Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3, Optional MoveYSpeed As Single = 0.0F) Public Sub New(ByRef Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3, Optional MoveYSpeed As Single = 0.0F)
MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay)
Me.RemoveEntityAfter = RemoveEntityAfter Me.RemoveEntityAfter = RemoveEntityAfter
Me.Destination = Destination Me.Destination = Destination
Me.MoveSpeed = Speed Me.MoveSpeed = Speed
@ -43,15 +46,29 @@
Me.Visible = False Me.Visible = False
Me.TargetEntity = Entity Me.TargetEntity = Entity
Me.StartPosition = TargetEntity.Position
Me.MoveDistance.X = Math.Abs(Me.StartPosition.X - Me.Destination.X)
If TargetEntity.Model IsNot Nothing Then
Me.MoveDistance.Y = Math.Abs(Me.StartPosition.Y - Me.Destination.Y - 0.5F)
Else
Me.MoveDistance.Y = Math.Abs(Me.StartPosition.Y - Me.Destination.Y)
End If
Me.MoveDistance.Z = Math.Abs(Me.StartPosition.Z - Me.Destination.Z)
Select Case MovementCurve Select Case MovementCurve
Case Curves.EaseIn Case Curves.EaseIn
InterpolationSpeed = 0.0F InterpolationSpeed = 0.0F
InterpolationYSpeed = 0.0F
Case Curves.EaseOut Case Curves.EaseOut
InterpolationSpeed = MoveSpeed InterpolationSpeed = MoveSpeed
InterpolationYSpeed = MoveYSpeed
Case Curves.EaseInAndOut Case Curves.EaseInAndOut
InterpolationSpeed = 0.0F InterpolationSpeed = 0.0F
InterpolationYSpeed = 0.0F
Case Curves.Linear Case Curves.Linear
InterpolationSpeed = MoveSpeed InterpolationSpeed = MoveSpeed
InterpolationYSpeed = MoveYSpeed
End Select End Select
Me.AnimationType = AnimationTypes.Move Me.AnimationType = AnimationTypes.Move
@ -84,118 +101,175 @@
Select Case MovementCurve Select Case MovementCurve
Case Curves.EaseIn Case Curves.EaseIn
If EasedIn = False Then If EasedIn = False Then
If InterpolationSpeed < MoveSpeed OrElse InterpolationYSpeed < MoveYSpeed Then
If InterpolationSpeed < MoveSpeed Then If InterpolationSpeed < MoveSpeed Then
InterpolationSpeed += MoveSpeed / 10 InterpolationSpeed += MoveSpeed / 10
End If
If InterpolationYSpeed < MoveYSpeed Then
InterpolationYSpeed += MoveYSpeed / 10
End If
Else Else
EasedIn = True
InterpolationSpeed = MoveSpeed InterpolationSpeed = MoveSpeed
InterpolationYSpeed = MoveYSpeed
EasedIn = True
End If End If
End If End If
Case Curves.EaseOut Case Curves.EaseOut
If EasedOut = False Then If EasedOut = False Then
If InterpolationSpeed > 0 OrElse InterpolationYSpeed > 0 Then
If InterpolationSpeed > 0 Then If InterpolationSpeed > 0 Then
InterpolationSpeed -= MoveSpeed / 10 InterpolationSpeed -= MoveSpeed / 10
End If
If InterpolationYSpeed > 0 Then
InterpolationYSpeed -= MoveYSpeed / 10
End If
Else Else
EasedOut = True InterpolationYSpeed = 0
InterpolationSpeed = 0 InterpolationSpeed = 0
EasedOut = True
End If End If
End If End If
Case Curves.EaseInAndOut Case Curves.EaseInAndOut
If EasedIn = False Then If EasedIn = False Then
If InterpolationSpeed < MoveSpeed OrElse InterpolationYSpeed < MoveYSpeed Then
If InterpolationSpeed < MoveSpeed Then If InterpolationSpeed < MoveSpeed Then
InterpolationSpeed += MoveSpeed / 10 InterpolationSpeed += MoveSpeed / 10
End If
If InterpolationYSpeed < MoveYSpeed Then
InterpolationYSpeed += MoveYSpeed / 10
End If
Else Else
EasedIn = True
InterpolationSpeed = MoveSpeed InterpolationSpeed = MoveSpeed
InterpolationYSpeed = MoveYSpeed
EasedIn = True
End If End If
Else Else
If EasedOut = False Then If EasedOut = False Then
If InterpolationSpeed > 0 OrElse InterpolationYSpeed > 0 Then
If InterpolationSpeed > 0 Then If InterpolationSpeed > 0 Then
InterpolationSpeed -= MoveSpeed / 10 InterpolationSpeed -= MoveSpeed / 10
End If
If InterpolationYSpeed > 0 Then
InterpolationYSpeed -= MoveYSpeed / 10
End If
Else Else
EasedOut = True InterpolationYSpeed = 0
InterpolationSpeed = 0 InterpolationSpeed = 0
EasedOut = True
End If End If
End If End If
End If End If
End Select End Select
If MovementCurve = Curves.Linear Then If MovementCurve = Curves.Linear Then
If TargetEntity.Position.X < Me.Destination.X Then If MoveDistance.X > 0.05F Then
If StartPosition.X < Me.Destination.X Then
TargetEntity.Position.X += Me.MoveSpeed TargetEntity.Position.X += Me.MoveSpeed
If TargetEntity.Position.X >= Me.Destination.X - 0.05 Then If TargetEntity.Position.X >= Me.Destination.X + 0.05 Then
TargetEntity.Position.X = Me.Destination.X TargetEntity.Position.X = Me.Destination.X
End If End If
ElseIf TargetEntity.Position.X > Me.Destination.X Then ElseIf StartPosition.X > Me.Destination.X Then
TargetEntity.Position.X -= Me.MoveSpeed TargetEntity.Position.X -= Me.MoveSpeed
If TargetEntity.Position.X <= Me.Destination.X + 0.05 Then If TargetEntity.Position.X <= Me.Destination.X + 0.05 Then
TargetEntity.Position.X = Me.Destination.X TargetEntity.Position.X = Me.Destination.X
End If End If
End If End If
If TargetEntity.Position.Y < Me.Destination.Y + DestinationOffset.Y Then MoveDistance.X -= Me.MoveSpeed
Else
ReadyAxis.X = 1.0F
End If
If MoveDistance.Y > 0.05F Then
If StartPosition.Y < Me.Destination.Y + DestinationOffset.Y Then
TargetEntity.Position.Y += Me.MoveYSpeed TargetEntity.Position.Y += Me.MoveYSpeed
If TargetEntity.Position.Y >= Me.Destination.Y + DestinationOffset.Y - 0.05 Then If TargetEntity.Position.Y >= Me.Destination.Y + DestinationOffset.Y - 0.05 Then
TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y
End If End If
ElseIf TargetEntity.Position.Y > Me.Destination.Y + DestinationOffset.Y Then ElseIf StartPosition.Y > Me.Destination.Y + DestinationOffset.Y Then
TargetEntity.Position.Y -= Me.MoveYSpeed TargetEntity.Position.Y -= Me.MoveYSpeed
If TargetEntity.Position.Y <= Me.Destination.Y + DestinationOffset.Y + 0.05 Then If TargetEntity.Position.Y <= Me.Destination.Y + DestinationOffset.Y + 0.05 Then
TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y
End If End If
End If End If
If TargetEntity.Position.Z < Me.Destination.Z Then MoveDistance.Y -= Me.MoveYSpeed
Else
ReadyAxis.Y = 1.0F
End If
If MoveDistance.Z > 0.05F Then
If StartPosition.Z < Me.Destination.Z Then
TargetEntity.Position.Z += Me.MoveSpeed TargetEntity.Position.Z += Me.MoveSpeed
If TargetEntity.Position.Z >= Me.Destination.Z - 0.05 Then If TargetEntity.Position.Z >= Me.Destination.Z - 0.05 Then
TargetEntity.Position.Z = Me.Destination.Z TargetEntity.Position.Z = Me.Destination.Z
End If End If
ElseIf TargetEntity.Position.Z > Me.Destination.Z Then ElseIf StartPosition.Z > Me.Destination.Z Then
TargetEntity.Position.Z -= Me.MoveSpeed TargetEntity.Position.Z -= Me.MoveSpeed
If TargetEntity.Position.Z <= Me.Destination.Z + 0.05 Then If TargetEntity.Position.Z <= Me.Destination.Z + 0.05 Then
TargetEntity.Position.Z = Me.Destination.Z TargetEntity.Position.Z = Me.Destination.Z
End If End If
End If End If
MoveDistance.Z -= Me.MoveYSpeed
Else Else
If TargetEntity.Position.X < Me.Destination.X Then ReadyAxis.Z = 1.0F
End If
Else
If MoveDistance.X > 0.05F Then
If StartPosition.X < Me.Destination.X Then
TargetEntity.Position.X = MathHelper.Lerp(TargetEntity.Position.X, Me.Destination.X, Me.InterpolationSpeed) TargetEntity.Position.X = MathHelper.Lerp(TargetEntity.Position.X, Me.Destination.X, Me.InterpolationSpeed)
If TargetEntity.Position.X > Me.Destination.X - 0.05 Then If TargetEntity.Position.X > Me.Destination.X - 0.05 Then
TargetEntity.Position.X = Me.Destination.X TargetEntity.Position.X = Me.Destination.X
End If End If
ElseIf TargetEntity.Position.X > Me.Destination.X Then ElseIf StartPosition.X > Me.Destination.X Then
TargetEntity.Position.X = MathHelper.Lerp(TargetEntity.Position.X, Me.Destination.X, Me.InterpolationSpeed) TargetEntity.Position.X = MathHelper.Lerp(TargetEntity.Position.X, Me.Destination.X, Me.InterpolationSpeed)
If TargetEntity.Position.X < Me.Destination.X + 0.05 Then If TargetEntity.Position.X < Me.Destination.X + 0.05 Then
TargetEntity.Position.X = Me.Destination.X TargetEntity.Position.X = Me.Destination.X
End If End If
End If End If
If TargetEntity.Position.Y < Me.Destination.Y + DestinationOffset.Y Then MoveDistance.X = MathHelper.Lerp(MoveDistance.X, 0.0F, Me.InterpolationSpeed)
Else
ReadyAxis.X = 1.0F
End If
If MoveDistance.Y > 0.05F Then
If StartPosition.Y < Me.Destination.Y + DestinationOffset.Y Then
TargetEntity.Position.Y = MathHelper.Lerp(TargetEntity.Position.Y, Me.Destination.Y + DestinationOffset.Y, Me.InterpolationSpeed) TargetEntity.Position.Y = MathHelper.Lerp(TargetEntity.Position.Y, Me.Destination.Y + DestinationOffset.Y, Me.InterpolationSpeed)
If TargetEntity.Position.Y > Me.Destination.Y + DestinationOffset.Y - 0.05 Then If TargetEntity.Position.Y > Me.Destination.Y + DestinationOffset.Y - 0.05 Then
TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y
End If End If
ElseIf TargetEntity.Position.Y > Me.Destination.Y + DestinationOffset.Y Then ElseIf StartPosition.Y > Me.Destination.Y + DestinationOffset.Y Then
TargetEntity.Position.Y = MathHelper.Lerp(TargetEntity.Position.Y, Me.Destination.Y + DestinationOffset.Y, Me.InterpolationSpeed) TargetEntity.Position.Y = MathHelper.Lerp(TargetEntity.Position.Y, Me.Destination.Y + DestinationOffset.Y, Me.InterpolationSpeed)
If TargetEntity.Position.Y < Me.Destination.Y + DestinationOffset.Y + 0.05 Then If TargetEntity.Position.Y < Me.Destination.Y + DestinationOffset.Y + 0.05 Then
TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y TargetEntity.Position.Y = Me.Destination.Y + DestinationOffset.Y
End If End If
End If End If
If TargetEntity.Position.Z < Me.Destination.Z Then MoveDistance.Y = MathHelper.Lerp(MoveDistance.Y, 0.0F, Me.InterpolationSpeed)
Else
ReadyAxis.Y = 1.0F
End If
If MoveDistance.Z > 0.05F Then
If StartPosition.Z < Me.Destination.Z Then
TargetEntity.Position.Z = MathHelper.Lerp(TargetEntity.Position.Z, Me.Destination.Z, Me.InterpolationSpeed) TargetEntity.Position.Z = MathHelper.Lerp(TargetEntity.Position.Z, Me.Destination.Z, Me.InterpolationSpeed)
If TargetEntity.Position.Z > Me.Destination.Z - 0.05 Then If TargetEntity.Position.Z > Me.Destination.Z - 0.05 Then
TargetEntity.Position.Z = Me.Destination.Z TargetEntity.Position.Z = Me.Destination.Z
End If End If
ElseIf TargetEntity.Position.Z > Me.Destination.Z Then ElseIf StartPosition.Z > Me.Destination.Z Then
TargetEntity.Position.Z = MathHelper.Lerp(TargetEntity.Position.Z, Me.Destination.Z, Me.InterpolationSpeed) TargetEntity.Position.Z = MathHelper.Lerp(TargetEntity.Position.Z, Me.Destination.Z, Me.InterpolationSpeed)
If TargetEntity.Position.Z < Me.Destination.Z + 0.05 Then If TargetEntity.Position.Z < Me.Destination.Z + 0.05 Then
TargetEntity.Position.Z = Me.Destination.Z TargetEntity.Position.Z = Me.Destination.Z
End If End If
End If End If
Else
ReadyAxis.Z = 1.0F
End If End If
If TargetEntity.Position = Destination + DestinationOffset Then
End If
If ReadyAxis.X = 1.0F AndAlso ReadyAxis.Y = 1.0F AndAlso ReadyAxis.Z = 1.0F Then
Me.Ready = True Me.Ready = True
End If End If
End Sub End Sub

View File

@ -163,7 +163,6 @@
MoveEntity = Entity MoveEntity = Entity
End If End If
If Not BattleFlipped = Nothing Then If Not BattleFlipped = Nothing Then
If BattleFlipped = True Then If BattleFlipped = True Then
DestinationX *= -1.0F DestinationX *= -1.0F