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 ''' ''' Intended for rendering 3D models on top of sprites. ''' 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