diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 4bac39791..4b14ebd60 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -31802,6 +31802,7 @@ + diff --git a/P3D/Screens/Screen.vb b/P3D/Screens/Screen.vb index 664fedbc4..764fca5fe 100644 --- a/P3D/Screens/Screen.vb +++ b/P3D/Screens/Screen.vb @@ -91,6 +91,7 @@ Public MustInherit Class Screen PressStartScreen CharacterSelectionScreen GameModeSelectionScreen + VoltorbFlipScreen 'TEMPORARY, OLD PokemonScreen diff --git a/P3D/Screens/VoltorbFlipScreen.vb b/P3D/Screens/VoltorbFlipScreen.vb new file mode 100644 index 000000000..aefde1403 --- /dev/null +++ b/P3D/Screens/VoltorbFlipScreen.vb @@ -0,0 +1,401 @@ +Imports P3D.Screens.UI + +Namespace VoltorbFlip + Public Class VoltorbFlipScreen + + Inherits Screen + + 'Animation: + Private _closing As Boolean = False + + Private _enrollY As Single = 0F + Private _interfaceFade As Single = 0F + Private _cursorPosition As New Vector2 + Private _cursorDest As New Vector2 + + Public Shared ReadOnly GridSize As Integer = 5 + Public Property PreviousLevel As Integer = 1 + Public Property CurrentLevel As Integer = 1 + Public Property CurrentCoins As Integer = 0 + Public Property TotalCoins As Integer = 0 + Public Property MaxCoins As Integer = 1 + + 'Stuff related to blurred PreScreens + Private _preScreenTexture As RenderTarget2D + Private _preScreenTarget As RenderTarget2D + Private _blurScreens As Identifications() = {Identifications.BattleScreen, + Identifications.OverworldScreen, + Identifications.DirectTradeScreen, + Identifications.WonderTradeScreen, + Identifications.GTSSetupScreen, + Identifications.GTSTradeScreen, + Identifications.PVPLobbyScreen} + + Public Sub New(ByVal currentScreen As Screen) + + CreateBoard(1) + + _preScreenTarget = New RenderTarget2D(GraphicsDevice, windowSize.Width, windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8) + _blur = New Resources.Blur.BlurHandler(windowSize.Width, windowSize.Height) + + Identification = Identifications.VoltorbFlipScreen + PreScreen = currentScreen + IsDrawingGradients = True + + Me.MouseVisible = True + Me.CanChat = Me.PreScreen.CanChat + Me.CanBePaused = Me.PreScreen.CanBePaused + + End Sub + + + Public Overrides Sub Draw() + If _blurScreens.Contains(PreScreen.Identification) Then + DrawPrescreen() + Else + PreScreen.Draw() + End If + + DrawGradients(CInt(255 * _interfaceFade)) + + DrawBackground() + + End Sub + + + Private _blur As Resources.Blur.BlurHandler + + Private Sub DrawPrescreen() + If _preScreenTexture Is Nothing OrElse _preScreenTexture.IsContentLost Then + SpriteBatch.EndBatch() + + Dim target As RenderTarget2D = _preScreenTarget + GraphicsDevice.SetRenderTarget(target) + GraphicsDevice.Clear(BackgroundColor) + + SpriteBatch.BeginBatch() + + PreScreen.Draw() + + SpriteBatch.EndBatch() + + GraphicsDevice.SetRenderTarget(Nothing) + + SpriteBatch.BeginBatch() + + _preScreenTexture = target + End If + + If _interfaceFade < 1.0F Then + SpriteBatch.Draw(_preScreenTexture, windowSize, Color.White) + End If + SpriteBatch.Draw(_blur.Perform(_preScreenTexture), windowSize, New Color(255, 255, 255, CInt(255 * _interfaceFade * 2).Clamp(0, 255))) + End Sub + + + Private Sub DrawBackground() + Dim mainBackgroundColor As Color = New Color(48, 151, 70) + If _closing Then + mainBackgroundColor = New Color(48, 151, 70, CInt(255 * _interfaceFade)) + End If + + Dim halfWidth As Integer = CInt(Core.windowSize.Width / 2) + Dim halfHeight As Integer = CInt(Core.windowSize.Height / 2) + + Canvas.DrawRectangle(New Rectangle(halfWidth - 256, halfHeight - 256, 512, 512), mainBackgroundColor) + + End Sub + + Public Function CreateBoard(ByVal Level As Integer) As List(Of List(Of Tile)) + + Dim Board As List(Of List(Of Tile)) = CreateGrid() + Dim Data As List(Of Integer) = GetLevelData(Level) + Dim Spots As List(Of List(Of Integer)) = New List(Of List(Of Integer)) + + For i = 0 To Data(0) + Data(1) + Data(2) + Dim SpotList As List(Of Integer) = New List(Of Integer) + Dim ValueX As Integer = Random.Next(0, 5) + Dim ValueY As Integer = Random.Next(0, 5) + SpotList.AddRange({ValueX, ValueY}) + If Spots.Count > 0 Then + Dim AddList As Boolean = True + For SpotIndex = 0 To Spots.Count - 1 + If Spots(SpotIndex)(0) = ValueX AndAlso Spots(SpotIndex)(1) = ValueY Then + AddList = False + End If + Next + If AddList = True Then + Spots.Add(SpotList) + End If + Else + Spots.Add(SpotList) + End If + Next + + Dim a = 0 + While a < Data(0) + Dim TileX As Integer = Spots(a)(0) + Dim TileY As Integer = Spots(a)(1) + + Board(TileX)(TileY).Value = Tile.Values.Two + a += 1 + End While + + While a < Data(0) + Data(1) + Dim TileX As Integer = Spots(a)(0) + Dim TileY As Integer = Spots(a)(1) + + Board(TileX)(TileY).Value = Tile.Values.Three + a += 1 + End While + + While a < Data(0) + Data(1) + Data(2) + Dim TileX As Integer = Spots(a)(0) + Dim TileY As Integer = Spots(a)(1) + + Board(TileX)(TileY).Value = Tile.Values.Voltorb + a += 1 + End While + + MaxCoins = CInt(Math.Pow(2, Data(0)) * Math.Pow(3, Data(1))) + + Return Board + + End Function + + Private Function CreateGrid() As List(Of List(Of Tile)) + Dim Grid As New List(Of List(Of Tile)) + For _row = 1 To VoltorbFlipScreen.GridSize + Dim Column As New List(Of Tile) + For _column = 1 To VoltorbFlipScreen.GridSize + Column.Add(New VoltorbFlip.Tile(_row, _column, VoltorbFlip.Tile.Values.One, False)) + Next + Grid.Add(Column) + Next + Return Grid + End Function + + Public Function GetLevelData(ByVal LevelNumber As Integer) As List(Of Integer) + Select Case LevelNumber + Case 1 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {5, 0, 6}.ToList + Case 1 + Return {4, 1, 6}.ToList + Case 2 + Return {3, 1, 6}.ToList + Case 3 + Return {2, 2, 6}.ToList + Case 4 + Return {0, 3, 6}.ToList + End Select + Case 2 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {6, 0, 7}.ToList + Case 1 + Return {5, 1, 7}.ToList + Case 2 + Return {3, 2, 7}.ToList + Case 3 + Return {1, 3, 7}.ToList + Case 4 + Return {0, 4, 7}.ToList + End Select + Case 3 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {7, 0, 8}.ToList + Case 1 + Return {6, 1, 8}.ToList + Case 2 + Return {4, 2, 8}.ToList + Case 3 + Return {2, 3, 8}.ToList + Case 4 + Return {1, 4, 8}.ToList + End Select + Case 4 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {8, 0, 10}.ToList + Case 1 + Return {5, 2, 10}.ToList + Case 2 + Return {3, 3, 8}.ToList + Case 3 + Return {2, 4, 10}.ToList + Case 4 + Return {0, 5, 8}.ToList + End Select + Case 5 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {9, 0, 10}.ToList + Case 1 + Return {7, 1, 10}.ToList + Case 2 + Return {6, 2, 10}.ToList + Case 3 + Return {4, 3, 10}.ToList + Case 4 + Return {1, 5, 10}.ToList + End Select + Case 6 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {8, 1, 10}.ToList + Case 1 + Return {5, 3, 10}.ToList + Case 2 + Return {3, 4, 10}.ToList + Case 3 + Return {2, 5, 10}.ToList + Case 4 + Return {0, 6, 10}.ToList + End Select + Case 7 + Dim chance As Integer = CInt(Random.Next(0, 5)) + Select Case chance + Case 0 + Return {9, 1, 13}.ToList + Case 1 + Return {7, 2, 10}.ToList + Case 2 + Return {6, 3, 10}.ToList + Case 3 + Return {4, 4, 10}.ToList + Case 4 + Return {1, 6, 13}.ToList + End Select + Case Else + Return Nothing + End Select + + Return Nothing + End Function + + Protected Overrides Function GetFontRenderer() As SpriteBatch + If IsCurrentScreen() And _interfaceFade + 0.01F >= 1.0F Then + Return FontRenderer + Else + Return SpriteBatch + End If + End Function + + + Public Overrides Sub Update() + + If KeyBoardHandler.KeyPressed(KeyBindings.BackKey1) = True Then + SetScreen(Me.PreScreen) + End If + If _closing Then + If _interfaceFade > 0F Then + _interfaceFade = MathHelper.Lerp(0, _interfaceFade, 0.8F) + If _interfaceFade < 0F Then + _interfaceFade = 0F + End If + End If + If _enrollY > 0 Then + _enrollY = MathHelper.Lerp(0, _enrollY, 0.8F) + If _enrollY <= 0 Then + _enrollY = 0 + End If + End If + If _enrollY <= 2.0F Then + SetScreen(PreScreen) + End If + Else + + Dim maxWindowHeight As Integer = 400 + If _enrollY < maxWindowHeight Then + _enrollY = MathHelper.Lerp(maxWindowHeight, _enrollY, 0.8F) + If _enrollY >= maxWindowHeight Then + _enrollY = maxWindowHeight + End If + End If + If _interfaceFade < 1.0F Then + _interfaceFade = MathHelper.Lerp(1, _interfaceFade, 0.95F) + If _interfaceFade > 1.0F Then + _interfaceFade = 1.0F + End If + End If + + + End If + + End Sub + + End Class + + Public Class Tile + Public Enum Values + Voltorb + One + Two + Three + End Enum + Public Property Row As Integer = 0 + Public Property Column As Integer = 0 + Public Property Value As Integer = Tile.Values.Voltorb + Public Property Flipped As Boolean = False + Private Property Memo1 As Boolean = False + Private Property Memo2 As Boolean = False + Private Property Memo3 As Boolean = False + Private Property Memo4 As Boolean = False + + Public Sub Flip() + If Flipped = False Then + Flipped = True + End If + End Sub + Public Sub Reset() + Row = 0 + Column = 0 + Value = Tile.Values.Voltorb + Flipped = False + End Sub + Public Function GetMemo(ByVal MemoNumber As Integer) As Boolean + Select Case MemoNumber + Case 1 + Return Memo1 + Case 2 + Return Memo2 + Case 3 + Return Memo3 + Case 3 + Return Memo4 + Case Else + Return Nothing + End Select + End Function + Public Sub SetMemo(ByVal MemoNumber As Integer, ByVal Value As Boolean) + Select Case MemoNumber + Case Tile.Values.Voltorb + Memo1 = Value + Case Tile.Values.One + Memo2 = Value + Case Tile.Values.Two + Memo3 = Value + Case Tile.Values.Three + Memo4 = Value + End Select + End Sub + + Public Sub New(ByVal Row As Integer, ByVal Column As Integer, ByVal Value As Integer, ByVal Flipped As Boolean) + Me.Row = Row + Me.Column = Column + Me.Value = Value + Me.Flipped = Flipped + End Sub + + End Class + +End Namespace \ No newline at end of file