226 lines
8.3 KiB
VB.net
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 |