Made the following changes related to Animated blocks:

- Renamed AnimatedTile to AnimatedBlock, and added support for multiple animations.
- Fixed bug related to start row and column in the Animation.vb class
- Added intArr2D tag content type in LevelLoader
This commit is contained in:
CaptainSegis 2017-08-09 14:12:51 -05:00
parent d6d6437ee1
commit 15cd1f3079
5 changed files with 101 additions and 55 deletions

View File

@ -208,7 +208,7 @@
<Compile Include="Entites\Enviroment\WallBill.vb" />
<Compile Include="Entites\Enviroment\WallBlock.vb" />
<Compile Include="Entites\Enviroment\WarpBlock.vb" />
<Compile Include="Entites\Enviroment\AnimatedTile.vb" />
<Compile Include="Entites\Enviroment\AnimatedBlock.vb" />
<Compile Include="Entites\Enviroment\Water.vb" />
<Compile Include="Entites\Enviroment\Waterfall.vb" />
<Compile Include="Entites\Enviroment\Whirlpool.vb" />

View File

@ -122,7 +122,7 @@
Me.UpdateEntity()
End Sub
Public Shared Function GetNewEntity(ByVal EntityID As String, ByVal Position As Vector3, ByVal Textures() As Texture2D, ByVal TextureIndex() As Integer, ByVal Collision As Boolean, ByVal Rotation As Vector3, ByVal Scale As Vector3, ByVal Model As BaseModel, ByVal ActionValue As Integer, ByVal AdditionalValue As String, ByVal Visible As Boolean, ByVal Shader As Vector3, ByVal ID As Integer, ByVal MapOrigin As String, ByVal SeasonColorTexture As String, ByVal Offset As Vector3, Optional ByVal Params() As Object = Nothing, Optional ByVal Opacity As Single = 1.0F, Optional ByVal AnimationData As List(Of Integer) = Nothing) As Entity
Public Shared Function GetNewEntity(ByVal EntityID As String, ByVal Position As Vector3, ByVal Textures() As Texture2D, ByVal TextureIndex() As Integer, ByVal Collision As Boolean, ByVal Rotation As Vector3, ByVal Scale As Vector3, ByVal Model As BaseModel, ByVal ActionValue As Integer, ByVal AdditionalValue As String, ByVal Visible As Boolean, ByVal Shader As Vector3, ByVal ID As Integer, ByVal MapOrigin As String, ByVal SeasonColorTexture As String, ByVal Offset As Vector3, Optional ByVal Params() As Object = Nothing, Optional ByVal Opacity As Single = 1.0F, Optional ByVal AnimationData As List(Of List(Of Integer)) = Nothing) As Entity
Dim newEnt As New Entity()
Dim propertiesEnt As New Entity()
@ -146,10 +146,10 @@
propertiesEnt.Offset = Offset
Select Case EntityID.ToLower()
Case "animatedtile"
newEnt = New AnimatedTile()
Case "animatedblock"
newEnt = New AnimatedBlock()
SetProperties(newEnt, propertiesEnt)
CType(newEnt, AnimatedTile).Initialize(AnimationData)
CType(newEnt, AnimatedBlock).Initialize(AnimationData)
Case "wallblock"
newEnt = New WallBlock()
SetProperties(newEnt, propertiesEnt)

View File

