Started Development on Voltorb Flip

I think... if I've done everything I did so far correctly, I should have a level 1 grid of tiles, it's just not visible yet and you can't interact with it in any way, so I have no idea if it actually does what I want it to do yet XD
This commit is contained in:
JappaWakka 2023-05-18 20:25:38 +02:00
parent 0fef783154
commit ff0111ecdc
3 changed files with 403 additions and 0 deletions

View File

@ -31802,6 +31802,7 @@
<Compile Include="Screens\Pokemon\HatchEggScreen.vb" />
<Compile Include="Screens\Pokemon\LearnAttackScreen.vb" />
<Compile Include="Screens\Pokemon\NameObjectScreen.vb" />
<Compile Include="Screens\VoltorbFlipScreen.vb" />
<Compile Include="Screens\Pokemon\PartyScreen.vb" />
<Compile Include="Screens\Pokemon\SummaryScreen.vb" />
<Compile Include="Screens\Pokemon\TeachMovesScreen.vb" />

View File

@ -91,6 +91,7 @@ Public MustInherit Class Screen
PressStartScreen
CharacterSelectionScreen
GameModeSelectionScreen
VoltorbFlipScreen
'TEMPORARY, OLD
PokemonScreen

View File

@ -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