P3D-Legacy/P3D/Core/Core.vb

302 lines
9.9 KiB
VB.net

Public Module Core
Public GameInstance As GameController
Public ReadOnly Property GraphicsManager As GraphicsDeviceManager
Get
Return GameInstance.Graphics
End Get
End Property
Public ReadOnly Property GraphicsDevice As GraphicsDevice
Get
Return GameInstance.GraphicsDevice
End Get
End Property
Public ReadOnly Property Content As ContentManager
Get
Return GameInstance.Content
End Get
End Property
Public ReadOnly Property Window As GameWindow
Get
Return GameInstance.Window
End Get
End Property
Public SpriteBatch As CoreSpriteBatch
Public FontRenderer As SpriteBatch
Public GameTime As GameTime
Public Random As System.Random = New System.Random()
Public KeyboardInput As KeyboardInput
Public windowSize As Rectangle = New Rectangle(0, 0, 1200, 680)
Public GameMessage As GameMessage
Public ServersManager As Servers.ServersManager
Public CurrentScreen As Screen
Public Player As Player
Public GameJoltSave As GameJolt.GamejoltSave
Public GameOptions As GameOptions
Public sampler As SamplerState
Public BackgroundColor As Color = New Color(173, 216, 255)
Public OffsetMaps As New Dictionary(Of String, List(Of List(Of Entity)))
Public Sub Initialize(ByVal gameReference As GameController)
GameInstance = gameReference
If CommandLineArgHandler.ForceGraphics = True Then
Window.Title = GameController.GAMENAME & " " & GameController.GAMEDEVELOPMENTSTAGE & " " & GameController.GAMEVERSION & " (FORCED GRAPHICS)"
Else
Window.Title = GameController.GAMENAME & " " & GameController.GAMEDEVELOPMENTSTAGE & " " & GameController.GAMEVERSION
End If
GameOptions = New GameOptions()
GameOptions.LoadOptions()
GraphicsManager.PreferredBackBufferWidth = CInt(GameOptions.WindowSize.X)
GraphicsManager.PreferredBackBufferHeight = CInt(GameOptions.WindowSize.Y)
GraphicsDevice.PresentationParameters.BackBufferFormat = SurfaceFormat.Rgba1010102
GraphicsDevice.PresentationParameters.DepthStencilFormat = DepthFormat.Depth24Stencil8
windowSize = New Rectangle(0, 0, CInt(GameOptions.WindowSize.X), CInt(GameOptions.WindowSize.Y))
GraphicsManager.PreferMultiSampling = True
GraphicsManager.GraphicsProfile = GraphicsProfile.HiDef
GraphicsManager.ApplyChanges()
SpriteBatch = New CoreSpriteBatch(GraphicsDevice)
FontRenderer = New CoreSpriteBatch(GraphicsDevice)
Canvas.SetupCanvas()
Player = New Player()
GameJoltSave = New GameJolt.GamejoltSave()
GameMessage = New GameMessage(Nothing, New Size(0, 0), New Vector2(0, 0))
sampler = New SamplerState()
sampler.Filter = TextureFilter.Point
sampler.AddressU = TextureAddressMode.Clamp
sampler.AddressV = TextureAddressMode.Clamp
ServersManager = New Servers.ServersManager()
GraphicsDevice.SamplerStates(0) = sampler
KeyboardInput = New KeyboardInput()
If CommandLineArgHandler.NoSplash = True Then
Core.LoadContent()
SetScreen(New PressStartScreen())
Else
SetScreen(New SplashScreen(GameInstance))
End If
End Sub
Public Sub LoadContent()
GameModeManager.LoadGameModes()
Logger.Debug("Loaded game modes.")
FontManager.LoadFonts()
Screen.TextBox.TextFont = FontManager.GetFontContainer("textfont")
Logger.Debug("Loaded fonts.")
KeyBindings.LoadKeys()
TextureManager.InitializeTextures()
MusicManager.Setup()
Logger.Debug("Loaded content.")
Logger.Debug("Validated files. Result: " & Security.FileValidation.IsValid(True).ToString())
If Security.FileValidation.IsValid(False) = False Then
Logger.Log(Logger.LogTypes.Warning, "Core.vb: File Validation failed! Download a fresh copy of the game to fix this issue.")
End If
GameMessage = New GameMessage(P3D.TextureManager.DefaultTexture, New Size(10, 40), New Vector2(0, 0))
GameMessage.Dock = P3D.GameMessage.DockStyles.Top
GameMessage.BackgroundColor = Color.Black
GameMessage.TextPosition = New Vector2(10, 10)
Logger.Debug("Gamemessage initialized.")
GameOptions.LoadOptions()
If System.IO.Directory.Exists(GameController.GamePath & "\Temp") = True Then
Try
System.IO.Directory.Delete(GameController.GamePath & "\Temp", True)
Logger.Log(Logger.LogTypes.Message, "Core.vb: Deleted Temp directory.")
Catch ex As Exception
Logger.Log(Logger.LogTypes.Warning, "Core.vb: Failed to delete the Temp directory.")
End Try
End If
GameJolt.StaffProfile.SetupStaff()
ScriptVersion2.ScriptLibrary.InitializeLibrary()
End Sub
Public Sub Update(ByVal gameTime As GameTime)
Core.GameTime = gameTime
KeyBoardHandler.Update()
ControllerHandler.Update()
ConnectScreen.UpdateConnectSet()
If Core.GameInstance.IsActive = False Then
If Core.CurrentScreen.CanBePaused = True Then
Core.SetScreen(New PauseScreen(Core.CurrentScreen))
End If
Else
If KeyBoardHandler.KeyPressed(KeyBindings.EscapeKey) = True Or ControllerHandler.ButtonDown(Buttons.Start) = True Then
CurrentScreen.EscapePressed()
End If
End If
CurrentScreen.Update()
If CurrentScreen.CanChat = True Then
If KeyBoardHandler.KeyPressed(KeyBindings.ChatKey) = True Or ControllerHandler.ButtonPressed(Buttons.RightShoulder) = True Then
If JoinServerScreen.Online = True Or Player.SandBoxMode = True Or GameController.IS_DEBUG_ACTIVE = True Then
SetScreen(New ChatScreen(CurrentScreen))
End If
End If
End If
MainGameFunctions.FunctionKeys()
MusicManager.Update()
GameMessage.Update()
Controls.MakeMouseVisible()
MouseHandler.Update()
LoadingDots.Update()
ForcedCrash.Update()
ServersManager.Update()
End Sub
Public Sub Draw()
GraphicsDevice.Clear(BackgroundColor)
If SpriteBatch.Running = True Then
SpriteBatch.EndBatch()
Else
SpriteBatch.BeginBatch()
FontRenderer.Begin()
GraphicsDevice.DepthStencilState = DepthStencilState.Default
GraphicsDevice.SamplerStates(0) = sampler
CurrentScreen.Draw()
If Not Core.Player Is Nothing Then
If Core.Player.IsGameJoltSave = True Then
GameJolt.Emblem.DrawNewEmblems()
End If
Core.Player.DrawLevelUp()
End If
If JoinServerScreen.Online = True Or Player.SandBoxMode = True Or GameController.IS_DEBUG_ACTIVE = True Then
If CurrentScreen.Identification <> Screen.Identifications.ChatScreen Then
ChatScreen.DrawNewMessages()
End If
End If
If GameOptions.ShowDebug > 0 Then
DebugDisplay.Draw()
End If
GameMessage.Draw()
OnlineStatus.Draw()
Logger.DrawLog()
SpriteBatch.EndBatch()
FontRenderer.End()
Core.Render()
End If
End Sub
''' <summary>
''' Intended for rendering 3D models on top of sprites.
''' </summary>
Private Sub Render()
CurrentScreen.Render()
End Sub
Public Sub SetScreen(ByVal newScreen As Screen)
If Not CurrentScreen Is Nothing Then
CurrentScreen.ChangeFrom()
End If
CurrentScreen = newScreen
If ControllerHandler.IsConnected() = True Then
If GameInstance.IsMouseVisible = True And newScreen.MouseVisible = True Then
GameInstance.IsMouseVisible = True
Else
GameInstance.IsMouseVisible = False
End If
Else
GameInstance.IsMouseVisible = CurrentScreen.MouseVisible
End If
CurrentScreen.ChangeTo()
End Sub
Public Function GetMiddlePosition(ByVal OffsetFull As Size) As Vector2
Dim v As New Vector2(CSng(Core.windowSize.Width / 2) - CSng(OffsetFull.Width / 2), CSng(Core.windowSize.Height / 2) - CSng(OffsetFull.Height / 2))
Return v
End Function
Public Sub StartThreadedSub(ByVal s As System.Threading.ParameterizedThreadStart)
Dim t As New Threading.Thread(s)
t.IsBackground = True
t.Start()
End Sub
Public ReadOnly Property ScreenSize() As Rectangle
Get
Dim x As Double = SpriteBatch.InterfaceScale()
If x = 1D Then Return Core.windowSize
Return New Rectangle(CInt(Core.windowSize.X / x), CInt(Core.windowSize.Y / x), CInt(Core.windowSize.Width / x), CInt(Core.windowSize.Height / x))
End Get
End Property
Public ReadOnly Property ScaleScreenRec(ByVal rec As Rectangle) As Rectangle
Get
Dim x As Double = SpriteBatch.InterfaceScale()
If x = 1D Then Return rec
Return New Rectangle(CInt(rec.X * x), CInt(rec.Y * x), CInt(rec.Width * x), CInt(rec.Height * x))
End Get
End Property
Public ReadOnly Property ScaleScreenVec(ByVal vec As Vector2) As Vector2
Get
Dim x As Double = SpriteBatch.InterfaceScale()
If x = 1D Then Return vec
Return New Vector2(CSng(vec.X * x), CSng(vec.Y * x))
End Get
End Property
Public Sub SetWindowSize(ByVal Size As Vector2)
GraphicsManager.PreferredBackBufferWidth = CInt(Size.X)
GraphicsManager.PreferredBackBufferHeight = CInt(Size.Y)
GraphicsManager.ApplyChanges()
windowSize = New Rectangle(0, 0, CInt(Size.X), CInt(Size.Y))
End Sub
End Module