From 2e8c7e06c5c46834b570b667cb7497fe4cc408ac Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 20 Dec 2020 22:34:59 -0500 Subject: update for split-screen mode This includes splitting GameRunner (the main game instance) from Game1 (now a per-screen game state), adding a PerScreen utility to simplify per-screen values, adding separate per-screen input handling and events, adding new Context fields for split-screen, and logging the screen ID in split-screen mode to distinguish log entries. --- .../Framework/LogParsing/LogMessageBuilder.cs | 8 +- src/SMAPI.Web/Framework/LogParsing/LogParser.cs | 4 +- .../Framework/LogParsing/Models/LogMessage.cs | 3 + src/SMAPI.Web/Views/LogParser/Index.cshtml | 11 +- src/SMAPI/Constants.cs | 3 + src/SMAPI/Context.cs | 79 ++++- src/SMAPI/Framework/Logging/LogManager.cs | 5 +- src/SMAPI/Framework/ModHelpers/DataHelper.cs | 8 +- src/SMAPI/Framework/ModHelpers/InputHelper.cs | 21 +- src/SMAPI/Framework/ModHelpers/ModHelper.cs | 6 +- src/SMAPI/Framework/Monitor.cs | 11 +- src/SMAPI/Framework/SCore.cs | 358 +++++++++++---------- src/SMAPI/Framework/SGame.cs | 121 ++++--- src/SMAPI/Framework/SGameRunner.cs | 156 +++++++++ src/SMAPI/Utilities/PerScreen.cs | 79 +++++ 15 files changed, 619 insertions(+), 254 deletions(-) create mode 100644 src/SMAPI/Framework/SGameRunner.cs create mode 100644 src/SMAPI/Utilities/PerScreen.cs (limited to 'src') diff --git a/src/SMAPI.Web/Framework/LogParsing/LogMessageBuilder.cs b/src/SMAPI.Web/Framework/LogParsing/LogMessageBuilder.cs index 42e283a9..992876ef 100644 --- a/src/SMAPI.Web/Framework/LogParsing/LogMessageBuilder.cs +++ b/src/SMAPI.Web/Framework/LogParsing/LogMessageBuilder.cs @@ -16,6 +16,9 @@ namespace StardewModdingAPI.Web.Framework.LogParsing /// The log level for the next log message. public LogLevel Level { get; set; } + /// The screen ID in split-screen mode. + public int ScreenId { get; set; } + /// The mod name for the next log message. public string Mod { get; set; } @@ -36,10 +39,11 @@ namespace StardewModdingAPI.Web.Framework.LogParsing /// Start accumulating values for a new log message. /// The local time when the log was posted. /// The log level. + /// The screen ID in split-screen mode. /// The mod name. /// The initial log text. /// A log message is already started; call before starting a new message. - public void Start(string time, LogLevel level, string mod, string text) + public void Start(string time, LogLevel level, int screenId, string mod, string text) { if (this.Started) throw new InvalidOperationException("Can't start new message, previous log message isn't done yet."); @@ -48,6 +52,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing this.Time = time; this.Level = level; + this.ScreenId = screenId; this.Mod = mod; this.Text.Append(text); } @@ -74,6 +79,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing { Time = this.Time, Level = this.Level, + ScreenId = this.ScreenId, Mod = this.Mod, Text = this.Text.ToString() }; diff --git a/src/SMAPI.Web/Framework/LogParsing/LogParser.cs b/src/SMAPI.Web/Framework/LogParsing/LogParser.cs index 227dcd89..f69d4b6f 100644 --- a/src/SMAPI.Web/Framework/LogParsing/LogParser.cs +++ b/src/SMAPI.Web/Framework/LogParsing/LogParser.cs @@ -14,7 +14,7 @@ namespace StardewModdingAPI.Web.Framework.LogParsing ** Fields *********/ /// A regex pattern matching the start of a SMAPI message. - private readonly Regex MessageHeaderPattern = new Regex(@"^\[(?