357 lines
15 KiB
VB.net
357 lines
15 KiB
VB.net
Imports System.Xml
|
|
|
|
Namespace BattleSystem
|
|
|
|
Public Class AnimationQueryObject
|
|
Inherits QueryObject
|
|
|
|
Public AnimationStarted As Boolean = False
|
|
Public AnimationEnded As Boolean = False
|
|
Public BattleFlipped As Boolean = Nothing
|
|
Public AnimationSequence As List(Of BattleAnimation3D)
|
|
Public SpawnedEntities As List(Of Entity)
|
|
Public CurrentEntity As Entity
|
|
Public StartPosition As New Vector3(0)
|
|
Public DrawBeforeEntities As Boolean
|
|
|
|
Public Overrides ReadOnly Property IsReady As Boolean
|
|
Get
|
|
Return AnimationEnded
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub New(ByVal entity As Entity, ByVal BattleFlipped As Boolean, Optional DrawBeforeEntities As Boolean = False)
|
|
MyBase.New(QueryTypes.MoveAnimation)
|
|
Me.AnimationSequence = New List(Of BattleAnimation3D)
|
|
Me.SpawnedEntities = New List(Of Entity)
|
|
Me.DrawBeforeEntities = DrawBeforeEntities
|
|
Me.BattleFlipped = BattleFlipped
|
|
If entity IsNot Nothing Then
|
|
Me.CurrentEntity = entity
|
|
Me.StartPosition = entity.Position
|
|
End If
|
|
AnimationSequenceBegin()
|
|
End Sub
|
|
Public Overrides Sub Draw(ByVal BV2Screen As BattleScreen)
|
|
Dim Backgrounds As New List(Of Entity)
|
|
|
|
Dim RenderObjects As New List(Of Entity)
|
|
For Each a As BattleAnimation3D In Me.AnimationSequence
|
|
If a.AnimationType = BattleAnimation3D.AnimationTypes.Background Then
|
|
Backgrounds.Add(a)
|
|
End If
|
|
Next
|
|
For Each entity As BattleAnimation3D In Me.SpawnedEntities
|
|
RenderObjects.Add(entity)
|
|
Next
|
|
If RenderObjects.Count > 0 Then
|
|
RenderObjects = (From r In RenderObjects Order By r.CameraDistance Descending).ToList()
|
|
End If
|
|
For Each [Object] As Entity In Backgrounds
|
|
[Object].Render()
|
|
Next
|
|
For Each [Object] As Entity In RenderObjects
|
|
[Object].UpdateModel()
|
|
[Object].Render()
|
|
Next
|
|
End Sub
|
|
|
|
Public Overrides Sub Update(BV2Screen As BattleScreen)
|
|
If AnimationStarted = True Then
|
|
For i = 0 To AnimationSequence.Count - 1
|
|
If i <= AnimationSequence.Count - 1 Then
|
|
Dim a As BattleAnimation3D = AnimationSequence(i)
|
|
If a.CanRemove = True Then
|
|
i -= 1
|
|
AnimationSequence.Remove(a)
|
|
Else
|
|
a.Update()
|
|
End If
|
|
End If
|
|
Next
|
|
If AnimationSequence.Count <= 0 Then
|
|
AnimationSequenceEnd()
|
|
End If
|
|
|
|
For Each Animation As BattleAnimation3D In AnimationSequence
|
|
Animation.UpdateEntity()
|
|
Next
|
|
For Each Entity As Entity In SpawnedEntities
|
|
Entity.Update()
|
|
Entity.UpdateEntity()
|
|
Next
|
|
For i = 0 To Me.SpawnedEntities.Count - 1
|
|
If i <= SpawnedEntities.Count - 1 Then
|
|
Dim entity As Entity = SpawnedEntities(i)
|
|
|
|
If entity.CanBeRemoved = True Then
|
|
i -= 1
|
|
RemoveEntity(entity)
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub AnimationSequenceBegin()
|
|
AnimationStarted = True
|
|
End Sub
|
|
|
|
Public Sub AnimationSequenceEnd()
|
|
AnimationEnded = True
|
|
End Sub
|
|
|
|
Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F, Optional ModelPath As String = "") As Entity
|
|
Dim NewPosition As Vector3
|
|
If Not Position = Nothing Then
|
|
If CurrentEntity IsNot Nothing Then
|
|
If BattleFlipped = True Then
|
|
Position.X *= -1
|
|
End If
|
|
NewPosition = CurrentEntity.Position + Position
|
|
Else
|
|
NewPosition = Position
|
|
End If
|
|
Else
|
|
If CurrentEntity IsNot Nothing Then
|
|
NewPosition = CurrentEntity.Position
|
|
Else
|
|
NewPosition = New Vector3(0, 0, 0)
|
|
End If
|
|
End If
|
|
Dim SpawnedEntity = New BattleAnimation3D(NewPosition, Texture, Scale, startDelay, endDelay, False)
|
|
SpawnedEntity.Opacity = Opacity
|
|
SpawnedEntity.Visible = False
|
|
|
|
If ModelPath <> "" Then
|
|
SpawnedEntity.ModelPath = ModelPath
|
|
SpawnedEntity.Model = ModelManager.GetModel(SpawnedEntity.ModelPath)
|
|
SpawnedEntity.Scale *= ModelManager.MODELSCALE
|
|
If BattleFlipped = True Then
|
|
Dim FlipRotation As Integer = Entity.GetRotationFromVector(SpawnedEntity.Rotation)
|
|
FlipRotation += 2
|
|
If FlipRotation > 3 Then
|
|
FlipRotation -= 4
|
|
End If
|
|
SpawnedEntity.Rotation.Y = Entity.GetRotationFromInteger(FlipRotation).Y
|
|
End If
|
|
End If
|
|
SpawnedEntities.Add(SpawnedEntity)
|
|
|
|
Return SpawnedEntity
|
|
End Function
|
|
Public Sub RemoveEntity(Entity As Entity)
|
|
SpawnedEntities.Remove(Entity)
|
|
End Sub
|
|
Public Sub AnimationChangeTexture(ByVal Entity As Entity, RemoveEntityAfter As Boolean, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single)
|
|
Dim TextureChangeEntity As Entity
|
|
|
|
If Entity Is Nothing Then
|
|
TextureChangeEntity = CurrentEntity
|
|
Else
|
|
TextureChangeEntity = Entity
|
|
End If
|
|
|
|
Dim baEntityTextureChange As BAEntityTextureChange = New BAEntityTextureChange(TextureChangeEntity, RemoveEntityAfter, Texture, startDelay, endDelay)
|
|
AnimationSequence.Add(baEntityTextureChange)
|
|
|
|
End Sub
|
|
|
|
Public Sub AnimationMove(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, 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 MoveYSpeed As Single = 0.0F, Optional MovementCurve As Integer = 3)
|
|
Dim MoveEntity As Entity
|
|
Dim Destination As Vector3
|
|
|
|
If Entity Is Nothing Then
|
|
MoveEntity = CurrentEntity
|
|
Else
|
|
MoveEntity = Entity
|
|
End If
|
|
|
|
If Not BattleFlipped = Nothing Then
|
|
If BattleFlipped = True Then
|
|
DestinationX *= -1.0F
|
|
|
|
If SpinZ = True Then
|
|
SpinXSpeed *= -1.0F
|
|
SpinZSpeed *= -1.0F
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If CurrentEntity Is Nothing Then
|
|
Destination = MoveEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ)
|
|
Else
|
|
Destination = CurrentEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ)
|
|
End If
|
|
|
|
|
|
Dim baEntityMove As BAEntityMove = New BAEntityMove(MoveEntity, RemoveEntityAfter, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve, MoveYSpeed)
|
|
AnimationSequence.Add(baEntityMove)
|
|
|
|
End Sub
|
|
Public Sub AnimationOscillateMove(ByRef Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Distance As Vector3, ByVal Speed As Single, ByVal BothWays As Boolean, ByVal Duration As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional MovementCurve As Integer = 0, Optional ReturnToStart As Vector3 = Nothing)
|
|
Dim MoveEntity As Entity
|
|
Dim ReturnPosition As New Vector3(0)
|
|
|
|
If Entity Is Nothing Then
|
|
MoveEntity = CurrentEntity
|
|
Else
|
|
MoveEntity = Entity
|
|
End If
|
|
|
|
If Not BattleFlipped = Nothing Then
|
|
If BattleFlipped = True Then
|
|
Distance.Z *= -1.0F
|
|
End If
|
|
End If
|
|
|
|
Dim DurationWhole = CSng(Math.Truncate(CDbl(Duration / 6.0F)))
|
|
Dim DurationFraction = CSng((Duration / 6.0F - DurationWhole) * 1000)
|
|
Dim DurationTime As TimeSpan = New TimeSpan(0, 0, 0, CInt(DurationWhole), CInt(DurationFraction))
|
|
Dim baEntityOscillateMove As BAEntityOscillateMove = New BAEntityOscillateMove(MoveEntity, RemoveEntityAfter, Distance, Speed, BothWays, DurationTime, startDelay, endDelay, MovementCurve, ReturnToStart)
|
|
AnimationSequence.Add(baEntityOscillateMove)
|
|
|
|
End Sub
|
|
|
|
Public Sub AnimationSetPosition(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal startDelay As Single, ByVal endDelay As Single)
|
|
Dim SetEntity As Entity
|
|
Dim SetPosition As Vector3
|
|
|
|
If Entity Is Nothing Then
|
|
SetEntity = CurrentEntity
|
|
Else
|
|
SetEntity = Entity
|
|
End If
|
|
|
|
SetPosition = New Vector3(PositionX, PositionY, PositionZ) + BattleScreen.BattleMapOffset
|
|
|
|
Dim baEntitySetPosition As BAEntitySetPosition = New BAEntitySetPosition(SetEntity, RemoveEntityAfter, SetPosition, startDelay, endDelay)
|
|
AnimationSequence.Add(baEntitySetPosition)
|
|
|
|
End Sub
|
|
|
|
Public Sub AnimationColor(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeedIn As Single, ByVal ReturnToFromWhenDone As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, ByVal VectorColorTo As Vector3, Optional ByVal VectorColorFrom As Vector3 = Nothing, Optional TransitionSpeedOut As Single = -1)
|
|
Dim ColorEntity As Entity
|
|
If Entity Is Nothing Then
|
|
ColorEntity = CurrentEntity
|
|
Else
|
|
ColorEntity = Entity
|
|
End If
|
|
Dim baEntityColor As BAEntityColor = New BAEntityColor(ColorEntity, RemoveEntityAfter, TransitionSpeedIn, ReturnToFromWhenDone, startDelay, endDelay, VectorColorTo, VectorColorFrom, TransitionSpeedOut)
|
|
AnimationSequence.Add(baEntityColor)
|
|
End Sub
|
|
|
|
Public Sub AnimationColor(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeedIn As Single, ByVal ReturnToFromWhenDone As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, ByVal ColorTo As Color, Optional ByVal ColorFrom As Color = Nothing, Optional TransitionSpeedOut As Single = -1)
|
|
Dim ColorEntity As Entity
|
|
If Entity Is Nothing Then
|
|
ColorEntity = CurrentEntity
|
|
Else
|
|
ColorEntity = Entity
|
|
End If
|
|
Dim VectorColorTo As Vector3 = ColorTo.ToVector3
|
|
Dim VectorColorFrom As Vector3 = Nothing
|
|
If ColorFrom <> Nothing Then
|
|
VectorColorFrom = ColorFrom.ToVector3
|
|
End If
|
|
|
|
Dim baEntityColor As BAEntityColor = New BAEntityColor(ColorEntity, RemoveEntityAfter, TransitionSpeedIn, ReturnToFromWhenDone, startDelay, endDelay, VectorColorTo, VectorColorFrom, TransitionSpeedOut)
|
|
AnimationSequence.Add(baEntityColor)
|
|
End Sub
|
|
|
|
Public Sub AnimationFade(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F)
|
|
Dim FadeEntity As Entity
|
|
If Entity Is Nothing Then
|
|
FadeEntity = CurrentEntity
|
|
Else
|
|
FadeEntity = Entity
|
|
End If
|
|
If startState = -1 Then startState = FadeEntity.NormalOpacity
|
|
Dim baEntityOpacity As BAEntityOpacity = New BAEntityOpacity(FadeEntity, RemoveEntityAfter, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState)
|
|
AnimationSequence.Add(baEntityOpacity)
|
|
|
|
End Sub
|
|
|
|
Public Sub AnimationRotate(Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean)
|
|
Dim RotateEntity As Entity
|
|
If Entity Is Nothing Then
|
|
RotateEntity = CurrentEntity
|
|
Else
|
|
RotateEntity = Entity
|
|
End If
|
|
|
|
Dim RotationSpeedVector As Vector3 = New Vector3(RotationSpeedX, RotationSpeedY, RotationSpeedZ)
|
|
Dim EndRotation As Vector3 = New Vector3(EndRotationX, EndRotationY, EndRotationZ)
|
|
Dim baEntityRotate As BAEntityRotate = New BAEntityRotate(RotateEntity, RemoveEntityAfter, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn)
|
|
AnimationSequence.Add(baEntityRotate)
|
|
|
|
End Sub
|
|
|
|
Public Sub AnimationTurnNPC(ByVal TurnSteps As Integer, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal EndFaceRotation As Integer = -1, Optional ByVal TurnSpeed As Integer = 1, Optional ByVal TurnDelay As Single = 0.25F)
|
|
Dim TurnNPC As NPC = Nothing
|
|
If CurrentEntity IsNot Nothing Then
|
|
TurnNPC = CType(CurrentEntity, NPC)
|
|
End If
|
|
|
|
If Not BattleFlipped = Nothing AndAlso BattleFlipped = True Then
|
|
EndFaceRotation += 2
|
|
TurnSpeed *= -1
|
|
End If
|
|
|
|
Dim BAEntityFaceRotate As BAEntityFaceRotate = New BAEntityFaceRotate(TurnNPC, TurnSteps, startDelay, endDelay, EndFaceRotation, TurnSpeed, TurnDelay)
|
|
AnimationSequence.Add(BAEntityFaceRotate)
|
|
|
|
End Sub
|
|
Public Sub AnimationScale(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "")
|
|
Dim ScaleEntity As Entity
|
|
If Entity Is Nothing Then
|
|
ScaleEntity = CurrentEntity
|
|
If ScaleEntity.Model IsNot Nothing Then
|
|
EndSizeX *= ModelManager.MODELSCALE
|
|
EndSizeY *= ModelManager.MODELSCALE
|
|
EndSizeZ *= ModelManager.MODELSCALE
|
|
SizeSpeed *= ModelManager.MODELSCALE
|
|
End If
|
|
Else
|
|
ScaleEntity = Entity
|
|
End If
|
|
|
|
Dim Scale As Vector3 = ScaleEntity.Scale
|
|
Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ)
|
|
Dim baEntityScale As BAEntityScale = New BAEntityScale(ScaleEntity, RemoveEntityAfter, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors)
|
|
AnimationSequence.Add(baEntityScale)
|
|
End Sub
|
|
|
|
Public Sub AnimationPlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False, Optional ByVal CrySuffix As String = "")
|
|
Dim baSound As BAPlaySound = New BAPlaySound(sound, startDelay, endDelay, stopMusic, IsPokemon, CrySuffix)
|
|
AnimationSequence.Add(baSound)
|
|
End Sub
|
|
|
|
Public Sub AnimationBackground(ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Duration As Single, Optional ByVal AfterFadeInOpacity As Single = 1.0F, Optional ByVal FadeInSpeed As Single = 0.125F, Optional ByVal FadeOutSpeed As Single = 0.125F, Optional ByVal DoTile As Boolean = False, Optional ByVal AnimationLength As Integer = 1, Optional ByVal AnimationSpeed As Integer = 4, Optional ByVal Scale As Integer = 4)
|
|
Dim baBackground As BABackground = New BABackground(Texture, startDelay, endDelay, Duration, AfterFadeInOpacity, FadeInSpeed, FadeOutSpeed, DoTile, AnimationLength, AnimationSpeed, Scale)
|
|
AnimationSequence.Add(baBackground)
|
|
End Sub
|
|
|
|
Public Sub AnimationCameraChangeAngle(ByRef Battlescreen As BattleScreen, ByVal CameraAngleID As Integer, ByVal startDelay As Single, ByVal endDelay As Single)
|
|
Dim baCameraChangeAngle As BACameraChangeAngle = New BACameraChangeAngle(Battlescreen, CameraAngleID, startDelay, endDelay)
|
|
AnimationSequence.Add(baCameraChangeAngle)
|
|
End Sub
|
|
|
|
Public Sub AnimationCameraOscillateMove(ByVal Distance As Vector3, ByVal Speed As Single, ByVal BothWays As Boolean, ByVal Duration As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional MovementCurve As Integer = 0, Optional ReturnToStart As Vector3 = Nothing)
|
|
Dim ReturnPosition As New Vector3(0)
|
|
|
|
If Not BattleFlipped = Nothing Then
|
|
If BattleFlipped = True Then
|
|
Distance.Z *= -1.0F
|
|
End If
|
|
End If
|
|
|
|
Dim DurationWhole = CSng(Math.Truncate(CDbl(Duration / 6.0F)))
|
|
Dim DurationFraction = CSng((Duration / 6.0F - DurationWhole) * 1000)
|
|
Dim DurationTime As TimeSpan = New TimeSpan(0, 0, 0, CInt(DurationWhole), CInt(DurationFraction))
|
|
Dim baCameraOscillateMove As BACameraOscillateMove = New BACameraOscillateMove(Distance, Speed, BothWays, DurationTime, startDelay, endDelay, MovementCurve, ReturnToStart)
|
|
AnimationSequence.Add(baCameraOscillateMove)
|
|
|
|
End Sub
|
|
|
|
End Class
|
|
End Namespace |