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

226 lines
8.3 KiB
VB.net

Public Class AnimatedBlock
Inherits Entity
Shared BlockTexturesTemp As New Dictionary(Of String, Texture2D)
Dim AnimationNames As List(Of String)
Dim Animations As List(Of Animation)
Dim currentRectangle As List(Of Rectangle)
Dim X, Y, width, height, rows, columns, animationSpeed, startRow, startColumn As List(Of Integer)
Dim AnimCount As Integer = 0
Sub New()
X = New List(Of Integer)
Y = New List(Of Integer)
width = New List(Of Integer)
height = New List(Of Integer)
rows = New List(Of Integer)
columns = New List(Of Integer)
animationSpeed = New List(Of Integer)
startRow = New List(Of Integer)
startColumn = New List(Of Integer)
AnimationNames = New List(Of String)
currentRectangle = New List(Of Rectangle)
Animations = New List(Of Animation)
End Sub
Public Overloads Sub Initialize(ByVal AnimationData As List(Of List(Of Integer)))
MyBase.Initialize()
For i = 0 To AnimationData.Count - 1
X.Add(AnimationData(i)(0))
Y.Add(AnimationData(i)(1))
width.Add(AnimationData(i)(2))
height.Add(AnimationData(i)(3))
rows.Add(AnimationData(i)(4))
columns.Add(AnimationData(i)(5))
animationSpeed.Add(AnimationData(i)(6))
startRow.Add(AnimationData(i)(7))
startColumn.Add(AnimationData(i)(8))
AnimationNames.Add("")
currentRectangle.Add(New Rectangle(0, 0, 0, 0))
Animations.Add(New Animation(TextureManager.GetTexture("Textures\Routes"), rows(i), columns(i), 16, 16, animationSpeed(i), startRow(i), startColumn(i)))
AnimCount += 1
Next
CreateBlockTextureTemp()
End Sub
Public Shared Sub ClearAnimationResources()
BlockTexturesTemp.Clear()
End Sub
Private Sub CreateBlockTextureTemp()
'If Core.GameOptions.GraphicStyle = 1 Then
For n = 0 To Animations.Count - 1
Dim r As New Rectangle(X(n), Y(n), width(n), height(n))
Me.AnimationNames(n) = AdditionalValue & "," & X(n) & "," & Y(n) & "," & height(n) & "," & width(n)
If BlockTexturesTemp.ContainsKey(AnimationNames(n) & "_0") = False Then
For i = 0 To Me.rows(n) - 1
For j = 0 To Me.columns(n) - 1
BlockTexturesTemp.Add(AnimationNames(n) & "_" & (j + columns(n) * i).ToString, TextureManager.GetTexture(AdditionalValue, New Rectangle(r.X + r.Width * j, r.Y + r.Height * i, r.Width, r.Height)))
Next
Next
End If
Next
End Sub
Public Overrides Sub ClickFunction()
Me.Surf()
End Sub
Public Overrides Function WalkAgainstFunction() As Boolean
WalkOntoFunction()
Return MyBase.WalkAgainstFunction()
End Function
Public Overrides Function WalkIntoFunction() As Boolean
WalkOntoFunction()
Return MyBase.WalkIntoFunction()
End Function
Public Overrides Sub WalkOntoFunction()
If Screen.Level.Surfing = True Then
Dim canSurf As Boolean = False
For Each Entity As Entity In Screen.Level.Entities
If Entity.boundingBox.Contains(Screen.Camera.GetForwardMovedPosition()) = ContainmentType.Contains Then
If Entity.ActionValue = 0 AndAlso (Entity.EntityID = "AnimatedBlock" OrElse Entity.EntityID = "Water") Then
canSurf = True
Else
If Entity.Collision = True Then
canSurf = False
Exit For
End If
End If
End If
Next
If canSurf = True Then
Screen.Camera.Move(1)
Screen.Level.PokemonEncounter.TryEncounterWildPokemon(Me.Position, Spawner.EncounterMethods.Surfing, "")
End If
End If
End Sub
Private Sub Surf()
If Screen.Camera.Turning = False Then
If Screen.Level.Surfing = False Then
If Badge.CanUseHMMove(Badge.HMMoves.Surf) = True Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
If Screen.ChooseBox.Showing = False Then
Dim canSurf As Boolean = False
If Me.ActionValue = 0 Then
For Each Entity As Entity In Screen.Level.Entities
If Entity.boundingBox.Contains(Screen.Camera.GetForwardMovedPosition()) = ContainmentType.Contains Then
If Entity.EntityID = "AnimatedBlock" Then
If Core.Player.SurfPokemon > -1 Then
canSurf = True
End If
Else
If Entity.Collision = True Then
canSurf = False
Exit For
End If
End If
End If
Next
End If
If Screen.Level.Riding = True Then
canSurf = False
End If
If canSurf = True Then
Dim message As String = "Do you want to Surf?%Yes|No%"
Screen.TextBox.Show(message, {Me}, True, True)
SoundManager.PlaySound("select")
End If
End If
End If
End If
End If
End Sub
Protected Overrides Function CalculateCameraDistance(CPosition As Vector3) As Single
Return MyBase.CalculateCameraDistance(CPosition) - 0.25F
End Function
Public Overrides Sub UpdateEntity()
If Not Animations Is Nothing Then
For n = 0 To Animations.Count - 1
Animations(n).Update(0.01)
If currentRectangle(n) <> Animations(n).TextureRectangle Then
ChangeTexture(n)
currentRectangle(n) = Animations(n).TextureRectangle
End If
Next
End If
MyBase.UpdateEntity()
End Sub
Private Sub ChangeTexture(ByVal n As Integer)
'If Core.GameOptions.GraphicStyle = 1 Then
If BlockTexturesTemp.Count = 0 Then
ClearAnimationResources()
CreateBlockTextureTemp()
End If
Dim i = Animations(n).CurrentRow
Dim j = Animations(n).CurrentColumn
Me.Textures(n) = AnimatedBlock.BlockTexturesTemp(AnimationNames(n) & "_" & (j + columns(n) * i))
'End If
End Sub
Public Overrides Sub ResultFunction(ByVal Result As Integer)
If Result = 0 Then
Screen.TextBox.Show(Core.Player.Pokemons(Core.Player.SurfPokemon).GetDisplayName() & " used~Surf!", {Me})
Screen.Level.Surfing = True
Screen.Camera.Move(1)
PlayerStatistics.Track("Surf used", 1)
With Screen.Level.OwnPlayer
Core.Player.TempSurfSkin = .SkinName
Dim pokemonNumber As Integer = Core.Player.Pokemons(Core.Player.SurfPokemon).Number
Dim SkinName As String = "[POKEMON|N]" & pokemonNumber & PokemonForms.GetOverworldAddition(Core.Player.Pokemons(Core.Player.SurfPokemon))
If Core.Player.Pokemons(Core.Player.SurfPokemon).IsShiny = True Then
SkinName = "[POKEMON|S]" & pokemonNumber & PokemonForms.GetOverworldAddition(Core.Player.Pokemons(Core.Player.SurfPokemon))
End If
.SetTexture(SkinName, False)
.UpdateEntity()
SoundManager.PlayPokemonCry(pokemonNumber)
If Screen.Level.IsRadioOn = False OrElse GameJolt.PokegearScreen.StationCanPlay(Screen.Level.SelectedRadioStation) = False Then
MusicManager.PlayMusic("surf", True)
End If
End With
End If
End Sub
Public Overrides Sub Render()
Dim setRasterizerState As Boolean = Me.Model.ID <> 0
Me.Draw(Me.Model, Textures, setRasterizerState)
End Sub
End Class