@ -1,51 +1,80 @@
Public Class AnimatedTile
Public Class AnimatedBlock
Inherits Entity
Shared TileTexturesTemp As New Dictionary(Of String, Texture2D)
Dim TileTextureName As String = ""
Dim tileAnimation As Animation
Dim currentRectangle As New Rectangle(0, 0, 0, 0)
Dim rows, columns, animationSpeed, startRow, startColumn As Integer
Shared BlockTexturesTemp As New Dictionary(Of String, Texture2D)
Public Overloads Sub Initialize(ByVal AnimationData As List(Of Integer))
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()
rows = AnimationData(0)
columns = AnimationData(1)
animationSpeed = AnimationData(2)
startRow = AnimationData(3)
startColumn = AnimationData(4)
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))
tileAnimation = New Animation(TextureManager.GetTexture("Textures\Routes"), rows, columns, 16, 16, animationSpeed, startRow, startColumn)
AnimationNames.Add("")
currentRectangle.Add(New Rectangle(0, 0, 0, 0))
CreateTileTextureTemp()
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()
TileTexturesTemp.Clear()
BlockTexturesTemp.Clear()
End Sub
Private Sub CreateTileTextureTemp()
Private Sub CreateBlockTextureTemp()
'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.TileTextureName = AdditionalValue
If AnimatedTile.TileTexturesTemp.ContainsKey(AdditionalValue & "_0") = False Then
For i = 0 To Me.rows - 1
For j = 0 To Me.columns - 1
AnimatedTile.TileTexturesTemp.Add(AdditionalValue & "_" & (j + columns * i).ToString, TextureManager.GetTexture(texturePath, New Rectangle(r.X + r.Width * j, r.Y + r.Height * i, r.Width, r.Height)))
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
Else
Logger.Log(Logger.LogTypes.ErrorMessage, "AnimatedTile.vb: invalid AdditionalValue parameters")
End If
'End If
Next
End Sub
Public Overrides Sub ClickFunction()
@ -68,7 +97,7 @@
For Each Entity As Entity In Screen.Level.Entities
If Entity.boundingBox.Contains(Screen.Camera.GetForwardMovedPosition()) = ContainmentType.Contains Then
If Entity.EntityID = "Water" Then
If Entity.ActionValue = 0 AndAlso (Entity.EntityID = "AnimatedBlock" OrElse Entity.EntityID = "Water") Then
canSurf = True
Else
If Entity.Collision = True Then
@ -97,7 +126,7 @@
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 = "Water" Then
If Entity.EntityID = "AnimatedBlock" Then
If Core.Player.SurfPokemon > -1 Then
canSurf = True
End If
@ -132,27 +161,30 @@
End Function
Public Overrides Sub UpdateEntity()
If Not tileAnimation Is Nothing Then
tileAnimation.Update(0.01)
If currentRectangle <> tileAnimation.TextureRectangle Then
ChangeTexture()
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 = tileAnimation.TextureRectangle
End If
currentRectangle(n) = Animations(n).TextureRectangle
End If
Next
End If
MyBase.UpdateEntity()
End Sub
Private Sub ChangeTexture()
Private Sub ChangeTexture(ByVal n As Integer)
'If Core.GameOptions.GraphicStyle = 1 Then
If TileTexturesTemp.Count = 0 Then
If BlockTexturesTemp.Count = 0 Then
ClearAnimationResources()
CreateTileTextureTemp()
CreateBlockTextureTemp()
End If
Dim i = tileAnimation.CurrentRow
Dim j = tileAnimation.CurrentColumn
Me.Textures(0) = AnimatedTile.TileTexturesTemp(TileTextureName & "_" & (j + columns * i))
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

View File

@ -144,10 +144,10 @@ Public Class Animation
CurrentColumn += 1
If CurrentColumn >= Columns Then
CurrentRow += 1
CurrentColumn = StartColumn
CurrentColumn = 0
If CurrentRow >= Rows Then
CurrentRow = StartRow
CurrentRow = 0
End If
End If
End If

View File

@ -320,6 +320,20 @@
arr.Add(CInt(value))
Next
Dictionary.Add(TagName, arr)
Case "intarr2d"
Dim rows() As String = subTagValue.Split(CChar("]"))
Dim arr As New List(Of List(Of Integer))
For Each row As String In rows
If row.Length > 0 Then
row = row.Remove(0, 1)
Dim list As New List(Of Integer)
For Each value In row.Split(CChar(","))
list.Add(CInt(value))
Next
arr.Add(list)
End If
Next
Dictionary.Add(TagName, arr)
Case "rec"
Dim content() As String = subTagValue.Split(CChar(","))
Dictionary.Add(TagName, New Rectangle(CInt(content(0)), CInt(content(1)), CInt(content(2)), CInt(content(3))))
@ -806,9 +820,9 @@
AdditionalValue = CStr(GetTag(Tags, "AdditionalValue"))
End If
Dim AnimationData As List(Of Integer) = Nothing
Dim AnimationData As List(Of List(Of Integer)) = Nothing
If TagExists(Tags, "AnimationData") = True Then
AnimationData = CType(GetTag(Tags, "AnimationData"), List(Of Integer))
AnimationData = CType(GetTag(Tags, "AnimationData"), List(Of List(Of Integer)))
End If
Dim Rotation As Vector3 = Entity.GetRotationFromInteger(CInt(GetTag(Tags, "Rotation")))