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

285 lines
14 KiB
VB.net

Public Class Waterfall
Inherits Entity
Shared WaterfallTexturesTemp As New Dictionary(Of String, Texture2D)
Shared WaterTexturesTemp As New Dictionary(Of String, Texture2D)
Dim waterFallTextureName As String = ""
Dim waterTextureName As String = ""
Dim WaterAnimation As Animation
Dim currentRectangle As New Rectangle(0, 0, 0, 0)
Public Shared Sub ClearAnimationResources()
WaterfallTexturesTemp.Clear()
WaterTexturesTemp.Clear()
End Sub
Public Overrides Sub Initialize()
MyBase.Initialize()
WaterAnimation = New Animation(TextureManager.GetTexture("Textures\Routes"), 1, 3, 16, 16, 9, 13, 0)
CreateWaterTextureTemp()
End Sub
Private Sub CreateWaterTextureTemp()
If Core.GameOptions.GraphicStyle = 1 Then
Dim textureData As List(Of String) = Me.AdditionalValue.Split(CChar(",")).ToList()
If textureData.Count >= 5 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.waterFallTextureName = AdditionalValue
If Waterfall.WaterfallTexturesTemp.ContainsKey(AdditionalValue & "_0") = False Then
Waterfall.WaterfallTexturesTemp.Add(AdditionalValue & "_0", TextureManager.GetTexture(texturePath, New Rectangle(r.X, r.Y, r.Width, r.Height)))
Waterfall.WaterfallTexturesTemp.Add(AdditionalValue & "_1", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width, r.Y, r.Width, r.Height)))
Waterfall.WaterfallTexturesTemp.Add(AdditionalValue & "_2", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 2, r.Y, r.Width, r.Height)))
End If
Else
If Waterfall.WaterfallTexturesTemp.ContainsKey("_0") = False Then
Waterfall.WaterfallTexturesTemp.Add("_0", TextureManager.GetTexture("Routes", New Rectangle(0, 192, 16, 16)))
Waterfall.WaterfallTexturesTemp.Add("_1", TextureManager.GetTexture("Routes", New Rectangle(16, 192, 16, 16)))
Waterfall.WaterfallTexturesTemp.Add("_2", TextureManager.GetTexture("Routes", New Rectangle(32, 192, 16, 16)))
End If
End If
If textureData.Count >= 10 Then
Dim r As New Rectangle(CInt(textureData(6)), CInt(textureData(7)), CInt(textureData(8)), CInt(textureData(9)))
Dim texturePath As String = textureData(5)
Me.waterTextureName = AdditionalValue
If Waterfall.WaterTexturesTemp.ContainsKey(AdditionalValue & "_0") = False Then
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_0", TextureManager.GetTexture(texturePath, New Rectangle(r.X, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_1", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_2", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 2, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_3", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 3, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_4", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 4, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_5", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 5, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_6", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 6, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_7", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 7, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_8", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 8, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_9", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 9, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_10", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 10, r.Y, r.Width, r.Height)))
Waterfall.WaterTexturesTemp.Add(AdditionalValue & "_11", TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * 11, r.Y, r.Width, r.Height)))
End If
Else
If Waterfall.WaterTexturesTemp.ContainsKey("_0") = False Then
Waterfall.WaterTexturesTemp.Add("_0", TextureManager.GetTexture("Routes", New Rectangle(0, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_1", TextureManager.GetTexture("Routes", New Rectangle(20, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_2", TextureManager.GetTexture("Routes", New Rectangle(40, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_3", TextureManager.GetTexture("Routes", New Rectangle(60, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_4", TextureManager.GetTexture("Routes", New Rectangle(80, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_5", TextureManager.GetTexture("Routes", New Rectangle(100, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_6", TextureManager.GetTexture("Routes", New Rectangle(120, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_7", TextureManager.GetTexture("Routes", New Rectangle(140, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_8", TextureManager.GetTexture("Routes", New Rectangle(160, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_9", TextureManager.GetTexture("Routes", New Rectangle(180, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_10", TextureManager.GetTexture("Routes", New Rectangle(200, 220, 20, 20)))
Waterfall.WaterTexturesTemp.Add("_11", TextureManager.GetTexture("Routes", New Rectangle(220, 220, 20, 20)))
End If
End If
End If
End Sub
Public Overrides Sub UpdateEntity()
If Not WaterAnimation Is Nothing Then
WaterAnimation.Update(0.01)
If currentRectangle <> WaterAnimation.TextureRectangle Then
ChangeTexture()
currentRectangle = WaterAnimation.TextureRectangle
End If
End If
MyBase.UpdateEntity()
End Sub
Private Sub ChangeTexture()
If Core.GameOptions.GraphicStyle = 1 Then
If WaterfallTexturesTemp.Count = 0 Or WaterTexturesTemp.Count = 0 Then
ClearAnimationResources()
CreateWaterTextureTemp()
End If
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(0) = Waterfall.WaterfallTexturesTemp(waterFallTextureName & "_0")
Case 1
Me.Textures(0) = Waterfall.WaterfallTexturesTemp(waterFallTextureName & "_1")
Case 2
Me.Textures(0) = Waterfall.WaterfallTexturesTemp(waterFallTextureName & "_2")
End Select
Select Case Me.Rotation.Y
Case 0, MathHelper.TwoPi
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_0")
Case 1
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_1")
Case 2
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_2")
End Select
Case MathHelper.Pi * 0.5F
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_3")
Case 1
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_4")
Case 2
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_5")
End Select
Case MathHelper.Pi
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_6")
Case 1
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_7")
Case 2
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_8")
End Select
Case MathHelper.Pi * 1.5
Select Case WaterAnimation.CurrentColumn
Case 0
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_9")
Case 1
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_10")
Case 2
Me.Textures(1) = Waterfall.WaterTexturesTemp(waterTextureName & "_11")
End Select
End Select
End If
End Sub
Public Overrides Sub Render()
Me.Draw(Me.Model, Textures, False)
End Sub
Private Function ReturnWaterFallPokemonName() As Pokemon
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() = "waterfall" Then
Return p
End If
Next
End If
Next
Return Nothing
End Function
Public Overrides Sub WalkOntoFunction()
If Me.ActionValue = 1 Then
Exit Sub
End If
Dim isOnTop As Boolean = True
Dim OnTopcheckPosition As Vector3 = New Vector3(Me.Position.X, Me.Position.Y + 1, Me.Position.Z)
Dim Oe As Entity = GetEntity(Screen.Level.Entities, OnTopcheckPosition, True, {GetType(Waterfall)})
If Not Oe Is Nothing Then
If Oe.EntityID = "Waterfall" Then
isOnTop = False
End If
End If
If isOnTop = True Then
Dim s As String = ""
Dim Steps As Integer = 0
If Screen.Level.Surfing = False Then
Steps = 1
End If
Dim checkPosition As New Vector3(Me.Position.X, Me.Position.Y - 1, Me.Position.Z)
Dim foundSteps As Boolean = True
While foundSteps = True
Dim e As Entity = GetEntity(Screen.Level.Entities, checkPosition, True, {GetType(Waterfall)})
If Not e Is Nothing Then
If e.EntityID = "Waterfall" Then
Steps += 1
checkPosition.Y -= 1
Else
foundSteps = False
End If
Else
foundSteps = False
End If
End While
s = "version=2" & Environment.NewLine &
"@pokemon.hide" & Environment.NewLine &
"@player.move(2)" & Environment.NewLine &
"@player.setmovement(0,-1,0)" & Environment.NewLine &
"@pokemon.hide" & Environment.NewLine &
"@player.move(" & Steps & ")" & Environment.NewLine &
"@pokemon.hide" & Environment.NewLine &
":end"
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2)
End If
End Sub
Public Overrides Function WalkAgainstFunction() As Boolean
If Me.ActionValue = 1 Then
Return Me.Collision
End If
Dim p As Pokemon = ReturnWaterFallPokemonName()
If Badge.CanUseHMMove(Badge.HMMoves.Waterfall) = True And Not p Is Nothing Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
Dim s As String = ""
Dim pName As String = ""
Dim pNumber As Integer = 1
If Not p Is Nothing Then
pName = p.GetDisplayName()
pNumber = p.Number
End If
Dim Steps As Integer = 1
If Screen.Level.Surfing = False Then
Steps = 0
End If
Dim checkPosition As New Vector3(Me.Position.X, Me.Position.Y + 1, Me.Position.Z)
Dim foundSteps As Boolean = True
While foundSteps = True
Dim e As Entity = GetEntity(Screen.Level.Entities, checkPosition, True, {GetType(Waterfall)})
If Not e Is Nothing Then
If e.EntityID = "Waterfall" Then
Steps += 1
checkPosition.Y += 1
Else
foundSteps = False
End If
Else
foundSteps = False
End If
End While
Screen.Camera.PlannedMovement = New Vector3(0, 1, 0)
s = "version=2" & Environment.NewLine &
"@pokemon.cry(" & pNumber & ")" & Environment.NewLine &
"@sound.play(select)" & Environment.NewLine &
"@text.show(" & pName & " used~Waterfall.)" & Environment.NewLine &
"@player.move(" & Steps & ")" & Environment.NewLine &
"@pokemon.hide" & Environment.NewLine &
"@player.move(2)" & Environment.NewLine &
"@pokemon.hide" & Environment.NewLine &
":end"
PlayerStatistics.Track("Waterfall used", 1)
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2)
Return False
End If
If Me.Collision = True Then
Return False
Else
Return True
End If
End Function
End Class