P3D-Legacy/P3D/Screens/Pokemon/TeachMovesScreen.vb
TheOmegaGhost 0663bfd251 Move Reminder and Deleter Overhaul
Reminder and Deleter in every PokéCenter now
Replaces previously useless Mystery Gift NPC area
No longer costs an item, but unlocks as you get badges
Deleter requires 2 badges, reminder requires 4 badges
Fixed weird behavior in their menu screens (double move bug)
Moved Draco Meteor tutor to Blackthorn City house
Draco Meteor tutor is now more elegantly scripted
2020-04-16 23:27:36 -03:00

220 lines
7.7 KiB
VB.net

Public Class TeachMovesScreen
Inherits Screen
Dim MovesList As New List(Of BattleSystem.Attack)
Dim Pokemon As Pokemon
Dim mainTexture As Texture2D
Dim index As Integer = 0
Dim scrollIndex As Integer = 0
Public Shared LearnedMove As Boolean = False
Public Sub New(ByVal currentScreen As Screen, ByVal PokemonIndex As Integer)
Me.PreScreen = currentScreen
Me.Pokemon = Core.Player.Pokemons(PokemonIndex)
Me.Identification = Identifications.TeachMovesScreen
For i = 0 To Pokemon.AttackLearns.Count - 1
Dim tutorMove As BattleSystem.Attack = Pokemon.AttackLearns.Values(i)
Dim learnLevel As Integer = Pokemon.AttackLearns.Keys(i)
If learnLevel <= Pokemon.Level Then
Dim canLearnMove As Boolean = True
For Each learnedAttack As BattleSystem.Attack In Pokemon.Attacks
If learnedAttack.ID = tutorMove.ID Then
canLearnMove = False
End If
Next
For Each move As BattleSystem.Attack In MovesList
If move.ID = tutorMove.ID Then
canLearnMove = False
End If
Next
If canLearnMove = True Then
MovesList.Add(tutorMove)
End If
End If
Next
Me.MouseVisible = False
Me.CanBePaused = True
Me.CanMuteMusic = True
LearnedMove = False
Me.mainTexture = TextureManager.GetTexture("GUI\Menus\Menu")
End Sub
Public Sub New(ByVal currentScreen As Screen, ByVal PokemonIndex As Integer, ByVal MovesList() As BattleSystem.Attack)
Me.PreScreen = currentScreen
Me.Pokemon = Core.Player.Pokemons(PokemonIndex)
Me.Identification = Identifications.TeachMovesScreen
For Each a As BattleSystem.Attack In MovesList
Dim canLearnMove As Boolean = False
For Each tutorMove As BattleSystem.Attack In Pokemon.TutorAttacks
If a.ID = tutorMove.ID Then
canLearnMove = True
End If
Next
For i = 0 To Pokemon.AttackLearns.Count - 1
Dim learnAttack As BattleSystem.Attack = Pokemon.AttackLearns.Values(i)
If learnAttack.ID = a.ID Then
canLearnMove = True
End If
Next
For Each eggMoveID As Integer In Pokemon.EggMoves
If eggMoveID = a.ID Then
canLearnMove = True
End If
Next
For Each TMMoveID As Integer In Pokemon.Machines
If TMMoveID = a.ID Then
canLearnMove = True
End If
Next
For Each learnedAttack As BattleSystem.Attack In Pokemon.Attacks
If learnedAttack.ID = a.ID Then
canLearnMove = False
End If
Next
For Each move As BattleSystem.Attack In Me.MovesList
If move.ID = a.ID Then
canLearnMove = False
End If
Next
If canLearnMove = True Then
Me.MovesList.Add(a)
End If
Next
Me.MouseVisible = False
Me.CanBePaused = True
Me.CanMuteMusic = True
LearnedMove = False
Me.mainTexture = TextureManager.GetTexture("GUI\Menus\Menu")
End Sub
Public Overrides Sub Draw()
Me.PreScreen.Draw()
Canvas.DrawImageBorder(TextureManager.GetTexture(mainTexture, New Rectangle(0, 0, 48, 48)), 2, New Rectangle(60, 100, 800, 480))
Core.SpriteBatch.Draw(Pokemon.GetTexture(True), New Rectangle(80, 100, 128, 128), Color.White)
Core.SpriteBatch.DrawString(FontManager.MiniFont, Pokemon.GetDisplayName() & Environment.NewLine & "Level: " & Pokemon.Level, New Vector2(80, 260), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MiniFont, "Pokémon's moves:", New Vector2(245, 140), Color.Black)
For i = 0 To Pokemon.Attacks.Count - 1
If i <= Pokemon.Attacks.Count - 1 Then
DrawAttack(245, i, Pokemon.Attacks(i), False)
End If
Next
If Me.MovesList.Count = 0 Then
Core.SpriteBatch.DrawString(FontManager.MiniFont, "The Pokémon cannot learn" & Environment.NewLine & "a new move here.", New Vector2(580, 140), Color.Black)
Else
Core.SpriteBatch.DrawString(FontManager.MiniFont, "Tutor moves (" & MovesList.Count & "):", New Vector2(580, 140), Color.Black)
For i = scrollIndex To scrollIndex + 3
If i <= MovesList.Count - 1 Then
DrawAttack(580, i, MovesList(i), True)
End If
Next
End If
Dim d As New Dictionary(Of Buttons, String)
d.Add(Buttons.A, "Learn")
d.Add(Buttons.B, "Close")
DrawGamePadControls(d)
End Sub
Private Sub DrawAttack(ByVal x As Integer, ByVal i As Integer, ByVal A As BattleSystem.Attack, ByVal isLearnMove As Boolean)
Dim y As Integer = i - scrollIndex
If isLearnMove = False Then
y = i
End If
Dim p As New Vector2(x, 160 + y * (64 + 32))
Dim CanvasTexture As Texture2D = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "")
If Me.index = i And isLearnMove = True Then
CanvasTexture = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 48, 48, 48), "")
End If
Canvas.DrawImageBorder(CanvasTexture, 2, New Rectangle(CInt(p.X - 18), CInt(p.Y), 256, 64))
With Core.SpriteBatch
.DrawString(FontManager.MiniFont, A.Name, New Vector2(p.X, 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.MiniFont, Localization.GetString("PP") & " " & A.CurrentPP & " / " & A.MaxPP, New Vector2(p.X + 130, CInt(p.Y + 58)), c)
.Draw(TextureManager.GetTexture("GUI\Menus\Types", A.Type.GetElementImage(), ""), New Rectangle(CInt(p.X), CInt(p.Y + 54), 48, 16), Color.White)
End With
End Sub
Public Overrides Sub Update()
If Controls.Up(True, True, True, True, True) = True Then
Me.index -= 1
End If
If Controls.Down(True, True, True, True, True) = True Then
Me.index += 1
End If
index = index.Clamp(0, Me.MovesList.Count - 1)
If index - scrollIndex > 3 Then
scrollIndex += 1
End If
If index - scrollIndex < 0 Then
scrollIndex -= 1
End If
If Controls.Accept(True, True, True) = True Then
If Me.MovesList.Count = 0 Then
Core.SetScreen(Me.PreScreen)
Else
LearnMove(MovesList(index))
End If
End If
If Controls.Dismiss(True, True, True) = True Then
Core.SetScreen(Me.PreScreen)
End If
End Sub
Private Sub LearnMove(ByVal a As BattleSystem.Attack)
If Pokemon.Attacks.Count < 4 Then
LearnedMove = True
Pokemon.Attacks.Add(BattleSystem.Attack.GetAttackByID(a.ID))
TextBox.Show("... " & Pokemon.GetDisplayName() & " learned~" & a.Name & "!")
SoundManager.PlaySound("success_small", False)
Core.SetScreen(Me.PreScreen)
Else
Core.SetScreen(New LearnAttackScreen(Core.CurrentScreen.PreScreen, Me.Pokemon, BattleSystem.Attack.GetAttackByID(a.ID)))
End If
End Sub
End Class