P3D-Legacy/P3D/Entites/Enviroment/Whirlpool.vb

160 lines
5.8 KiB
VB.net

Public Class Whirlpool
Inherits Entity
Public Shared LoadedWaterTemp As Boolean = False
Public Shared WaterTexturesTemp As New Dictionary(Of String, Texture2D)
Dim WaterTextureName As String = ""
Dim WaterAnimation As Animation
Dim currentRectangle As New Rectangle(0, 0, 0, 0)
Public Overrides Sub Initialize()
MyBase.Initialize()
WaterAnimation = New Animation(P3D.TextureManager.GetTexture("Textures\Routes"), 1, 4, 16, 16, 9, 12, 0)
CreateWaterTextureTemp()
End Sub
Public Shared Sub ClearAnimationResources()
WaterTexturesTemp.Clear()
End Sub
Public Sub CreateWaterTextureTemp()
If Core.GameOptions.GraphicStyle = 1 Then
Dim textureData As List(Of String) = Me.AdditionalValue.Split(CChar(",")).ToList()
If textureData.Count >= 4 Then
Dim r As New Rectangle(CInt(textureData(1)), CInt(textureData(2)), CInt(textureData(3)), CInt(textureData(4)))
Dim texturePath As String = textureData(0)
Me.WaterTextureName = AdditionalValue
If Whirlpool.WaterTexturesTemp.ContainsKey(AdditionalValue & "_0") = False Then
Whirlpool.WaterTexturesTemp.Add(AdditionalValue & "_0", TextureManager.GetTexture(texturePath, New Rectangle(r.X, r.Y, r.Width, r.Height)))
Whirlpool.WaterTexturesTemp.Add(AdditionalValue & "_1", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width, r.Y, r.Width, r.Height)))
Whirlpool.WaterTexturesTemp.Add(AdditionalValue & "_2", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 2, r.Y, r.Width, r.Height)))
Whirlpool.WaterTexturesTemp.Add(AdditionalValue & "_3", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 3, r.Y, r.Width, r.Height)))
End If
Else
If Whirlpool.WaterTexturesTemp.ContainsKey("_0") = False Then
Whirlpool.WaterTexturesTemp.Add("_0", TextureManager.GetTexture("Routes", New Rectangle(0, 176, 16, 16)))
Whirlpool.WaterTexturesTemp.Add("_1", TextureManager.GetTexture("Routes", New Rectangle(16, 176, 16, 16)))
Whirlpool.WaterTexturesTemp.Add("_2", TextureManager.GetTexture("Routes", New Rectangle(32, 176, 16, 16)))
Whirlpool.WaterTexturesTemp.Add("_3", TextureManager.GetTexture("Routes", New Rectangle(48, 176, 16, 16)))
End If
End If
End If
End Sub
Public Overrides Sub UpdateEntity()
If Me.Model Is Nothing Then
If Not WaterAnimation Is Nothing Then
WaterAnimation.Update(0.01)
If currentRectangle <> WaterAnimation.TextureRectangle Then
ChangeTexture()
currentRectangle = WaterAnimation.TextureRectangle
End If
End If
Else
Me.Rotation.Y += 0.01F
End If
MyBase.UpdateEntity()
End Sub
Private Sub ChangeTexture()
If Core.GameOptions.GraphicStyle = 1 Then
If WaterTexturesTemp.Count = 0 Then
ClearAnimationResources()
CreateWaterTextureTemp()
End If
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(0) = Whirlpool.WaterTexturesTemp(WaterTextureName & "_0")
Case 1
Me.Textures(0) = Whirlpool.WaterTexturesTemp(WaterTextureName & "_1")
Case 2
Me.Textures(0) = Whirlpool.WaterTexturesTemp(WaterTextureName & "_2")
Case 3
Me.Textures(0) = Whirlpool.WaterTexturesTemp(WaterTextureName & "_3")
End Select
End If
End Sub
Public Overrides Sub Render()
Dim setRasterizerState As Boolean = Me.BaseModel.ID <> 0
If Me.Model Is Nothing Then
Me.Draw(Me.BaseModel, Textures, setRasterizerState)
Else
UpdateModel()
Draw(Me.BaseModel, Me.Textures, True, Me.Model)
End If
End Sub
Private Function ReturnWhirlPoolPokemonName() As String
For Each p As Pokemon In Core.Player.Pokemons
If p.IsEgg() = False Then
For Each a As BattleSystem.Attack In p.Attacks
If a.Name.ToLower() = "whirlpool" Then
Return p.GetDisplayName()
End If
Next
End If
Next
Return ""
End Function
Public Overrides Function WalkAgainstFunction() As Boolean
If Me.ActionValue = 1 Then
Return Me.Collision
End If
If Screen.Level.Surfing = True Then
Dim pName As String = ReturnWhirlPoolPokemonName()
Dim s As String = ""
If Badge.CanUseHMMove(Badge.HMMoves.Whirlpool) = True And pName <> "" Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
s = "version=2
@text.show(" & pName & " used~Whirlpool!)
@player.move(2)
:end"
PlayerStatistics.Track("Whirlpool used", 1)
Else
s = "version=2
@player.move(1)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.move(1)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@player.turn(1)
@level.wait(3)
@text.show(It's a vicious~whirlpool!*A Pokémon may be~able to pass it.)
:end"
End If
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2)
Return True
End If
Return True
End Function
End Class