private void AsyncLoad() { try { UpdateLoadMsg("Loading Paths"); Data.Paths.Init(); UpdateLoadMsg("Loading Textures"); TextureManager.Init(); UpdateLoadMsg("Loading Game Data"); Data.GameData.Init(); UpdateLoadMsg("Loading Audio"); AudioManager.Init(); Logs.Logger.LogInfo(AudioManager.GetALInfo()); UpdateLoadMsg("Starting..."); } catch (Exception ex) { Logs.Logger.LogError(ex); } GameLoaded = GameLoadState.PostLoading; }
/// <summary>Load resources here.</summary> protected override void OnLoad(EventArgs e) { base.OnLoad(e); TextureManager.InitBase(); // Bind Input (refactor) input = new Logic.Gameplay.Input(); KeyDown += input.HandleKeyDown; MouseWheel += input.HandleMouseWheel; MouseDown += input.HandleMouseDown; MouseMove += input.HandleMouseMove; KeyUp += input.HandleKeyUp; MouseUp += input.HandleMouseUp; input.AreHandleBinded = true; GameLoaded = GameLoadState.Loading; Thread thread = new Thread(() => { AsyncLoad(); }); thread.IsBackground = true; thread.Start(); }
/// <summary>Load resources here.</summary> protected override void OnLoad(EventArgs e) { base.OnLoad(e); Graphics.TextureManager.InitBase(); GameLoaded = GameLoadState.Loading; Thread thread = new Thread(() => { AsyncLoad(); }); thread.IsBackground = true; thread.Start(); }
/// <summary> /// Called when it is time to render the next frame. Add your rendering code here. /// </summary> /// <param name="e">Contains timing information.</param> protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); if (GameLoaded < GameLoadState.Loaded) { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point TextureManager.TextureProgram.SetModelView(Matrix4.Identity); TextureManager.TextureProgram.UpdateModelView(); lock (lockObj) TextureManager.SingleFont.RenderText(TextureManager.SCREEN_WIDTH / 2, TextureManager.SCREEN_HEIGHT / 2, loadMessage, null, AtlasSheet.SpriteVOrigin.Center, AtlasSheet.SpriteHOrigin.Center, 0); SwapBuffers(); } else if (GameLoaded == GameLoadState.Loaded) { try { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point TextureManager.TextureProgram.SetModelView(Matrix4.Identity); TextureManager.TextureProgram.UpdateModelView(); Logic.Display.Screen.Draw((int)Math.Round(RenderFrequency)); //Update screen SwapBuffers(); errorCount--; } catch (Exception ex) { Console.WriteLine(ex.Message); Logs.Logger.LogError(ex); errorCount += 2; } if (errorCount > 10) { GameLoaded = GameLoadState.Errored; } } else if (GameLoaded == GameLoadState.Errored) { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point TextureManager.TextureProgram.SetModelView(Matrix4.Identity); TextureManager.TextureProgram.UpdateModelView(); lock (lockObj) TextureManager.SingleFont.RenderText(TextureManager.SCREEN_WIDTH / 2, TextureManager.SCREEN_HEIGHT / 2, "The program has encountered too many errors and needs to close.\nView the Error Logs for more details.", null, AtlasSheet.SpriteVOrigin.Center, AtlasSheet.SpriteHOrigin.Center, 12); SwapBuffers(); } }
/// <summary> /// Called when it is time to setup the next frame. Add you game logic here. /// </summary> /// <param name="e">Contains timing information for framerate independent logic.</param> protected override void OnUpdateFrame(FrameEventArgs e) { base.OnUpdateFrame(e); if (Editors.MainPanel.GameNeedWait) { Editors.MainPanel.GameWaiting = true; while (Editors.MainPanel.GameNeedWait) { Thread.Sleep(100); } Editors.MainPanel.GameWaiting = false; } if (GameLoaded == GameLoadState.Closing) { Close(); } else if (GameLoaded == GameLoadState.PostLoading) { GameLoaded = GameLoadState.Finalizing; } else if (GameLoaded == GameLoadState.Finalizing) { TextureManager.PostInit(); Logic.Gameplay.MenuManager.Init(); Logic.Gameplay.Processor.Init(); Logic.Display.Screen.Init(); Logic.Gameplay.Processor.Restart(); Logic.Display.Screen.ProcessTaskQueue(true); GameLoaded = GameLoadState.Loaded; while (!Editors.MainPanel.EditorLoaded) { Thread.Sleep(100); } } else if (GameLoaded == GameLoadState.Loaded) { try { TextureManager.Update(); RenderTime elapsedTime = new RenderTime((int)(e.Time * TextureManager.FPS_CAP * 1000)); //set this frame's input Logic.Gameplay.Input input = new Logic.Gameplay.Input(); Logic.Gameplay.Processor.SetFrameInput(input, elapsedTime, (int)Math.Round(UpdateFrequency)); Logic.Display.Screen.Process(elapsedTime); errorCount--; } catch (Exception ex) { Logs.Logger.LogError(ex); errorCount += 2; } } }
void AsyncLoad() { try { UpdateLoadMsg("Loading Paths"); Data.Paths.Init(); UpdateLoadMsg("Loading Textures"); Graphics.TextureManager.Init(); UpdateLoadMsg("Loading Game Data"); Data.GameData.Init(); UpdateLoadMsg("Loading Audio"); AudioManager.Init(); Logs.Logger.LogInfo(AudioManager.GetALInfo()); UpdateLoadMsg("Starting..."); } catch (Exception ex) { Logs.Logger.LogError(ex); } GameLoaded = GameLoadState.PostLoading; }
/// <summary> /// Called when it is time to setup the next frame. Add you game logic here. /// </summary> /// <param name="e">Contains timing information for framerate independent logic.</param> protected override void OnUpdateFrame(FrameEventArgs e) { base.OnUpdateFrame(e); if (Editors.MainPanel.GameNeedWait) { Editors.MainPanel.GameWaiting = true; while (Editors.MainPanel.GameNeedWait) Thread.Sleep(100); Editors.MainPanel.GameWaiting = false; } if (GameLoaded == GameLoadState.Closing) Close(); else if (GameLoaded == GameLoadState.PostLoading) GameLoaded = GameLoadState.Finalizing; else if (GameLoaded == GameLoadState.Finalizing) { Graphics.TextureManager.PostInit(); Logic.Gameplay.MenuManager.Init(); Logic.Gameplay.Processor.Init(); Logic.Display.Screen.Init(); Logic.Gameplay.Processor.Restart(); Logic.Display.Screen.ProcessTaskQueue(true); GameLoaded = GameLoadState.Loaded; while (!Editors.MainPanel.EditorLoaded) { Thread.Sleep(100); } } else if (GameLoaded == GameLoadState.Loaded) { try { Graphics.TextureManager.Update(); RenderTime elapsedTime = new RenderTime((int)(e.Time * Graphics.TextureManager.FPS_CAP * 1000)); //set this frame's input Logic.Gameplay.Input input = new Logic.Gameplay.Input(Keyboard, Mouse); Logic.Gameplay.Processor.SetFrameInput(input, elapsedTime, (int)Math.Round(UpdateFrequency)); Logic.Display.Screen.Process(elapsedTime); errorCount--; } catch (Exception ex) { Logs.Logger.LogError(ex); errorCount += 2; } } }
/// <summary> /// Called when it is time to render the next frame. Add your rendering code here. /// </summary> /// <param name="e">Contains timing information.</param> protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); if (GameLoaded < GameLoadState.Loaded) { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); Graphics.TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point Graphics.TextureManager.TextureProgram.SetModelView(Matrix4.Identity); Graphics.TextureManager.TextureProgram.UpdateModelView(); lock (lockObj) Graphics.TextureManager.SingleFont.RenderText(TextureManager.SCREEN_WIDTH / 2, TextureManager.SCREEN_HEIGHT / 2, loadMessage, null, Graphics.AtlasSheet.SpriteVOrigin.Center, Graphics.AtlasSheet.SpriteHOrigin.Center, 0); SwapBuffers(); } else if (GameLoaded == GameLoadState.Loaded) { try { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); Graphics.TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point Graphics.TextureManager.TextureProgram.SetModelView(Matrix4.Identity); Graphics.TextureManager.TextureProgram.UpdateModelView(); Logic.Display.Screen.Draw((int)Math.Round(RenderFrequency)); //Update screen SwapBuffers(); errorCount--; } catch (Exception ex) { Logs.Logger.LogError(ex); errorCount += 2; } if (errorCount > 10) GameLoaded = GameLoadState.Errored; } else if (GameLoaded == GameLoadState.Errored) { //Clear color AND stencil buffer GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.StencilBufferBit); Graphics.TextureManager.TextureProgram.SetTextureColor(Color4.White); //Move to rendering point Graphics.TextureManager.TextureProgram.SetModelView(Matrix4.Identity); Graphics.TextureManager.TextureProgram.UpdateModelView(); lock (lockObj) Graphics.TextureManager.SingleFont.RenderText(TextureManager.SCREEN_WIDTH / 2, TextureManager.SCREEN_HEIGHT / 2, "The program has encountered too many errors and needs to close.\nView the Error Logs for more details.", null, Graphics.AtlasSheet.SpriteVOrigin.Center, Graphics.AtlasSheet.SpriteHOrigin.Center, 12); SwapBuffers(); } }
/// <summary> /// Event called from GameModel when the game loading state has changed. /// </summary> private void OnLoadStateChange(GameLoadState loadState) => EvaluateLoadState();