diff --git a/P3D/Battle/BattleAnimations/BABackground.vb b/P3D/Battle/BattleAnimations/BABackground.vb index 7cb14db5b..cee621738 100644 --- a/P3D/Battle/BattleAnimations/BABackground.vb +++ b/P3D/Battle/BattleAnimations/BABackground.vb @@ -2,59 +2,108 @@ Inherits BattleAnimation3D - Public TransitionSpeed As Single = 0.01F - Public FadeIn As Boolean = False - Public FadeOut As Boolean = False - Public BackgroundOpacity As Single = 1.0F - Public EndState As Single = 0.0F + Public Duration As Single = 2.0F + Public FadeInSpeed As Single = 0.01F + Public FadeOutSpeed As Single = 0.01F + Public BackgroundOpacity As Single = 0.0F Public Texture As Texture2D + Public DoTile As Boolean = False + Public AnimationWidth As Integer = -1 + Public AnimationLength As Integer = 1 + Public AnimationSpeed As Integer = 16 + Public AfterFadeInOpacity As Single = 1.0F + Public FadeProgress As FadeSteps = FadeSteps.FadeIn + Private DurationDate As Date + Private DurationWhole As Single + Private DurationFraction As Single + Private BackgroundAnimation As Animation + Private CurrentRectangle As New Rectangle(0, 0, 0, 0) + Private TextureScale As Integer = 4 - Public Sub New(ByVal Texture As Texture2D, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal StartState As Single = 0.0F) + Public Enum FadeSteps As Integer + FadeIn + Duration + FadeOut + End Enum + + Public Sub New(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 AnimationWidth As Integer = -1, Optional ByVal AnimationLength As Integer = 1, Optional ByVal AnimationSpeed As Integer = 2, Optional TextureScale As Integer = 4) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) Me.Texture = Texture - Me.EndState = EndState - Me.FadeIn = FadeIn - Me.FadeOut = FadeOut - Me.TransitionSpeed = TransitionSpeed + Me.Duration = Duration + Me.AfterFadeInOpacity = AfterFadeInOpacity + Me.FadeInSpeed = FadeInSpeed + Me.FadeOutSpeed = FadeOutSpeed + Me.DoTile = DoTile + Me.AnimationWidth = AnimationWidth + Me.AnimationLength = AnimationLength + DurationWhole = CSng(Math.Truncate(CDbl(Duration))) + DurationFraction = CSng((Duration - DurationWhole) * 1000) + Me.TextureScale = TextureScale - Me.BackgroundOpacity = StartState + If Me.AnimationWidth <> -1 OrElse Me.AnimationWidth <> Nothing Then + BackgroundAnimation = New Animation(Me.Texture, 1, CInt(Me.Texture.Width / Me.AnimationWidth), Me.AnimationWidth, Me.Texture.Height, AnimationSpeed * 24, 0, 0) + CurrentRectangle = BackgroundAnimation.TextureRectangle + Else + Me.AnimationWidth = Texture.Width + End If Me.Visible = False Me.AnimationType = AnimationTypes.Background End Sub Public Overrides Sub Render() + Dim BackgroundTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8) + Core.GraphicsDevice.SetRenderTarget(BackgroundTarget) + GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent) + If Date.Now >= startDelay AndAlso Me.BackgroundOpacity > 0.0F Then - Core.SpriteBatch.Draw(Me.Texture, New Rectangle(0, 0, windowSize.Width, windowSize.Height), New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity))) + If DoTile = False Then + Core.SpriteBatch.Draw(Texture, New Rectangle(0, 0, windowSize.Width, windowSize.Height), CurrentRectangle, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity))) + Else + For Dx = 0 To Core.windowSize.Width Step AnimationWidth + For Dy = 0 To Core.windowSize.Height Step Texture.Height + Core.SpriteBatch.Draw(Texture, New Rectangle(Dx * TextureScale, Dy * TextureScale, AnimationWidth * TextureScale, Texture.Height * TextureScale), CurrentRectangle, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity))) + Next + Next + End If End If + Core.GraphicsDevice.SetRenderTarget(Nothing) + Core.SpriteBatch.Draw(BackgroundTarget, windowSize, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity))) End Sub Public Overrides Sub DoActionActive() - If Me.FadeIn = True Then - If Me.EndState > Me.BackgroundOpacity Then - Me.BackgroundOpacity += Me.TransitionSpeed - If Me.BackgroundOpacity >= Me.EndState Then - Me.BackgroundOpacity = Me.EndState - Me.FadeIn = False - Me.EndState = 0 - End If - End If - Else - If Me.FadeOut = True Then - If Me.EndState < Me.BackgroundOpacity Then - Me.BackgroundOpacity -= Me.TransitionSpeed - If Me.BackgroundOpacity <= Me.EndState Then - Me.BackgroundOpacity = Me.EndState - End If - End If - If Me.BackgroundOpacity = Me.EndState Then - Me.Ready = True - End If - Else - Me.BackgroundOpacity = Me.EndState - Me.Ready = True + If BackgroundAnimation IsNot Nothing Then + BackgroundAnimation.Update(0.005) + If CurrentRectangle <> BackgroundAnimation.TextureRectangle Then + CurrentRectangle = BackgroundAnimation.TextureRectangle End If End If + Select Case Me.FadeProgress + Case FadeSteps.FadeIn + If Me.AfterFadeInOpacity > Me.BackgroundOpacity Then + Me.BackgroundOpacity += Me.FadeInSpeed + If Me.BackgroundOpacity >= Me.AfterFadeInOpacity Then + DurationDate = Date.Now + New TimeSpan(0, 0, 0, CInt(DurationWhole), CInt(DurationFraction)) + FadeProgress = FadeSteps.Duration + Me.BackgroundOpacity = Me.AfterFadeInOpacity + End If + End If + Case FadeSteps.Duration + If Date.Now >= DurationDate Then + FadeProgress = FadeSteps.FadeOut + End If + Case FadeSteps.FadeOut + If 0 < Me.BackgroundOpacity Then + Me.BackgroundOpacity -= Me.FadeOutSpeed + If Me.BackgroundOpacity <= 0 Then + Me.BackgroundOpacity = 0 + End If + End If + If Me.BackgroundOpacity = 0 Then + Me.Ready = True + End If + End Select + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 67356c627..5db6080c4 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -878,39 +878,25 @@ #End Region Public Overrides Sub Draw() - SkyDome.Draw(45.0F) Dim ForegroundEntities As New List(Of Entity) - For Each e As Entity In Level.Entities - If e Is OwnPokemonNPC Then - ForegroundEntities.Add(e) - End If - If e Is OppPokemonNPC Then - ForegroundEntities.Add(e) - End If - If e Is OwnTrainerNPC Then - ForegroundEntities.Add(e) - End If - If e Is OppTrainerNPC Then - ForegroundEntities.Add(e) - End If - Next + + If OwnPokemonNPC IsNot Nothing Then + ForegroundEntities.Add(OwnPokemonNPC) + End If + If OppPokemonNPC IsNot Nothing Then + ForegroundEntities.Add(OppPokemonNPC) + End If + If OwnTrainerNPC IsNot Nothing Then + ForegroundEntities.Add(OwnTrainerNPC) + End If + If OppTrainerNPC IsNot Nothing Then + ForegroundEntities.Add(OppTrainerNPC) + End If + If ForegroundEntities.Count > 0 Then ForegroundEntities = (From f In ForegroundEntities Order By f.CameraDistance Descending).ToList() End If - Level.Draw() - - World.DrawWeather(Screen.Level.World.CurrentMapWeather) - - If HasToWaitPVP() = True Then - Canvas.DrawRectangle(New Rectangle(0, CInt(Core.windowSize.Height / 2 - 60), CInt(Core.windowSize.Width), 120), New Color(0, 0, 0, 150)) - Dim t As String = "Waiting for the other player " - Core.SpriteBatch.DrawString(FontManager.MainFont, t.Remove(t.Length - 2, 2) & LoadingDots.Dots, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - FontManager.MainFont.MeasureString(t).Y / 2)), Color.White) - Else - If BattleMenu.Visible = True Then - BattleMenu.Draw(Me) - End If - End If Dim ForegroundAnimationList As New List(Of AnimationQueryObject) Dim BackgroundAnimationList As New List(Of AnimationQueryObject) @@ -964,14 +950,36 @@ nextIndexBackground: cQuery.Reverse() + Dim BackgroundTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8) + Core.GraphicsDevice.SetRenderTarget(BackgroundTarget) + GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent) + For Each cQueryObject As QueryObject In cQuery cQueryObject.Draw(Me) Next + Core.GraphicsDevice.SetRenderTarget(Nothing) + + Dim NPCTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8) + Core.GraphicsDevice.SetRenderTarget(NPCTarget) + GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent) For i = 0 To ForegroundEntities.Count - 1 ForegroundEntities(i).Render() DebugDisplay.MaxVertices += ForegroundEntities(i).VertexCount Next + + Core.GraphicsDevice.SetRenderTarget(Nothing) + SkyDome.Draw(45.0F) + Level.Draw() + + World.DrawWeather(Screen.Level.World.CurrentMapWeather) + Core.SpriteBatch.Draw(BackgroundTarget, windowSize, Color.White) + Core.SpriteBatch.Draw(NPCTarget, windowSize, Color.White) + Else + SkyDome.Draw(45.0F) + Level.Draw() + + World.DrawWeather(Screen.Level.World.CurrentMapWeather) End If If ForegroundAnimationList.Count > 0 Then Dim cIndex As Integer = 0 @@ -995,6 +1003,16 @@ nextIndexForeground: End If 'Core.SpriteBatch.DrawString(FontManager.MiniFont, "Battle system not final!", New Vector2(0, Core.windowSize.Height - 20), Color.White) + If HasToWaitPVP() = True Then + Canvas.DrawRectangle(New Rectangle(0, CInt(Core.windowSize.Height / 2 - 60), CInt(Core.windowSize.Width), 120), New Color(0, 0, 0, 150)) + Dim t As String = "Waiting for the other player " + Core.SpriteBatch.DrawString(FontManager.MainFont, t.Remove(t.Length - 2, 2) & LoadingDots.Dots, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - FontManager.MainFont.MeasureString(t).Y / 2)), Color.White) + Else + If BattleMenu.Visible = True Then + BattleMenu.Draw(Me) + End If + End If + TextBox.Draw() If DrawColoredScreen = True Then @@ -1340,7 +1358,6 @@ nextIndex: Else If Not p.OriginalItem Is Nothing Then If p.Item IsNot Nothing Then - Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1) If p.OriginalItem.IsGameModeItem = True Then Core.Player.Inventory.AddItem(p.OriginalItem.gmID, 1) Else diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 61d8dd53d..56dc905f1 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -270,8 +270,8 @@ AnimationSequence.Add(baSound) End Sub - Public Sub AnimationBackground(Texture As Texture2D, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 0.0F) - Dim baBackground As BABackground = New BABackground(Texture, TransitionSpeed, FadeIn, FadeOut, EndState, startDelay, endDelay, startState) + 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 AnimationWidth As Integer = -1, 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, AnimationWidth, AnimationLength, AnimationSpeed, Scale) AnimationSequence.Add(baBackground) End Sub diff --git a/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav b/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav new file mode 100644 index 000000000..ec0c519fd Binary files /dev/null and b/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav differ diff --git a/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png b/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png new file mode 100644 index 000000000..fa12b386a Binary files /dev/null and b/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png differ diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 1d6021c0c..37af40236 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -17954,6 +17954,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -17984,6 +17990,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -18062,6 +18071,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -18083,6 +18098,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/P3D/Pokemon/Attacks/Psychic/Psychic.vb b/P3D/Pokemon/Attacks/Psychic/Psychic.vb index abe7f6806..99397f36d 100644 --- a/P3D/Pokemon/Attacks/Psychic/Psychic.vb +++ b/P3D/Pokemon/Attacks/Psychic/Psychic.vb @@ -71,6 +71,19 @@ End If End Sub + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip, True) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Psychic\Psychic", 0.0F, 0) + MoveAnimation.AnimationBackground(TextureManager.GetTexture("Textures\Battle\Psychic\PsychicBackground"), 0, 0, 1.5F,,,, True, 32, 11, 4, 6) + + MoveAnimation.AnimationMove(Nothing, False, 0, 0, -0.1, 0.025, False, False, 1, 0.5) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0.1, 0.025, False, False, 1.75, 0.5) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, -0.1, 0.025, False, False, 2.75, 0.5) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0.1, 0.025, False, False, 3.75, 0.5) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.025, False, False, 4.5, 0.5) + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file