P3D-Legacy/P3D/Screens/Credits/CreditsScreen.vb

294 lines
14 KiB
VB.net

Public Class CreditsScreen
Inherits Screen
Private Const COPYRIGHTYEAR As String = "2017"
Dim CreditsPages As New List(Of CreditsPage)
Dim CurrentPageIndex As Integer = 0
Dim CameraLevels As New List(Of CameraLevel)
Dim CurrentCameraLevelIndex As Integer = 0
Dim ExecutedCameraLevel As Boolean = False
Dim TheEnd As Boolean = False
Public SavedOverworld As OverworldStorage
Public Sub New(ByVal OverworldScreen As Screen)
SavedOverworld = New OverworldStorage()
SavedOverworld.SetToCurrentEnvironment()
End Sub
Public Sub InitializeScreen(ByVal ending As String)
Me.Identification = Identifications.CreditsScreen
Me.CanBePaused = False
Me.MouseVisible = False
Me.CanChat = False
Me.CanDrawDebug = True
Me.CanMuteMusic = True
Me.CanTakeScreenshot = True
Screen.TextBox.Showing = False
Screen.PokemonImageView.Showing = False
Screen.ChooseBox.Showing = False
Effect = New BasicEffect(Core.GraphicsDevice)
Effect.FogEnabled = True
SkyDome = New SkyDome()
Camera = New CreditsCamera()
Level = New Level()
InitializeCreditsPages(ending)
InitializeCameraLevels(ending)
ExecuteCameraLevel()
MusicManager.PlayMusic("credits", True)
MediaPlayer.IsRepeating = False
End Sub
' The text that shows during the credits:
Private Sub InitializeCreditsPages(ByVal ending As String)
CreditsPages.Add(New CreditsPage("Pokémon3D Staff", Color.White, Color.Black))
CreditsPages.Add(New CreditsPage("Pokémon", Color.White, Color.Black, {"made by", "Nintendo", "Game Freak", "The Pokémon Company"}.ToList()))
If GameModeManager.ActiveGameMode.IsDefaultGamemode = True Then
CreditsPages.Add(New CreditsPage("Pokémon 3D", Color.White, Color.Black, {"Trademark (TM) 2012 - " & COPYRIGHTYEAR, "made by Kolben Games"}.ToList()))
Else
CreditsPages.Add(New CreditsPage("Pokémon 3D", Color.White, Color.Black, {"Trademark (TM) 2012 - " & COPYRIGHTYEAR, "made by Kolben Games", "", "GameMode made by", GameModeManager.ActiveGameMode.Author}.ToList()))
End If
CreditsPages.Add(New CreditsPage("Team Kolben", Color.White, Color.Black, {"Nils Drescher", "Andrew Leach", "Marc Boisvert-Dupras", "Grant Garrett", "Jason Houston", "Daniel Billing", "Benjamin Smith", "Hunter Graves"}.ToList()))
CreditsPages.Add(New CreditsPage("Director", Color.White, Color.Black, {"Nils Drescher"}.ToList()))
CreditsPages.Add(New CreditsPage("Open Source Development Team", Color.White, Color.Black, {"Benjamin Smith", """Aragas""", """oXFantaXo""", "Jorge Luis Espinoza", "Conner Joseph Brewster", """OmegaGhost"""}.ToList()))
CreditsPages.Add(New CreditsPage("Programming", Color.White, Color.Black, {"Nils Drescher", "Jason Houston", "William Lang", "Benjamin Smith", "Yong Jian Ming", "Jorge Luis Espinoza", """Aragas"""}.ToList()))
CreditsPages.Add(New CreditsPage("Graphic Design", Color.White, Color.Black, {"Nils Drescher", "Benjamin Smith", """Godeken""", "Caleb Coleman", "Robert Nobbmann", "Manuel Lampe", "Miguel Nunez", "Grant Garrett", """Anvil555""", """Omega Ghost"""}.ToList()))
CreditsPages.Add(New CreditsPage("Map Design", Color.White, Color.Black, {"Nils Drescher", "Benjamin Smith", "Hunter Graves", "Manuel Lampe", "Robert Nobbmann", "Maximilian Schröder", "Jan Mika Eine", "Jason Houston", """oXFantaXo"""}.ToList()))
CreditsPages.Add(New CreditsPage("Actionscript", Color.White, Color.Black, {"Nils Drescher", "Benjamin Smith", "Hunter Graves", "Andrew Leach", "Jason Houston", "Yong Jian Ming", """Aragas""" }.ToList()))
CreditsPages.Add(New CreditsPage("Script System Development", Color.White, Color.Black, {"Nils Drescher", "Benjamin Smith", "Hunter Graves", "Yong Jian Ming", """Aragas"""}.ToList()))
CreditsPages.Add(New CreditsPage("KolbenWindowWidget Development & LUA Implementation", Color.White, Color.Black, {"Jason Houston"}.ToList()))
CreditsPages.Add(New CreditsPage("Launcher Programming", Color.White, Color.Black, {"Nils Drescher", "Daniel Billing", """ThuxCommix""", """Aragas"""}.ToList()))
CreditsPages.Add(New CreditsPage("Pokéditor Programming", Color.White, Color.Black, {"Nils Drescher", "Jason Houston", "Hunter Graves"}.ToList()))
CreditsPages.Add(New CreditsPage("Website Host/Server Maintenance", Color.White, Color.Black, {"Daniel Billing", "Daniel Laube"}.ToList()))
CreditsPages.Add(New CreditsPage("GameJolt Service/API Programming", Color.White, Color.Black, {"David DeCarmine", "Nils Drescher"}.ToList()))
CreditsPages.Add(New CreditsPage("Debug Testing", Color.White, Color.Black, {"Jan Mika Eine", "Tim Drescher", "Daniel Steinborn", "Andrew Leach", "Marc Boisvert-Dupras", "Matt Chambers", "Hunter Graves", "Benjamin Smith", "William Hunn", "Torben Carrington", """oXFantaXo""", "Conner Joseph Brewster"}.ToList()))
CreditsPages.Add(New CreditsPage("Special Thanks", Color.White, Color.Black, {"""MunchingOrange""", """TheFlamingSpade""", """SlyFoxHound""", """ArsenioDev""", """TrUShade""", """Isaaking6"""}.ToList()))
CreditsPages.Add(New CreditsPage("Special Thanks", Color.White, Color.Black, {"Davey Van Raaij", "Diego López", "The GameJolt Team", "The AppSharp Team", "The Smogon University Team"}.ToList()))
CreditsPages.Add(New CreditsPage("", Color.White, Color.Black, {"And probably a lot more.", "Especially all the awesome people from", "the pokemon3d.net community.", "Thanks for helping and playing this great game."}.ToList()))
CreditsPages.Add(New CreditsPage("", Color.White, Color.Black))
CreditsPages.Add(New CreditsPage("", Color.White, Color.Black))
CreditsPages.Add(New CreditsPage("THE END", Color.White, Color.Black, {"Thank you for playing!"}.ToList()))
End Sub
' Credit camera starting positions:
Private Sub InitializeCameraLevels(ByVal ending As String)
Select Case ending.ToLower()
Case "johto"
CameraLevels.Add(New CameraLevel("route29.dat", New Vector3(50, 2, 10), New Vector3(0, 2, 10), 0.04F, MathHelper.Pi * 1.5F, -0.3F))
CameraLevels.Add(New CameraLevel("routes\route42.dat", New Vector3(50, 2, 10), New Vector3(0, 2, 10), 0.04F, MathHelper.Pi * 1.5F, -0.3F))
CameraLevels.Add(New CameraLevel("route38.dat", New Vector3(34, 2, 10), New Vector3(0, 2, 10), 0.04F, MathHelper.Pi * 1.5F, -0.3F))
CameraLevels.Add(New CameraLevel("routes\route45.dat", New Vector3(10, 2, 3), New Vector3(10, 2, 30), 0.04F, 0.0F, -0.3F))
CameraLevels.Add(New CameraLevel("Ecruteak.dat", New Vector3(22, 0, 22), New Vector3(36, 14, 8), 0.04F, MathHelper.Pi * 1.7F, 0.3F))
CameraLevels.Add(New CameraLevel("routes\route34.dat", New Vector3(10, 2, 3), New Vector3(10, 2, 40), 0.04F, 0.0F, -0.3F))
CameraLevels.Add(New CameraLevel("route31.dat", New Vector3(29, 2, 10), New Vector3(0, 2, 10), 0.04F, MathHelper.Pi * 1.5F, -0.3F))
CameraLevels.Add(New CameraLevel("routes\route43.dat", New Vector3(10, 2, 3), New Vector3(10, 2, 30), 0.04F, 0.0F, -0.3F))
CameraLevels.Add(New CameraLevel("barktown.dat", New Vector3(20, 1.5, 14), New Vector3(20, 1.5, 28), 0.04F, 0.0F, -0.1F))
Case "kanto"
End Select
End Sub
Private Sub ExecuteCameraLevel()
If Me.ExecutedCameraLevel = False Then
Me.ExecutedCameraLevel = True
CameraLevels(CurrentCameraLevelIndex).Apply(CType(Camera, CreditsCamera))
End If
End Sub
Public Overrides Sub Draw()
Level.Draw()
If TheEnd = True Then
CreditsPages(CreditsPages.Count - 1).Draw()
Else
CreditsPages(CurrentPageIndex).Draw()
End If
End Sub
Public Overrides Sub Update()
Camera.Update()
Level.Update()
CreditsPages(CurrentPageIndex).Update()
If CreditsPages(CurrentPageIndex).IsReady = True And TheEnd = False Then
CurrentPageIndex += 1
If CurrentPageIndex = CreditsPages.Count - 1 Then
TheEnd = True
End If
End If
If TheEnd = True Then
If CreditsPages(CurrentPageIndex).OnScreenTime >= 500 Then
CreditsPages(CurrentPageIndex).AlwaysVisible = True
End If
End If
If TheEnd = True Then
If Controls.Accept(True, True) = True Then
Core.SetScreen(New TransitionScreen(Me, SavedOverworld.OverworldScreen, Color.Black, False, AddressOf ChangeSavedScreen))
End If
End If
If CType(Camera, CreditsCamera).IsReady = True And TheEnd = False Then
Me.CurrentCameraLevelIndex += 1
If Me.CurrentCameraLevelIndex > Me.CameraLevels.Count - 1 Then
Me.CurrentCameraLevelIndex = 0
End If
Me.ExecutedCameraLevel = False
End If
ExecuteCameraLevel()
End Sub
Public Sub ChangeSavedScreen()
Screen.Level = SavedOverworld.Level
Screen.Camera = SavedOverworld.Camera
Screen.Effect = SavedOverworld.Effect
Screen.SkyDome = SavedOverworld.SkyDome
Screen.Level.World.Initialize(Screen.Level.EnvironmentType, Screen.Level.WeatherType)
End Sub
Class CreditsPage
Private _title As String = "Test"
Private _rows As New List(Of String)
Private _color As Color = Color.White
Private _color2 As Color = Color.Black
Private _image As Texture2D = Nothing
Private _onScreenTime As Integer = 0
Private _alwaysVisible As Boolean = False
Public Sub New(ByVal Title As String, ByVal Color1 As Color, ByVal Color2 As Color)
Me.New(Title, Color1, Color2, New List(Of String))
End Sub
Public Sub New(ByVal Title As String, ByVal Color1 As Color, ByVal Color2 As Color, ByVal Rows As List(Of String))
Me.New(Title, Color1, Color2, Rows, Nothing)
End Sub
Public Sub New(ByVal Title As String, ByVal Color1 As Color, ByVal Color2 As Color, ByVal Rows As List(Of String), ByVal Image As Texture2D)
Me._title = Title
Me._color = Color1
Me._color2 = Color2
Me._rows = Rows
Me._image = Image
End Sub
Public Sub Draw()
Dim alpha As Byte = GetAlphaValue()
Dim posTitle As Vector2 = New Vector2(CInt(Core.windowSize.Width / 2 - FontManager.InGameFont.MeasureString(_title).X / 2), CInt(100))
Core.SpriteBatch.DrawString(FontManager.InGameFont, Me._title, New Vector2(posTitle.X + 2, posTitle.Y + 2), AColor(Me._color2))
Core.SpriteBatch.DrawString(FontManager.InGameFont, Me._title, posTitle, AColor(Me._color))
For i = 0 To _rows.Count - 1
Dim line As String = _rows(i)
Dim posLine As Vector2 = New Vector2(CInt(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(line).X / 2), CInt(200) + i * 35)
Core.SpriteBatch.DrawString(FontManager.MainFont, line, New Vector2(posLine.X + 2, posLine.Y + 2), AColor(Me._color2))
Core.SpriteBatch.DrawString(FontManager.MainFont, line, posLine, AColor(Me._color))
Next
End Sub
Public Sub Update()
Me._onScreenTime += 4
End Sub
Private Function GetAlphaValue() As Byte
If Me._alwaysVisible = True Then
Return 255
End If
If Me._onScreenTime < 255 Then
Return CByte(Me._onScreenTime)
End If
If Me._onScreenTime > 1255 Then
Return 0
End If
If Me._onScreenTime > 1000 Then
Return CByte(255 - (Me._onScreenTime - 1000))
End If
Return 255
End Function
Private Function AColor(ByVal c As Color) As Color
Return New Color(c.R, c.G, c.B, GetAlphaValue())
End Function
Public ReadOnly Property IsReady() As Boolean
Get
If Me._onScreenTime > 1255 Then
Return True
End If
Return False
End Get
End Property
Public ReadOnly Property OnScreenTime() As Integer
Get
Return Me._onScreenTime
End Get
End Property
Public Property AlwaysVisible As Boolean
Get
Return Me._alwaysVisible
End Get
Set(value As Boolean)
Me._alwaysVisible = value
End Set
End Property
End Class
Class CameraLevel
Private _levelfile As String = "testlevel.dat"
Private _target As Vector3 = New Vector3(0)
Private _startPosition As Vector3 = New Vector3(0)
Private _speed As Single = 0.04F
Private _yaw As Single = 0.0F
Private _pitch As Single = 0.0F
Public Sub New(ByVal LevelFile As String, ByVal Target As Vector3, ByVal StartPosition As Vector3, ByVal Speed As Single, ByVal Yaw As Single, ByVal Pitch As Single)
Me._levelfile = LevelFile
Me._target = Target
Me._startPosition = StartPosition
Me._speed = Speed
Me._yaw = Yaw
Me._pitch = Pitch
End Sub
Public Sub Apply(ByRef CreditsCamera As CreditsCamera)
CreditsCamera.Speed = Me._speed
CreditsCamera.Position = Me._startPosition
CreditsCamera.Target = Me._target
CreditsCamera.Yaw = Me._yaw
CreditsCamera.Pitch = Me._pitch
Screen.Level.Load(Me._levelfile)
End Sub
End Class
Public Overrides Sub ChangeFrom()
MediaPlayer.IsRepeating = True
End Sub
Public Overrides Sub ChangeTo()
MediaPlayer.IsRepeating = False
End Sub
End Class