830 lines
36 KiB
VB.net
830 lines
36 KiB
VB.net
Public Class PVPLobbyScreen
|
|
|
|
Inherits Screen
|
|
|
|
Enum ScreenStates
|
|
Idle
|
|
Stopped
|
|
ChooseTeam
|
|
StartBattle
|
|
BattleResults
|
|
End Enum
|
|
|
|
Public Shared ScreenState As ScreenStates = ScreenStates.Idle
|
|
|
|
Shared OppTeam As List(Of Pokemon) = Nothing 'The team the opponent is using.
|
|
Dim OwnTeam As List(Of Pokemon) = Nothing 'The team you are using.
|
|
|
|
Shared PartnerNetworkID As Integer = 0 'The NetworkID of your partner.
|
|
Shared WaitingForPlayer As Boolean = False 'If you are the host and waiting for the other player to accept.
|
|
|
|
Shared SentBattleOffer As Boolean = False 'If you sent a request.
|
|
Shared ReceivedBattleOffer As Boolean = False 'If you idle and get a request.
|
|
|
|
Shared StartBattleRemote As Boolean = False 'If you sent a request and got the accept.
|
|
|
|
Public Shared DisconnectMessage As String = ""
|
|
Shared IsHost As Boolean = True
|
|
|
|
Dim Cursor As Integer = 0
|
|
Dim menuItems As New List(Of String)
|
|
Dim texture As Texture2D = Nothing
|
|
|
|
Private Shared _oppGameVersion As String = ""
|
|
Private _startNow As Boolean = False
|
|
|
|
Public Sub New(ByVal currentScreen As Screen, ByVal connectPlayerID As Integer, ByVal isHost As Boolean)
|
|
Me.PreScreen = currentScreen
|
|
Me.Identification = Identifications.PVPLobbyScreen
|
|
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
|
|
|
|
MusicManager.Play("lobby", True)
|
|
|
|
Me.MouseVisible = True
|
|
Me.CanBePaused = False
|
|
|
|
PartnerNetworkID = connectPlayerID
|
|
WaitingForPlayer = isHost
|
|
SentBattleOffer = False
|
|
ReceivedBattleOffer = False
|
|
OppTeam = Nothing
|
|
StartBattleRemote = False
|
|
PVPLobbyScreen.IsHost = isHost
|
|
OwnTeam = Nothing
|
|
OppTeam = Nothing
|
|
StoppedBattle = False
|
|
BattleSuccessful = False
|
|
BattleResults = Nothing
|
|
|
|
DisconnectMessage = ""
|
|
ScreenState = ScreenStates.Idle
|
|
|
|
If isHost = False Then
|
|
Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleJoin, Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, PartnerNetworkID.ToString()))
|
|
Else
|
|
Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleRequest, Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, PartnerNetworkID.ToString()))
|
|
End If
|
|
|
|
Me.menuItems = {"Start Battle!", "Choose Team", "Quit"}.ToList()
|
|
Me.BattleBoxPokemon = StorageSystemScreen.GetBattleBoxPokemon()
|
|
Core.StartThreadedSub(AddressOf DownloadOnlineSprite)
|
|
End Sub
|
|
|
|
Private Sub DownloadOnlineSprite()
|
|
Dim p As Servers.Player = Core.ServersManager.PlayerCollection.GetPlayer(PartnerNetworkID)
|
|
If Not p Is Nothing Then
|
|
If p.GameJoltId <> "" Then
|
|
GameJolt.Emblem.GetOnlineSprite(p.GameJoltId)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub Draw()
|
|
Canvas.DrawGradient(Core.windowSize, New Color(10, 145, 227), New Color(6, 77, 139), False, -1)
|
|
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 65), New Color(0, 24, 114), New Color(13, 138, 228), False, -1)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Versus Battle", New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString("Versus Battle").X / 2), 20), New Color(196, 231, 255))
|
|
Canvas.DrawRectangle(New Rectangle(0, 65, Core.windowSize.Width, 1), New Color(0, 24, 114))
|
|
|
|
Select Case ScreenState
|
|
Case ScreenStates.Idle
|
|
If WaitingForPlayer = True Then
|
|
Dim t As String = "Waiting for other player" & LoadingDots.Dots
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - 10)), Color.White)
|
|
Else
|
|
Me.DrawIdle()
|
|
End If
|
|
Case ScreenStates.Stopped
|
|
Dim t As String = DisconnectMessage
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - 10)), Color.White)
|
|
Case ScreenStates.ChooseTeam
|
|
Me.DrawChooseTeam()
|
|
Case ScreenStates.BattleResults
|
|
Me.DrawBattleResults()
|
|
End Select
|
|
TextBox.Draw()
|
|
End Sub
|
|
|
|
Public Overrides Sub Update()
|
|
If TextBox.Showing Then
|
|
TextBox.Update()
|
|
Exit Sub
|
|
End If
|
|
|
|
If ScreenState = ScreenStates.Idle Then
|
|
If ConnectScreen.Connected = True Then
|
|
Dim partnerOnServer As Boolean = False
|
|
For Each p As Servers.Player In Core.ServersManager.PlayerCollection
|
|
If p.ServersID = PartnerNetworkID Then
|
|
partnerOnServer = True
|
|
Exit For
|
|
End If
|
|
Next
|
|
If partnerOnServer = False Then
|
|
DisconnectMessage = "The other player disconnected." & Environment.NewLine & Environment.NewLine & "Press any key to exit."
|
|
ScreenState = ScreenStates.Stopped
|
|
End If
|
|
Else
|
|
DisconnectMessage = "You got disconnected from the server." & Environment.NewLine & Environment.NewLine & "Press any key to exit."
|
|
ScreenState = ScreenStates.Stopped
|
|
End If
|
|
End If
|
|
|
|
Select Case ScreenState
|
|
Case ScreenStates.Idle
|
|
Me.UpdateIdle()
|
|
Case ScreenStates.Stopped
|
|
If KeyBoardHandler.GetPressedKeys().Count > 0 Or ControllerHandler.HasControlerInput() = True Or Controls.Accept() = True Or Controls.Dismiss() = True Then
|
|
Core.SetScreen(Me.PreScreen)
|
|
End If
|
|
Case ScreenStates.ChooseTeam
|
|
Me.UpdateChooseTeam()
|
|
Case ScreenStates.BattleResults
|
|
Me.UpdateBattleResults()
|
|
End Select
|
|
End Sub
|
|
|
|
#Region "Idle"
|
|
|
|
Private Sub DrawIdle()
|
|
'Own side:
|
|
Canvas.DrawRectangle(New Rectangle(100, 200, 300, 64), New Color(177, 228, 247, 200))
|
|
Canvas.DrawGradient(New Rectangle(0, 200, 100, 64), New Color(255, 255, 255, 0), New Color(177, 228, 247, 200), True, -1)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Core.Player.Name, New Vector2(140, 215), Color.Black, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.Draw(Screen.Level.OwnPlayer.Texture, New Rectangle(60, 200, 64, 64), New Rectangle(0, 64, 32, 32), Color.White)
|
|
|
|
Canvas.DrawRectangle(New Rectangle(0, 264, 400, 32), New Color(6, 77, 139))
|
|
|
|
If Not OwnTeam Is Nothing Then
|
|
If OwnTeam.Count > 0 Then
|
|
For i = 0 To OwnTeam.Count - 1
|
|
Dim p As Pokemon = OwnTeam(i)
|
|
Dim pokeTexture = p.GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(40 + i * 40 - CInt((pokeTexture.Width - 32) / 2), 264, pokeTexture.Width, 32), Color.White)
|
|
Next
|
|
End If
|
|
End If
|
|
|
|
'Menu:
|
|
If ReceivedBattleOffer = True Then
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2), 100, 64 * 4, 64), New Color(255, 255, 255, 150))
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, "Your opponent wants to" & Environment.NewLine & "battle with this setup.", New Vector2(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 4, 104), Color.Black)
|
|
Else
|
|
If SentBattleOffer = True Then
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2), 100, 64 * 4, 64), New Color(255, 255, 255, 150))
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, "You want to battle" & Environment.NewLine & "with this setup.", New Vector2(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 4, 104), Color.Black)
|
|
End If
|
|
End If
|
|
|
|
For i = 0 To Me.menuItems.Count - 1
|
|
Core.SpriteBatch.Draw(Me.texture, New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2), 200 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
|
|
Core.SpriteBatch.Draw(Me.texture, New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 64, 200 + i * 96, 64 * 2, 64), New Rectangle(32, 16, 16, 16), Color.White)
|
|
Core.SpriteBatch.Draw(Me.texture, New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 64 * 3, 200 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.menuItems(i), New Vector2(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 20, 216 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
|
|
Next
|
|
|
|
DrawCursor()
|
|
|
|
'Opp side:
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width - 300), 200, 300, 64), New Color(177, 228, 247, 200))
|
|
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width - 400), 200, 100, 64), New Color(255, 255, 255, 0), New Color(177, 228, 247, 200), True, -1)
|
|
|
|
Dim t As Texture2D = Nothing
|
|
Dim tempPlayer As Servers.Player = Nothing
|
|
For Each p As Servers.Player In Core.ServersManager.PlayerCollection
|
|
If p.ServersID = PartnerNetworkID Then
|
|
Dim tPath As String = NetworkPlayer.GetTexturePath(p.Skin)
|
|
If TextureManager.TextureExist(tPath) = True Then
|
|
t = TextureManager.GetTexture(tPath)
|
|
Else
|
|
t = TextureManager.GetTexture("Textures\NPC\0")
|
|
End If
|
|
tempPlayer = p
|
|
|
|
If p.GameJoltId <> "" Then
|
|
If GameJolt.Emblem.HasDownloadedSprite(p.GameJoltId) = True Then
|
|
Dim newT As Texture2D = GameJolt.Emblem.GetOnlineSprite(p.GameJoltId)
|
|
If Not newT Is Nothing Then
|
|
t = newT
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If Not t Is Nothing And Not tempPlayer Is Nothing Then
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, tempPlayer.Name, New Vector2(Core.windowSize.Width - 260, 215), Color.Black, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(Core.windowSize.Width - 340), 200, 64, 64), New Rectangle(0, 64, 32, 32), Color.White)
|
|
End If
|
|
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width - 400), 264, 400, 32), New Color(6, 77, 139))
|
|
|
|
If Not OppTeam Is Nothing Then
|
|
If OppTeam.Count > 0 Then
|
|
For i = 0 To OppTeam.Count - 1
|
|
Dim p As Pokemon = OppTeam(i)
|
|
Dim pokeTexture = p.GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(Core.windowSize.Width - 360) + i * 40 - CInt((pokeTexture.Width - 32) / 2), 264, pokeTexture.Width, 32), Color.White)
|
|
Next
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawCursor()
|
|
Dim cPosition As Vector2 = New Vector2(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2) + 160, 200 + Me.Cursor * 96 - 42)
|
|
|
|
Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "")
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
|
|
End Sub
|
|
|
|
Private Sub UpdateIdle()
|
|
If WaitingForPlayer = False Then
|
|
If StartBattleRemote = True Then
|
|
StartBattleRemote = False
|
|
InitializeBattle()
|
|
ElseIf _startNow Then
|
|
_startNow = False
|
|
InitializeBattle()
|
|
Else
|
|
If Controls.Up(True, True, True, True, True, True) = True Then
|
|
Me.Cursor -= 1
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Cursor -= 4
|
|
End If
|
|
End If
|
|
If Controls.Down(True, True, True, True, True, True) = True Then
|
|
Me.Cursor += 1
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Cursor += 4
|
|
End If
|
|
End If
|
|
|
|
Me.Cursor = Me.Cursor.Clamp(0, Me.menuItems.Count - 1)
|
|
|
|
If Controls.Accept(True, False, False) = True Then
|
|
For i = 0 To Me.menuItems.Count - 1
|
|
If New Rectangle(CInt(Core.windowSize.Width / 2 - (64 * 4) / 2), 200 + i * 96, 64 * 4, 64).Contains(MouseHandler.MousePosition) = True Then
|
|
If i = Cursor Then
|
|
Me.SelectMenuEntry()
|
|
Else
|
|
Cursor = i
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
If Controls.Accept(False, True, True) = True Then
|
|
Me.SelectMenuEntry()
|
|
End If
|
|
End If
|
|
Else
|
|
If Controls.Dismiss() = True Then
|
|
QuitBattle()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SelectMenuEntry()
|
|
Select Case Me.Cursor
|
|
Case 0
|
|
Me.StartBattle()
|
|
Case 1
|
|
ScreenState = ScreenStates.ChooseTeam
|
|
Case 2
|
|
Me.QuitBattle()
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub StartBattle()
|
|
If Not Me.OwnTeam Is Nothing And Not OppTeam Is Nothing Then
|
|
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf LeadPickedStart, "Choose your Lead", True, True, False, _pokemonList:=OwnTeam) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = True}
|
|
AddHandler selScreen.SelectedObject, AddressOf LeadPickedStartHandler
|
|
|
|
Core.SetScreen(selScreen)
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub LeadPickedStartHandler(ByVal params As Object())
|
|
LeadPickedStart(CInt(params(0)))
|
|
End Sub
|
|
|
|
Private Sub LeadPickedStart(ByVal index As Integer)
|
|
BattleSystem.BattleScreen.OwnLeadIndex = index
|
|
Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleOffer,
|
|
Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, {PartnerNetworkID.ToString(), CStr(index) & "," & GameController.RELEASEVERSION}.ToList()))
|
|
If ReceivedBattleOffer = True Then
|
|
If GameController.RELEASEVERSION = _oppGameVersion Then
|
|
_startNow = True
|
|
Else
|
|
TextBox.Show("Game versions don't match.")
|
|
End If
|
|
Else
|
|
SentBattleOffer = True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub QuitBattle()
|
|
Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleQuit, Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, PartnerNetworkID.ToString()))
|
|
Core.SetScreen(Me.PreScreen)
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "ChooseTeam"
|
|
|
|
Dim BattleBoxPokemon As New List(Of Pokemon)
|
|
Dim ChooseTeamCursor As Integer = 0
|
|
|
|
Private Sub DrawChooseTeam()
|
|
Dim t As String = "Choose your team:"
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), 100), Color.White)
|
|
|
|
Dim startPos As New Vector2(CSng(Core.windowSize.Width / 2) - 400, 300)
|
|
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) - 410, 230, 290, 360), New Color(203, 40, 41), New Color(238, 128, 128), False, -1)
|
|
For i = 0 To 5
|
|
Dim x As Integer = i
|
|
Dim y As Integer = 0
|
|
|
|
While x > 1
|
|
x -= 2
|
|
y += 1
|
|
End While
|
|
|
|
Canvas.DrawBorder(2, New Rectangle(CInt(startPos.X) + x * 140, y * 100 + CInt(startPos.Y), 128, 80), New Color(230, 230, 230))
|
|
|
|
If BattleBoxPokemon.Count - 1 >= i Then
|
|
Dim pokeTexture = BattleBoxPokemon(i).GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(startPos.X) + x * 140 + 32 - CInt(pokeTexture.Width - 32), y * 100 + CInt(startPos.Y) + 10, pokeTexture.Width * 2, 64), Color.White)
|
|
End If
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Battle Box", New Vector2(CInt(startPos.X) + 80, CInt(startPos.Y) - 45), Color.White)
|
|
Next
|
|
|
|
startPos = New Vector2(CSng(Core.windowSize.Width / 2) + 130, 300)
|
|
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) + 120, 230, 290, 360), New Color(84, 198, 216), New Color(42, 167, 198), False, -1)
|
|
For i = 0 To 5
|
|
Dim x As Integer = i
|
|
Dim y As Integer = 0
|
|
|
|
While x > 1
|
|
x -= 2
|
|
y += 1
|
|
End While
|
|
|
|
Canvas.DrawBorder(2, New Rectangle(CInt(startPos.X) + x * 140, y * 100 + CInt(startPos.Y), 128, 80), New Color(230, 230, 230))
|
|
|
|
If Core.Player.Pokemons.Count - 1 >= i Then
|
|
Dim pokeTexture = Core.Player.Pokemons(i).GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(startPos.X) + x * 140 + 32 - CInt(pokeTexture.Width - 32), y * 100 + CInt(startPos.Y) + 10, pokeTexture.Width * 2, 64), Color.White)
|
|
End If
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Team", New Vector2(CInt(startPos.X) + 106, CInt(startPos.Y) - 45), Color.White)
|
|
Next
|
|
|
|
DrawChooseTeamCursor()
|
|
End Sub
|
|
|
|
Private Sub DrawChooseTeamCursor()
|
|
Dim cPosition As Vector2 = New Vector2(CSng(Core.windowSize.Width / 2) - 280, 190)
|
|
If ChooseTeamCursor = 1 Then
|
|
cPosition = New Vector2(CSng(Core.windowSize.Width / 2) + 250, 190)
|
|
End If
|
|
|
|
Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "")
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
|
|
End Sub
|
|
|
|
Private Sub UpdateChooseTeam()
|
|
If Controls.Left(True, True) = True Then
|
|
Me.ChooseTeamCursor = 0
|
|
End If
|
|
If Controls.Right(True, True) = True Then
|
|
Me.ChooseTeamCursor = 1
|
|
End If
|
|
|
|
Dim hasBattleBoxPokemon As Boolean = False
|
|
For Each p As Pokemon In Me.BattleBoxPokemon
|
|
If p.IsEgg() = False Then
|
|
hasBattleBoxPokemon = True
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If Controls.Accept(True, False, False) = True Then
|
|
If New Rectangle(CInt(Core.windowSize.Width / 2) + 120, 230, 290, 360).Contains(MouseHandler.MousePosition) = True Then
|
|
If ChooseTeamCursor = 0 Then
|
|
ChooseTeamCursor = 1
|
|
Else
|
|
SelectTeam()
|
|
End If
|
|
End If
|
|
If New Rectangle(CInt(Core.windowSize.Width / 2) - 410, 230, 290, 360).Contains(MouseHandler.MousePosition) = True Then
|
|
If ChooseTeamCursor = 1 Then
|
|
ChooseTeamCursor = 0
|
|
Else
|
|
If hasBattleBoxPokemon = True Then
|
|
SelectTeam()
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If hasBattleBoxPokemon = True Or ChooseTeamCursor = 1 Then
|
|
If Controls.Accept(False, True, True) = True Then
|
|
SelectTeam()
|
|
End If
|
|
End If
|
|
|
|
If Controls.Dismiss(True, True, True) = True Then
|
|
ScreenState = ScreenStates.Idle
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SelectTeam()
|
|
Me.OwnTeam = New List(Of Pokemon)
|
|
|
|
If ChooseTeamCursor = 0 Then
|
|
Me.OwnTeam.AddRange(BattleBoxPokemon.ToArray())
|
|
Else
|
|
Me.OwnTeam.AddRange(Core.Player.Pokemons.ToArray())
|
|
End If
|
|
|
|
For i = 0 To Me.OwnTeam.Count - 1
|
|
If i <= Me.OwnTeam.Count - 1 Then
|
|
If Me.OwnTeam(i).IsEgg() = True Then
|
|
Me.OwnTeam.RemoveAt(i)
|
|
i -= 1
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
SentBattleOffer = False
|
|
ReceivedBattleOffer = False
|
|
|
|
Dim sendPokemonData As String = ""
|
|
For Each p As Pokemon In Me.OwnTeam
|
|
If p.IsEgg() = False Then
|
|
If sendPokemonData <> "" Then
|
|
sendPokemonData &= "|"
|
|
End If
|
|
sendPokemonData &= p.GetSaveData()
|
|
End If
|
|
Next
|
|
|
|
Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleOffer, Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, {PartnerNetworkID.ToString(), sendPokemonData}.ToList()))
|
|
ScreenState = ScreenStates.Idle
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "InputFunctions"
|
|
|
|
Public Shared Sub OtherPlayerJoins()
|
|
If IsLobbyScreen() = True Then
|
|
WaitingForPlayer = False
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub OtherPlayerQuits()
|
|
If IsLobbyScreen() = True Then
|
|
ScreenState = ScreenStates.Stopped
|
|
DisconnectMessage = "The other player quit the battle." & Environment.NewLine & Environment.NewLine & "Press any key to exit."
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub ReceiveOppTeam(ByVal data As String)
|
|
If IsLobbyScreen() = True Then
|
|
If data = "none" Then
|
|
OppTeam = Nothing
|
|
Else
|
|
OppTeam = New List(Of Pokemon)
|
|
|
|
Dim tempData As String = ""
|
|
Dim cData As String = data
|
|
While cData.Length > 0
|
|
If cData(0).ToString() = "|" AndAlso tempData(tempData.Length - 1).ToString() = "}" Then
|
|
OppTeam.Add(Pokemon.GetPokemonByData(tempData))
|
|
tempData = ""
|
|
Else
|
|
tempData &= cData(0).ToString()
|
|
End If
|
|
cData = cData.Remove(0, 1)
|
|
End While
|
|
If tempData.StartsWith("{") = True And tempData.EndsWith("}") = True Then
|
|
OppTeam.Add(Pokemon.GetPokemonByData(tempData))
|
|
tempData = ""
|
|
End If
|
|
End If
|
|
SentBattleOffer = False
|
|
ReceivedBattleOffer = False
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub ReceiveBattleStart(ByVal data As String)
|
|
Dim cData As String() = data.Split(",")
|
|
BattleSystem.BattleScreen.OppLeadIndex = CInt(cData(0))
|
|
_oppGameVersion = cData(1)
|
|
If IsLobbyScreen() = True Then
|
|
If SentBattleOffer = True Then
|
|
StartBattleRemote = True
|
|
Else
|
|
ReceivedBattleOffer = True
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Shared Function IsLobbyScreen() As Boolean
|
|
Dim s As Screen = Core.CurrentScreen
|
|
While s.Identification <> Identifications.PVPLobbyScreen And Not s.PreScreen Is Nothing
|
|
s = s.PreScreen
|
|
End While
|
|
Return (s.Identification = Identifications.PVPLobbyScreen)
|
|
End Function
|
|
|
|
#End Region
|
|
|
|
#Region "StartBattle"
|
|
|
|
Dim TempOriginalTeam As New List(Of Pokemon)
|
|
Public Shared StoppedBattle As Boolean = False 'This is true if changed to the screen from a battle.
|
|
|
|
Private Sub InitializeBattle()
|
|
Me.CanChat = False
|
|
Me.CanBePaused = False
|
|
ScreenState = ScreenStates.StartBattle
|
|
|
|
Dim tPath As String = "Textures\NPC\0"
|
|
Dim tempPlayer As Servers.Player = Nothing
|
|
For Each p As Servers.Player In Core.ServersManager.PlayerCollection
|
|
If p.ServersID = PartnerNetworkID Then
|
|
tPath = NetworkPlayer.GetTexturePath(p.Skin)
|
|
If TextureManager.TextureExist(tPath) = False Then
|
|
tPath = "Textures\NPC\0"
|
|
End If
|
|
tempPlayer = p
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
tPath = tPath.Remove(0, ("Textures\NPC\").Length)
|
|
|
|
Dim t As New Trainer()
|
|
t.Pokemons = OppTeam
|
|
t.TrainerType = "Pokémon Trainer"
|
|
t.DoubleTrainer = False
|
|
t.Name = tempPlayer.Name
|
|
t.Money = 0
|
|
t.SpriteName = tPath
|
|
t.Region = "Johto"
|
|
t.TrainerFile = ""
|
|
t.Items = New List(Of Item)
|
|
t.Gender = 0
|
|
t.IntroType = 11
|
|
t.OutroMessage = ". . ."
|
|
t.GameJoltID = tempPlayer.GameJoltId
|
|
|
|
For Each p As Pokemon In t.Pokemons
|
|
p.Level = 50
|
|
p.CalculateStats()
|
|
p.FullRestore()
|
|
Next
|
|
|
|
TempOriginalTeam.Clear()
|
|
For Each p As Pokemon In Core.Player.Pokemons
|
|
TempOriginalTeam.Add(Pokemon.GetPokemonByData(p.GetSaveData()))
|
|
Next
|
|
|
|
Core.Player.Pokemons.Clear()
|
|
|
|
For Each p As Pokemon In Me.OwnTeam
|
|
If p.IsEgg() = False Then
|
|
p.Level = 50
|
|
p.CalculateStats()
|
|
p.FullRestore()
|
|
Core.Player.Pokemons.Add(p)
|
|
End If
|
|
Next
|
|
|
|
Dim b As New BattleSystem.BattleScreen(t, Core.CurrentScreen, 0)
|
|
b.IsPVPBattle = True
|
|
b.IsHost = IsHost
|
|
b.IsRemoteBattle = True
|
|
b.PartnerNetworkID = PartnerNetworkID
|
|
|
|
If tempPlayer.GameJoltId <> "" Then
|
|
b.PVPGameJoltID = tempPlayer.GameJoltId
|
|
End If
|
|
|
|
Core.SetScreen(New BattleIntroScreen(Core.CurrentScreen, b, t, t.GetIniMusicName(), t.IntroType))
|
|
PlayerStatistics.Track("PVP battles", 1)
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
Public Overrides Sub ChangeTo()
|
|
If PVPLobbyScreen.StoppedBattle = True Then
|
|
If BattleSuccessful = True Then
|
|
ScreenState = ScreenStates.BattleResults
|
|
End If
|
|
MusicManager.Play("lobby", False)
|
|
Core.Player.Pokemons.Clear()
|
|
Core.Player.Pokemons.AddRange(TempOriginalTeam.ToArray())
|
|
End If
|
|
End Sub
|
|
|
|
#Region "BattleResults"
|
|
|
|
Shared BattleResults As BattleResult = Nothing
|
|
Public Shared BattleSuccessful As Boolean = False
|
|
|
|
Class BattleResult
|
|
|
|
Public Won As Boolean = False
|
|
Public OwnPokemon As New List(Of Pokemon)
|
|
Public OppPokemon As New List(Of Pokemon)
|
|
|
|
Public OwnStatistics As BattleSystem.BattleScreen.NetworkPlayerStatistics
|
|
Public OppStatistics As BattleSystem.BattleScreen.NetworkPlayerStatistics
|
|
|
|
Public Sub New(ByVal won As Boolean, ByVal own As List(Of Pokemon), ByVal opp As List(Of Pokemon), ByVal ownStatistics As BattleSystem.BattleScreen.NetworkPlayerStatistics, ByVal oppStatistics As BattleSystem.BattleScreen.NetworkPlayerStatistics)
|
|
Me.Won = won
|
|
|
|
For Each p As Pokemon In own
|
|
Me.OwnPokemon.Add(Pokemon.GetPokemonByData(p.GetSaveData()))
|
|
Next
|
|
|
|
Me.OppPokemon = opp
|
|
|
|
Me.OwnStatistics = ownStatistics
|
|
Me.OppStatistics = oppStatistics
|
|
|
|
If won = False Then
|
|
For Each p As Pokemon In Me.OwnPokemon
|
|
p.HP = 0
|
|
p.Status = Pokemon.StatusProblems.Fainted
|
|
Next
|
|
Else
|
|
For Each p As Pokemon In Me.OppPokemon
|
|
p.HP = 0
|
|
p.Status = Pokemon.StatusProblems.Fainted
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Public Shared Sub SetupBattleResults(ByVal BattleScreen As BattleSystem.BattleScreen)
|
|
BattleSuccessful = True
|
|
BattleResults = New BattleResult(BattleSystem.Battle.Won, Core.Player.Pokemons, BattleScreen.Trainer.Pokemons, BattleScreen.OwnStatistics, BattleScreen.OppStatistics)
|
|
If BattleResults.Won = True Then
|
|
PlayerStatistics.Track("PVP Wins", 1)
|
|
Else
|
|
PlayerStatistics.Track("PVP Losses", 1)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawBattleResults()
|
|
If Not BattleResults Is Nothing Then
|
|
'Draw Result:
|
|
Dim resultText As String = "You Won the Battle!"
|
|
Dim resultStateText As String = "Won"
|
|
Dim resultColor As Color = Color.Orange
|
|
If BattleResults.Won = False Then
|
|
resultText = "You Lost the Battle!"
|
|
resultStateText = "Lost"
|
|
resultColor = Color.LightBlue
|
|
End If
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, resultText, New Vector2(Core.windowSize.Width / 2.0F - FontManager.MainFont.MeasureString(resultText).X / 2.0F, 120), Color.White)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, resultStateText, New Vector2(Core.windowSize.Width / 2.0F - FontManager.MainFont.MeasureString(resultText).X / 2.0F + FontManager.MainFont.MeasureString("You ").X, 120), resultColor)
|
|
|
|
'Own side:
|
|
Canvas.DrawRectangle(New Rectangle(100, 200, 300, 64), New Color(177, 228, 247, 200))
|
|
Canvas.DrawGradient(New Rectangle(0, 200, 100, 64), New Color(255, 255, 255, 0), New Color(177, 228, 247, 200), True, -1)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Core.Player.Name, New Vector2(140, 215), Color.Black, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.Draw(Screen.Level.OwnPlayer.Texture, New Rectangle(60, 200, 64, 64), New Rectangle(0, 64, 32, 32), Color.White)
|
|
|
|
Canvas.DrawRectangle(New Rectangle(0, 264, 400, 32), New Color(6, 77, 139))
|
|
|
|
For i = 0 To BattleResults.OwnPokemon.Count - 1
|
|
Dim p As Pokemon = BattleResults.OwnPokemon(i)
|
|
|
|
Dim c As Color = Color.White
|
|
If p.Status = Pokemon.StatusProblems.Fainted Or p.HP <= 0 Then
|
|
c = New Color(65, 65, 65, 255)
|
|
End If
|
|
Dim pokeTexture = p.GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(40 + i * 40 - CInt((pokeTexture.Width - 32) / 2), 264, pokeTexture.Width, 32), c)
|
|
Next
|
|
|
|
'Draw Own Statistics:
|
|
With BattleResults.OwnStatistics
|
|
Dim s1 As String = "Turns:" & Environment.NewLine &
|
|
" Moves:" & Environment.NewLine &
|
|
" Switches:" & Environment.NewLine & Environment.NewLine &
|
|
"Super Effective:" & Environment.NewLine &
|
|
"Not very Effective:" & Environment.NewLine &
|
|
"No Effect:" & Environment.NewLine & Environment.NewLine &
|
|
"Critical Hits:"
|
|
Dim s2 As String = .Turns & Environment.NewLine &
|
|
.Moves & Environment.NewLine &
|
|
.Switches & Environment.NewLine & Environment.NewLine &
|
|
.SuperEffective & Environment.NewLine &
|
|
.NotVeryEffective & Environment.NewLine &
|
|
.NoEffect & Environment.NewLine & Environment.NewLine &
|
|
.Critical
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, s1, New Vector2(40, 340), Color.White, 0.0F, Vector2.Zero, 1.1F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, s2, New Vector2(250, 340), Color.LightBlue, 0.0F, Vector2.Zero, 1.1F, SpriteEffects.None, 0.0F)
|
|
End With
|
|
|
|
'Draw Pokémon left:
|
|
Dim countOwnPokemon As Integer = 0
|
|
For Each p As Pokemon In BattleResults.OwnPokemon
|
|
If p.IsEgg() = False And p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then
|
|
countOwnPokemon += 1
|
|
End If
|
|
Next
|
|
Dim countOppPokemon As Integer = 0
|
|
For Each p As Pokemon In BattleResults.OppPokemon
|
|
If p.IsEgg() = False And p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then
|
|
countOppPokemon += 1
|
|
End If
|
|
Next
|
|
|
|
Dim pokeLeft As String = countOwnPokemon.ToString & " VS " & countOppPokemon.ToString()
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, pokeLeft, New Vector2(Core.windowSize.Width / 2.0F - FontManager.MainFont.MeasureString(pokeLeft).X * 2.0F, 240), Color.White, 0.0F, Vector2.Zero, 4.0F, SpriteEffects.None, 0.0F)
|
|
|
|
'Opp Side:
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width - 300), 200, 300, 64), New Color(177, 228, 247, 200))
|
|
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width - 400), 200, 100, 64), New Color(255, 255, 255, 0), New Color(177, 228, 247, 200), True, -1)
|
|
|
|
Dim t As Texture2D = Nothing
|
|
Dim tempPlayer As Servers.Player = Nothing
|
|
For Each p As Servers.Player In Core.ServersManager.PlayerCollection
|
|
If p.ServersID = PartnerNetworkID Then
|
|
Dim tPath As String = NetworkPlayer.GetTexturePath(p.Skin)
|
|
If TextureManager.TextureExist(tPath) = True Then
|
|
t = TextureManager.GetTexture(tPath)
|
|
Else
|
|
t = TextureManager.GetTexture("Textures\NPC\0")
|
|
End If
|
|
tempPlayer = p
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If Not t Is Nothing And Not tempPlayer Is Nothing Then
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, tempPlayer.Name, New Vector2(Core.windowSize.Width - 260, 215), Color.Black, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(Core.windowSize.Width - 340), 200, 64, 64), New Rectangle(0, 64, 32, 32), Color.White)
|
|
End If
|
|
|
|
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width - 400), 264, 400, 32), New Color(6, 77, 139))
|
|
|
|
For i = 0 To BattleResults.OppPokemon.Count - 1
|
|
Dim p As Pokemon = BattleResults.OppPokemon(i)
|
|
|
|
Dim c As Color = Color.White
|
|
If p.Status = Pokemon.StatusProblems.Fainted Or p.HP <= 0 Then
|
|
c = New Color(65, 65, 65, 255)
|
|
End If
|
|
Dim pokeTexture = p.GetMenuTexture()
|
|
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(Core.windowSize.Width - 360) + i * 40 - CInt((pokeTexture.Width - 32) / 2), 264, pokeTexture.Width, 32), c)
|
|
Next
|
|
|
|
'Draw Opp Statistics:
|
|
With BattleResults.OppStatistics
|
|
Dim s1 As String = "Turns:" & Environment.NewLine &
|
|
" Moves:" & Environment.NewLine &
|
|
" Switches:" & Environment.NewLine & Environment.NewLine &
|
|
"Super Effective:" & Environment.NewLine &
|
|
"Not very Effective:" & Environment.NewLine &
|
|
"No Effect:" & Environment.NewLine & Environment.NewLine &
|
|
"Critical Hits:"
|
|
Dim s2 As String = .Turns & Environment.NewLine &
|
|
.Moves & Environment.NewLine &
|
|
.Switches & Environment.NewLine & Environment.NewLine &
|
|
.SuperEffective & Environment.NewLine &
|
|
.NotVeryEffective & Environment.NewLine &
|
|
.NoEffect & Environment.NewLine & Environment.NewLine &
|
|
.Critical
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, s1, New Vector2(Core.windowSize.Width - 360, 340), Color.White, 0.0F, Vector2.Zero, 1.1F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, s2, New Vector2(Core.windowSize.Width - 150, 340), Color.LightBlue, 0.0F, Vector2.Zero, 1.1F, SpriteEffects.None, 0.0F)
|
|
End With
|
|
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub UpdateBattleResults()
|
|
If Controls.Accept() = True Then
|
|
ScreenState = ScreenStates.Stopped
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
End Class |