198 lines
8.9 KiB
VB.net
198 lines
8.9 KiB
VB.net
Public Class StatisticsScreen
|
|
|
|
Inherits Screen
|
|
|
|
Dim Statistics As New Dictionary(Of String, Integer)
|
|
Dim texture As Texture2D
|
|
Dim TileOffset As Integer = 0
|
|
Dim Scroll As Integer = 0
|
|
|
|
Dim GJStatistics As New Dictionary(Of String, Decimal)
|
|
Dim GJGrabIndex As Integer = 0
|
|
Dim GJCanGrabNewScore As Boolean = False
|
|
Dim GJGrabDelay As Single = 0.0F
|
|
Dim StatisticsStartIndex As Integer = 0
|
|
|
|
Public Sub New(ByVal currentScreen As Screen)
|
|
Me.PreScreen = currentScreen
|
|
Me.Identification = Identifications.StatisticsScreen
|
|
|
|
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
|
|
|
|
Me.CanBePaused = True
|
|
Me.CanMuteAudio = True
|
|
|
|
If Core.Player.IsGamejoltSave = True Then
|
|
StatisticsStartIndex = 2
|
|
End If
|
|
|
|
Me.LoadStatistics()
|
|
End Sub
|
|
|
|
Private Sub LoadStatistics()
|
|
If Core.Player.IsGamejoltSave = True Then
|
|
Me.Statistics.Add("Level", GameJolt.Emblem.GetPlayerLevel(Core.GameJoltSave.Points))
|
|
Me.Statistics.Add("Points", Core.GameJoltSave.Points)
|
|
End If
|
|
|
|
Dim data As String = PlayerStatistics.GetData()
|
|
For Each line As String In data.SplitAtNewline()
|
|
If line.Contains(",") = True Then
|
|
Dim statName As String = line.Remove(line.IndexOf(","))
|
|
Dim statValue As Integer = CInt(line.Remove(0, line.IndexOf(",") + 1))
|
|
|
|
If Statistics.ContainsKey(statName) = True Then
|
|
Statistics.Remove(statName)
|
|
End If
|
|
Statistics.Add(statName, statValue)
|
|
End If
|
|
Next
|
|
|
|
If Me.Statistics.Count > Me.StatisticsStartIndex Then ' And Basic.Player.IsGamejoltSave = True And GameJolt.API.LoggedIn = True
|
|
Me.GJGrabIndex = Me.StatisticsStartIndex
|
|
Me.GJCanGrabNewScore = True
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub Draw()
|
|
Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216))
|
|
|
|
For i = 0 To Me.Statistics.Count - 1
|
|
Dim ItemID As String = ""
|
|
Dim ItemIDX As Integer = 0
|
|
Dim name As String = Me.Statistics.Keys(i)
|
|
If name.StartsWith("[") = True And name.Contains("]") = True Then
|
|
ItemID = name.Remove(name.IndexOf("]")).Remove(0, 1)
|
|
ItemIDX = 44
|
|
name = name.Remove(0, name.IndexOf("]") + 1)
|
|
End If
|
|
|
|
Dim value As Integer = Me.Statistics.Values(i)
|
|
|
|
If ItemID <> "" Then
|
|
Dim Item As Item = Item.GetItemByID(CInt(ItemID))
|
|
Core.SpriteBatch.Draw(Item.Texture, New Rectangle(CInt(140), CInt(152 + i * 50 + Scroll), 48, 48), Color.White)
|
|
End If
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, name, New Vector2(144 + ItemIDX, CInt(160 + i * 50 + Scroll)), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
|
|
If GJStatistics.ContainsKey(Me.Statistics.Keys(i)) = True Then
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, GJStatistics(Me.Statistics.Keys(i)).ToString(), New Vector2(CInt(Core.windowSize.Width - 418), CInt(180 + i * 50 + Scroll)), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, value.ToString(), New Vector2(CInt(Core.windowSize.Width - 420), CInt(150 + i * 50 + Scroll)), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
Else
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, value.ToString(), New Vector2(CInt(Core.windowSize.Width - 420), CInt(160 + i * 50 + Scroll)), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
End If
|
|
|
|
Canvas.DrawRectangle(New Rectangle(130, 200 + i * 50 + Scroll, Core.windowSize.Width - 360, 1), Color.White)
|
|
Next
|
|
|
|
Canvas.DrawRectangle(New Rectangle(0, 0, Core.windowSize.Width, 150), New Color(84, 198, 216))
|
|
Canvas.DrawRectangle(New Rectangle(0, Core.windowSize.Height - 100, Core.windowSize.Width, 100), New Color(84, 198, 216))
|
|
|
|
Canvas.DrawGradient(New Rectangle(50, 150, 50, 2), New Color(255, 255, 255, 0), Color.White, True, -1)
|
|
Canvas.DrawRectangle(New Rectangle(100, 150, Core.windowSize.Width - 300, 2), Color.White)
|
|
Canvas.DrawGradient(New Rectangle(Core.windowSize.Width - 200, 150, 50, 2), Color.White, New Color(255, 255, 255, 0), True, -1)
|
|
|
|
Canvas.DrawGradient(New Rectangle(Core.windowSize.Width - 450, 100, 2, 50), New Color(255, 255, 255, 0), Color.White, False, -1)
|
|
Canvas.DrawRectangle(New Rectangle(Core.windowSize.Width - 450, 150, 2, Core.windowSize.Height - 250), Color.White)
|
|
Canvas.DrawGradient(New Rectangle(Core.windowSize.Width - 450, Core.windowSize.Height - 100, 2, 50), Color.White, New Color(255, 255, 255, 0), False, -1)
|
|
|
|
Canvas.DrawGradient(New Rectangle(50, Core.windowSize.Height - 100, 50, 2), New Color(255, 255, 255, 0), Color.White, True, -1)
|
|
Canvas.DrawRectangle(New Rectangle(100, Core.windowSize.Height - 100, Core.windowSize.Width - 300, 2), Color.White)
|
|
Canvas.DrawGradient(New Rectangle(Core.windowSize.Width - 200, Core.windowSize.Height - 100, 50, 2), Color.White, New Color(255, 255, 255, 0), True, -1)
|
|
|
|
For y = -64 To Core.windowSize.Height Step 64
|
|
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White)
|
|
Next
|
|
|
|
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1)
|
|
Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Name", New Vector2(150, 110), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Value", New Vector2(Core.windowSize.Width - 420, 110), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Statistics", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F)
|
|
End Sub
|
|
|
|
Public Overrides Sub Update()
|
|
If Controls.Up(False, True, False, True, True, True) = True Then
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Scroll += 14
|
|
Else
|
|
Me.Scroll += 7
|
|
End If
|
|
End If
|
|
If Controls.Down(False, True, False, True, True, True) = True Then
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Scroll -= 14
|
|
Else
|
|
Me.Scroll -= 7
|
|
End If
|
|
End If
|
|
|
|
If Controls.Up(True, False, True, False, False, False) = True Then
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Scroll += 70
|
|
Else
|
|
Me.Scroll += 35
|
|
End If
|
|
End If
|
|
If Controls.Down(True, False, True, False, False, False) = True Then
|
|
If Controls.ShiftDown() = True Then
|
|
Me.Scroll -= 70
|
|
Else
|
|
Me.Scroll -= 35
|
|
End If
|
|
End If
|
|
|
|
If -Me.Statistics.Count * 50 + Core.windowSize.Height - 250 >= 0 Then
|
|
Me.Scroll = 0
|
|
Else
|
|
Me.Scroll = Me.Scroll.Clamp(-Me.Statistics.Count * 50 + Core.windowSize.Height - 250, 0)
|
|
End If
|
|
|
|
If Me.GJCanGrabNewScore = True Then
|
|
If GJGrabDelay <= 0.0F Then
|
|
Me.GJCanGrabNewScore = False
|
|
GameJolt.GameJoltStatistics.GetStatisticValue(Me.Statistics.Keys(Me.GJGrabIndex), AddressOf Me.GetGJStatistic)
|
|
Else
|
|
GJGrabDelay -= 0.1F
|
|
End If
|
|
End If
|
|
|
|
If Controls.Dismiss() = True Then
|
|
SoundManager.PlaySound("select")
|
|
Core.SetScreen(New TransitionScreen(Me, Me.PreScreen, Color.White, False))
|
|
End If
|
|
|
|
TileOffset += 1
|
|
If TileOffset >= 64 Then
|
|
TileOffset = 0
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub GetGJStatistic(ByVal result As String)
|
|
Dim statName As String = Me.Statistics.Keys(Me.GJGrabIndex)
|
|
Dim statValue As String = "0"
|
|
|
|
Dim list As List(Of GameJolt.API.JoltValue) = GameJolt.API.HandleData(result)
|
|
If CBool(list(0).Value) = True Then
|
|
statValue = list(1).Value
|
|
If Me.GJStatistics.ContainsKey(statName) = True Then
|
|
Me.GJStatistics(statName) = CDec(statValue)
|
|
Else
|
|
Me.GJStatistics.Add(statName, CDec(statValue))
|
|
End If
|
|
End If
|
|
|
|
Me.GJGrabIndex += 1
|
|
|
|
If Me.GJGrabIndex > Me.Statistics.Count - 1 Then
|
|
Me.GJGrabIndex = Me.StatisticsStartIndex
|
|
Me.GJGrabDelay = 25.0F + CSng(Me.Statistics.Count)
|
|
End If
|
|
|
|
Me.GJCanGrabNewScore = True
|
|
End Sub
|
|
|
|
End Class |