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

View File

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