diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/StardewModdingAPI/Program.cs | 113 | 
1 files changed, 49 insertions, 64 deletions
| diff --git a/src/StardewModdingAPI/Program.cs b/src/StardewModdingAPI/Program.cs index b8a8b856..ef273763 100644 --- a/src/StardewModdingAPI/Program.cs +++ b/src/StardewModdingAPI/Program.cs @@ -57,9 +57,7 @@ namespace StardewModdingAPI                  Log.AsyncY("SMAPI Version: " + Constants.Version.VersionString);
                  ConfigureUI();
                  ConfigurePaths();
 -                ConfigureSDV();
 -
 -                GameRunInvoker();
 +                StartGame();
              }
              catch (Exception e)
              {
 @@ -112,13 +110,12 @@ namespace StardewModdingAPI          }
          /// <summary>
 -        ///     Load Stardev Valley and control features
 +        ///     Load Stardev Valley and control features, and launch the game.
          /// </summary>
 -        private static void ConfigureSDV()
 +        private static void StartGame()
          {
 -            Log.AsyncY("Initializing SDV Assembly...");
 -
              // Load in the assembly - ignores security
 +            Log.AsyncY("Initializing SDV Assembly...");
              StardewAssembly = Assembly.UnsafeLoadFrom(GameExecutablePath);
              StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true);
              StardewGameInfo = StardewProgramType.GetField("gamePtr");
 @@ -127,64 +124,52 @@ namespace StardewModdingAPI              Log.AsyncY("Injecting New SDV Version...");
              Game1.version += $"-Z_MODDED | SMAPI {Constants.Version.VersionString}";
 -            // Create the thread for the game to run in.
 -            gameThread = new Thread(RunGame);
 -            Log.AsyncY("Starting SDV...");
 -            gameThread.Start();
 -
 -            // Wait for the game to load up
 -            while (!ready)
 +            // initialise after game launches
 +            new Thread(() =>
              {
 -            }
 -
 -            //SDV is running
 -            Log.AsyncY("SDV Loaded Into Memory");
 -
 -            //Create definition to listen for input
 -            Log.AsyncY("Initializing Console Input Thread...");
 -            consoleInputThread = new Thread(ConsoleInputThread);
 -
 -            // The only command in the API (at least it should be, for now)
 -            Command.RegisterCommand("help", "Lists all commands | 'help <cmd>' returns command description").CommandFired += help_CommandFired;
 -
 -            //Subscribe to events
 -            ControlEvents.KeyPressed += Events_KeyPressed;
 -            GameEvents.LoadContent += Events_LoadContent;
 -
 -            Log.AsyncY("Applying Final SDV Tweaks...");
 -            gamePtr.IsMouseVisible = false;
 -            gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version;
 -            gamePtr.Window.ClientSizeChanged += GraphicsEvents.InvokeResize;
 -        }
 -
 -        /// <summary>
 -        ///     Wrap the 'RunGame' method for console output
 -        /// </summary>
 -        private static void GameRunInvoker()
 -        {
 -            //Game's in memory now, send the event
 -            Log.AsyncY("Game Loaded");
 -            GameEvents.InvokeGameLoaded();
 -
 -            Log.AsyncY("Type 'help' for help, or 'help <cmd>' for a command's usage");
 -            //Begin listening to input
 -            consoleInputThread.Start();
 -
 -
 -            while (ready)
 -            {
 -                //Check if the game is still running 10 times a second
 -                Thread.Sleep(1000 / 10);
 -            }
 -
 -            //abort the thread, we're closing
 -            if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running)
 -                consoleInputThread.Abort();
 -
 -            Log.AsyncY("Game Execution Finished");
 -            Log.AsyncY("Shutting Down...");
 -            Thread.Sleep(100);
 -            Environment.Exit(0);
 +                // Wait for the game to load up
 +                while (!ready) Thread.Sleep(1000);
 +
 +                // Apply final tweaks
 +                Log.AsyncY("Applying Final SDV Tweaks...");
 +                gamePtr.IsMouseVisible = false;
 +                gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version;
 +                gamePtr.Window.ClientSizeChanged += GraphicsEvents.InvokeResize;
 +
 +                // Create definition to listen for input
 +                Log.AsyncY("Initializing Console Input Thread...");
 +                consoleInputThread = new Thread(ConsoleInputThread);
 +
 +                // The only command in the API (at least it should be, for now)
 +                Command.RegisterCommand("help", "Lists all commands | 'help <cmd>' returns command description").CommandFired += help_CommandFired;
 +
 +                // Subscribe to events
 +                ControlEvents.KeyPressed += Events_KeyPressed;
 +                GameEvents.LoadContent += Events_LoadContent;
 +
 +                // Game's in memory now, send the event
 +                Log.AsyncY("Game Loaded");
 +                GameEvents.InvokeGameLoaded();
 +
 +                // Listen for command line input
 +                Log.AsyncY("Type 'help' for help, or 'help <cmd>' for a command's usage");
 +                consoleInputThread.Start();
 +                while (ready)
 +                    Thread.Sleep(1000 / 10); // Check if the game is still running 10 times a second
 +
 +                // Abort the thread, we're closing
 +                if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running)
 +                    consoleInputThread.Abort();
 +
 +                Log.AsyncY("Game Execution Finished");
 +                Log.AsyncY("Shutting Down...");
 +                Thread.Sleep(100);
 +                Environment.Exit(0);
 +            }).Start();
 +
 +            // Start game loop
 +            Log.AsyncY("Starting SDV...");
 +            RunGame();
          }
          /// <summary>
 | 
