295 lines
13 KiB
VB.net
295 lines
13 KiB
VB.net
Public Class LearnAttackScreen
|
||
|
||
Inherits Screen
|
||
|
||
Dim Pokemon As Pokemon
|
||
Dim newAttack As BattleSystem.Attack
|
||
Dim mainTexture As Texture2D
|
||
|
||
Dim chosen As Boolean = False
|
||
Dim index As Integer = 0
|
||
|
||
Dim AttackIndex As Integer = 0
|
||
Dim AttackPos As Single = 320.0F
|
||
|
||
Dim canForget As Boolean = True
|
||
Dim MachineItemID As String = CInt(-1).ToString
|
||
|
||
Dim currentCharIndex As Integer = 0
|
||
|
||
Public Sub New(ByVal currentScreen As Screen, ByVal Pokemon As Pokemon, ByVal newAttack As BattleSystem.Attack)
|
||
Me.New(currentScreen, Pokemon, newAttack, CInt(-1).ToString)
|
||
End Sub
|
||
|
||
Public Sub New(ByVal currentScreen As Screen, ByVal Pokemon As Pokemon, ByVal newAttack As BattleSystem.Attack, ByVal MachineItemID As String)
|
||
Me.Identification = Identifications.LearnAttackScreen
|
||
|
||
Me.PreScreen = currentScreen
|
||
Me.Pokemon = Pokemon
|
||
Me.newAttack = newAttack
|
||
Me.MachineItemID = MachineItemID
|
||
|
||
mainTexture = TextureManager.GetTexture("GUI\Menus\Menu")
|
||
End Sub
|
||
|
||
Public Overrides Sub Update()
|
||
If Me.currentCharIndex < GetText().Length Then
|
||
Me.currentCharIndex += 1
|
||
Exit Sub
|
||
End If
|
||
|
||
TextBox.Update()
|
||
If TextBox.Showing = False Then
|
||
If chosen = False Then
|
||
Core.GameInstance.IsMouseVisible = False
|
||
If Controls.Up(True, True, True, True) = True Then
|
||
Me.AttackIndex -= 1
|
||
End If
|
||
If Controls.Down(True, True, True, True) = True Then
|
||
Me.AttackIndex += 1
|
||
End If
|
||
|
||
Me.AttackIndex = CInt(MathHelper.Clamp(Me.AttackIndex, 0, 4))
|
||
|
||
If AttackIndex < 4 Then
|
||
If CBool(GameModeManager.GetGameRuleValue("CanForgetHM", "0")) = True Then
|
||
canForget = True
|
||
Else
|
||
canForget = Not Pokemon.Attacks(AttackIndex).IsHMMove
|
||
End If
|
||
Else
|
||
canForget = True
|
||
End If
|
||
|
||
If Controls.Accept() = True Then
|
||
chosen = True
|
||
End If
|
||
Else
|
||
Core.GameInstance.IsMouseVisible = True
|
||
|
||
If Controls.Right(True, True, False) = True And canForget = True Then
|
||
index = 1
|
||
End If
|
||
If Controls.Left(True, True, False) = True Then
|
||
index = 0
|
||
End If
|
||
|
||
For i = 0 To 1
|
||
If New Rectangle(CInt(Core.windowSize.Width / 2) - 182 + i * 192, 550, 128 + 32, 64 + 32).Contains(MouseHandler.MousePosition) = True Then
|
||
index = i
|
||
|
||
If MouseHandler.ButtonPressed(MouseHandler.MouseButtons.LeftButton) = True Then
|
||
Select Case index
|
||
Case 0
|
||
ClickNo()
|
||
Case 1
|
||
ClickYes()
|
||
End Select
|
||
End If
|
||
End If
|
||
Next
|
||
|
||
If Controls.Accept(False, True) = True Then
|
||
Select Case index
|
||
Case 0
|
||
ClickNo()
|
||
Case 1
|
||
ClickYes()
|
||
End Select
|
||
End If
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Public Overrides Sub Draw()
|
||
Me.PreScreen.Draw()
|
||
Canvas.DrawRectangle(Core.windowSize, New Color(0, 0, 0, 150))
|
||
Dim CanvasTexture As Texture2D = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "")
|
||
DrawText()
|
||
|
||
If currentCharIndex < GetText().Length Then
|
||
Exit Sub
|
||
End If
|
||
|
||
Dim p As Vector2 = New Vector2(40, 50)
|
||
|
||
If Pokemon.Attacks.Count > 0 Then
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(p.X + 432 - 352 + AttackPos), CInt(p.Y + 18), 320, 384))
|
||
|
||
Dim A As BattleSystem.Attack
|
||
If AttackIndex = 4 Then
|
||
A = newAttack
|
||
Else
|
||
A = Pokemon.Attacks(AttackIndex)
|
||
End If
|
||
|
||
With Core.SpriteBatch
|
||
Dim Description As String = A.Description.Replace("’", "'").CropStringToWidth(FontManager.MainFont, 240)
|
||
|
||
Dim power As String = A.Power.ToString()
|
||
If power = "0" Then
|
||
power = "-"
|
||
End If
|
||
|
||
Dim acc As String = A.Accuracy.ToString()
|
||
If acc = "0" Then
|
||
acc = "-"
|
||
End If
|
||
|
||
.DrawString(FontManager.MainFont, "Power: " & power & Environment.NewLine & "Accuracy: " & acc & Environment.NewLine & Environment.NewLine & Description, New Vector2(CInt(p.X + 432 - 300 + AttackPos), p.Y + 40), Color.Black)
|
||
.Draw(A.GetDamageCategoryImage(), New Rectangle(CInt(p.X + 432 - 144 + AttackPos + 24), CInt(p.Y + 40), 56, 28), Color.White)
|
||
End With
|
||
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(p.X + 80), CInt(p.Y + 18), 320, 384))
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(p.X + 80), CInt(p.Y + 48 + 384), 320, 96))
|
||
|
||
For i = 0 To Me.Pokemon.Attacks.Count - 1
|
||
DrawAttack(i, Me.Pokemon.Attacks(i))
|
||
Next
|
||
DrawAttack(4, newAttack)
|
||
End If
|
||
|
||
If chosen = True Then
|
||
Canvas.DrawRectangle(Core.windowSize, New Color(0, 0, 0, 150))
|
||
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(Core.windowSize.Width / 2 - 352), 172, 704, 96))
|
||
|
||
Dim drawText As String = ""
|
||
If AttackIndex = 4 Then
|
||
drawText = "Give up on learning """ & newAttack.Name & """?"
|
||
Else
|
||
drawText = "Forget """ & Pokemon.Attacks(AttackIndex).Name & """ to learn """ & newAttack.Name & """?"
|
||
If canForget = False Then
|
||
drawText = "Cannot forget the move " & Pokemon.Attacks(AttackIndex).Name & " because" & Environment.NewLine & "it's a Hidden Machine move."
|
||
End If
|
||
End If
|
||
|
||
Core.SpriteBatch.DrawString(FontManager.InGameFont, drawText, New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(drawText).X / 2), 200), Color.Black)
|
||
|
||
Dim endIndex As Integer = 1
|
||
If canForget = False Then
|
||
endIndex = 0
|
||
End If
|
||
|
||
For i = 0 To endIndex
|
||
Dim Text As String = "Learn"
|
||
If AttackIndex = 4 Then
|
||
Text = "OK"
|
||
End If
|
||
|
||
If i = 0 Then
|
||
Text = "Cancel"
|
||
End If
|
||
|
||
If i = index Then
|
||
CanvasTexture = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 48, 48, 48), "")
|
||
Else
|
||
CanvasTexture = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "")
|
||
End If
|
||
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(Core.windowSize.Width / 2) - 182 + i * 192 + 22, 550, 128, 64))
|
||
Core.SpriteBatch.DrawString(FontManager.InGameFont, Text, New Vector2(CInt(Core.windowSize.Width / 2) - 164 + i * 192 + 22, 402 + 180), Color.Black)
|
||
Next
|
||
End If
|
||
|
||
TextBox.Draw()
|
||
End Sub
|
||
|
||
Private Sub DrawText()
|
||
If currentCharIndex < (Pokemon.GetDisplayName() & " ").Length Then
|
||
Core.SpriteBatch.DrawString(FontManager.MainFont, (Pokemon.GetDisplayName() & " ").Remove(currentCharIndex), New Vector2(120, 20), Color.White)
|
||
Else
|
||
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.GetDisplayName() & " ", New Vector2(120, 20), Color.White)
|
||
End If
|
||
If currentCharIndex > (Pokemon.GetDisplayName() & " ").Length Then
|
||
Dim pokeTexture = Pokemon.GetMenuTexture()
|
||
Dim pokeTextureScale As Vector2 = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height))
|
||
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(FontManager.MainFont.MeasureString(Pokemon.GetDisplayName()).X + 120), 12, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), Color.White)
|
||
End If
|
||
If currentCharIndex > (Pokemon.GetDisplayName() & " ").Length + 1 Then
|
||
If currentCharIndex < GetText().Length Then
|
||
Core.SpriteBatch.DrawString(FontManager.MainFont, ("wants to learn """ & newAttack.Name & """. But " & Pokemon.GetDisplayName() & " can only learn 4 attacks." & Environment.NewLine & "Do you want " & Pokemon.GetDisplayName() & " to forget an attack to learn """ & newAttack.Name & """?").Remove(currentCharIndex - (Pokemon.GetDisplayName() & " ").Length), New Vector2(FontManager.MainFont.MeasureString(Pokemon.GetDisplayName()).X + 152, 20), Color.White)
|
||
Else
|
||
Core.SpriteBatch.DrawString(FontManager.MainFont, "wants to learn """ & newAttack.Name & """. But " & Pokemon.GetDisplayName() & " can only learn 4 attacks." & Environment.NewLine & "Do you want " & Pokemon.GetDisplayName() & " to forget an attack to learn """ & newAttack.Name & """?", New Vector2(FontManager.MainFont.MeasureString(Pokemon.GetDisplayName()).X + 152, 20), Color.White)
|
||
End If
|
||
End If
|
||
End Sub
|
||
|
||
Private Function GetText() As String
|
||
Return Pokemon.GetDisplayName() & " wants to learn """ & newAttack.Name & """. But " & Pokemon.GetDisplayName() & " can only learn 4 attacks." & Environment.NewLine & "Do you want " & Pokemon.GetDisplayName() & " to forget an attack to learn """ & newAttack.Name & """?"
|
||
End Function
|
||
|
||
Private Sub DrawAttack(ByVal i As Integer, ByVal A As BattleSystem.Attack)
|
||
Dim p As New Vector2(140, 80 + i * (64 + 32))
|
||
|
||
If i = 4 Then
|
||
p.Y += 32
|
||
End If
|
||
|
||
Dim CanvasTexture As Texture2D = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "")
|
||
If Me.AttackIndex = i Then
|
||
CanvasTexture = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(48, 0, 48, 48), "")
|
||
End If
|
||
|
||
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(p.X) + 12, CInt(p.Y), 256, 64))
|
||
|
||
With Core.SpriteBatch
|
||
.DrawString(FontManager.MainFont, A.Name, New Vector2(CInt(p.X) + 30, CInt(p.Y + 26)), Color.Black)
|
||
|
||
Dim c As Color = Color.Black
|
||
Dim per As Integer = CInt((A.CurrentPP / A.MaxPP) * 100)
|
||
|
||
If per <= 33 And per > 10 Then
|
||
c = Color.Orange
|
||
ElseIf per <= 10 Then
|
||
c = Color.IndianRed
|
||
End If
|
||
|
||
.DrawString(FontManager.MainFont, "PP " & A.CurrentPP & " / " & A.MaxPP, New Vector2(CInt(p.X) + 144, CInt(p.Y + 58)), c)
|
||
|
||
.Draw(TextureManager.GetTexture("GUI\Menus\Types", A.Type.GetElementImage(), ""), New Rectangle(CInt(p.X) + 30, CInt(p.Y + 54), 48, 16), Color.White)
|
||
End With
|
||
End Sub
|
||
|
||
Private Sub ClickYes()
|
||
If canForget = True Then
|
||
Dim Text As String = Pokemon.GetDisplayName() & " didn't~learn " & newAttack.Name & "!"
|
||
|
||
If AttackIndex <> 4 Then
|
||
TeachMovesScreen.LearnedMove = True
|
||
Text = "1... 2... 3... and...*Ta-da!*" & Pokemon.GetDisplayName() & " forgot~" & Pokemon.Attacks(AttackIndex).Name & " and..."
|
||
Pokemon.Attacks.RemoveAt(AttackIndex)
|
||
Pokemon.Attacks.Insert(AttackIndex, newAttack)
|
||
|
||
If Me.MachineItemID <> CInt(-1).ToString Then
|
||
PlayerStatistics.Track("TMs/HMs used", 1)
|
||
If CBool(GameModeManager.GetGameRuleValue("SingleUseTM", "0")) = True Then
|
||
Dim TechMachine As Item = Item.GetItemByID(Me.MachineItemID)
|
||
If TechMachine.ItemType = Items.ItemTypes.Machines Then
|
||
If CType(TechMachine, Items.TechMachine).IsTM = True Then
|
||
Core.Player.Inventory.RemoveItem(Me.MachineItemID, 1)
|
||
End If
|
||
End If
|
||
End If
|
||
End If
|
||
PlayerStatistics.Track("Moves learned", 1)
|
||
TextBox.FollowUp = AddressOf FollowUpText
|
||
End If
|
||
|
||
TextBox.Show(Text, {}, False, False)
|
||
Core.GameInstance.IsMouseVisible = False
|
||
Core.SetScreen(Me.PreScreen)
|
||
End If
|
||
End Sub
|
||
|
||
Private Sub ClickNo()
|
||
Me.chosen = False
|
||
Core.GameInstance.IsMouseVisible = False
|
||
End Sub
|
||
|
||
Private Sub FollowUpText()
|
||
TextBox.Show("... " & Pokemon.GetDisplayName() & " learned~" & newAttack.Name & "!")
|
||
SoundManager.PlaySound("success_small", True)
|
||
End Sub
|
||
|
||
End Class |