diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 57934a2..b0b432b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,2 +1,4 @@ -- Lauren Stephenson [@CompSciLauren] -- Scott Atkins [@kins-dev] \ No newline at end of file +- Lauren Vu [@CompSciLauren] +- Scott Atkins [@kins-dev] +- f3wer [@f3wer] +- Atravita Mods [@atravita-mods] \ No newline at end of file diff --git a/DailyScreenshot/DailyScreenshot.csproj b/DailyScreenshot/DailyScreenshot.csproj index 07f5e55..fe7ba2a 100644 --- a/DailyScreenshot/DailyScreenshot.csproj +++ b/DailyScreenshot/DailyScreenshot.csproj @@ -5,9 +5,10 @@ net5.0 - + - - + + + \ No newline at end of file diff --git a/DailyScreenshot/ModConfig.cs b/DailyScreenshot/ModConfig.cs index cee7134..d8ee49a 100644 --- a/DailyScreenshot/ModConfig.cs +++ b/DailyScreenshot/ModConfig.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Runtime.Serialization; +using static DailyScreenshot.ModTrigger; namespace DailyScreenshot { @@ -33,6 +34,11 @@ class ModConfig /// private string m_launchGuid; + /// + /// String to use to indicate a default name + /// + public static string DEFAULT_NAME = "Unnamed Rule 1"; + /// /// String to use to indicate a default value /// @@ -43,6 +49,11 @@ class ModConfig /// public const float DEFAULT_ZOOM = 0.25f; + /// + /// Key shortcut for taking screenshot + /// + public static SButton DEFAULT_KEY = SButton.None; + /// /// Start of the day in Stardew Valley (6 am) /// @@ -56,22 +67,50 @@ class ModConfig /// /// Configurable toggle for auditory effects when taking screenshot. /// - public bool auditoryEffects = true; + public bool AuditoryEffects = true; /// /// Configurable toggle for visual effects when taking screenshot. /// - public bool visualEffects = true; + public bool VisualEffects = true; /// - /// Configurable toggle for ingame notifications when taking screenshot. + /// Configurable toggle for ingame screenshot notifications when taking screenshot. /// - public bool screenshotNotifications = true; + public bool ScreenshotNotifications = true; /// /// Rules loaded from the config file /// - public List SnapshotRules { get; set; } = new List(); + public List SnapshotRules { get; set; } = new List + { + CreateDefaultSnapshotRule() + }; + + /// + /// Default settings for a set of rules in SnapshotRules + /// + public static ModRule CreateDefaultSnapshotRule() + { + ModRule newRule = new ModRule + { + Name = DEFAULT_NAME, + ZoomLevel = DEFAULT_ZOOM, + Directory = DEFAULT_STRING, + FileName = ModRule.FileNameFlags.Default, + Trigger = + { + Days = DateFlags.Daily, + Weather = WeatherFlags.Any, + Location = LocationFlags.Farm, + Key = DEFAULT_KEY, + StartTime = DEFAULT_START_TIME, + EndTime = DEFAULT_END_TIME + } + }; + + return newRule; + } // Place to put json that doesn't match properties here // This can be used to upgrade the config file @@ -99,9 +138,12 @@ public ModConfig() public void Reset() { - auditoryEffects = true; - visualEffects = true; - screenshotNotifications = true; + // global settings + AuditoryEffects = true; + VisualEffects = true; + ScreenshotNotifications = true; + + ModEntry.g_dailySS.ResetMainSnapshotRule(); } private T GetOldData(IDictionary oldDatDict, string key, T defaultValue) diff --git a/DailyScreenshot/ModConfigHelper.cs b/DailyScreenshot/ModConfigHelper.cs new file mode 100644 index 0000000..e7bb132 --- /dev/null +++ b/DailyScreenshot/ModConfigHelper.cs @@ -0,0 +1,174 @@ +using static DailyScreenshot.ModTrigger; + +namespace DailyScreenshot +{ + + /// + /// Helper methods for checking and updating settings in the Config. + /// + public class ModConfigHelper + { + /// + /// Checks if a specific weather condition is present in the WeatherFlags + /// + /// WeatherFlags to check + /// The weather condition to check for + /// True if the weather condition is present, otherwise false + public static bool IsWeatherConditionEnabled(ModTrigger.WeatherFlags weather, ModTrigger.WeatherFlags targetWeather) + { + // Check if the specific weather condition is present + return (weather & targetWeather) != 0; + } + + /// + /// Updates weather with the new value for targetWeather. + /// + /// WeatherFlags to check + /// The weather condition to check for + /// What the new value should be + /// Updated value for weather + public static ModTrigger.WeatherFlags UpdateWeatherCondition(ModTrigger.WeatherFlags weather, ModTrigger.WeatherFlags targetWeather, bool val) + { + if (val) + { + // If targetWeather is true, add it to weather + weather |= targetWeather; + } + else + { + // If targetWeather is false, remove it from weather + weather &= ~targetWeather; + } + + return weather; + } + + /// + /// Checks if a specific location condition is present in the LocationFlags + /// + /// LocationFlags to check + /// The location condition to check for + /// True if the location condition is present, otherwise false + public static bool IsLocationConditionEnabled(ModTrigger.LocationFlags location, ModTrigger.LocationFlags targetLocation) + { + // Check if the specific location condition is present + return (location & targetLocation) != 0; + } + + /// + /// Updates location with the new value for targetLocation. + /// + /// LocationFlags to check + /// The location condition to check for + /// What the new value should be + /// Updated value for location + public static ModTrigger.LocationFlags UpdateLocationCondition(ModTrigger.LocationFlags location, ModTrigger.LocationFlags targetLocation, bool val) + { + if (val) + { + // If targetLocation is true, add it to location + location |= targetLocation; + } + else + { + // If targetLocation is false, remove it from location + location &= ~targetLocation; + } + + return location; + } + + /// + /// Checks if a specific date condition is present in the DateFlags + /// + /// DateFlags to check + /// The date condition to check for + /// True if the date condition is present, otherwise false + public static bool IsDateConditionEnabled(ModTrigger.DateFlags date, ModTrigger.DateFlags targetDate) + { + // Check if the specific date condition is present + return (date & targetDate) != 0; + } + + /// + /// Checks whether the new value for the date condition is actually a new value or if it's the same as what's already present in the config. + /// + /// DateFlags to check + /// The date condition to check for + /// What the new value should be + /// True if date condition is already set, otherwise false + public static bool IsDateConditionAlreadySet(ModTrigger.DateFlags date, ModTrigger.DateFlags targetDate, bool val) + { + if (val) + { + // If trying to set the date to true, check if it's already true + return (date & targetDate) != 0; + } + else + { + // If trying to set the date to false, check if it's already false + return (date & targetDate) == 0; + } + } + + /// + /// Updates date with the new value for targetDate. + /// + /// DateFlags to check + /// The date condition to check for + /// What the new value should be + /// Updated value for date + public static ModTrigger.DateFlags UpdateDateCondition(ModTrigger.DateFlags date, ModTrigger.DateFlags targetDate, bool val) + { + // If updating a specific day or other flags, proceed as before + if (val) + { + // If targetDate is true, add it to date + date |= targetDate; + } + else + { + // If targetDate is false, remove it from date + date &= ~targetDate; + } + + return date; + } + + /// + /// Checks if a specific fileName condition is present in the FileNameFlags + /// + /// FileNameFlags to check + /// The fileName condition to check for + /// True if the fileName condition is present, otherwise false + public static bool IsFileNameConditionEnabled(ModRule.FileNameFlags fileName, ModRule.FileNameFlags targetFileName) + { + // Check if the specific fileName condition is present + return (fileName & targetFileName) != 0; + } + + /// + /// Updates fileName with the new value for targetFileName. + /// + /// FileNameFlags to check + /// The fileName condition to check for + /// What the new value should be + /// Updated value for fileName + public static ModRule.FileNameFlags UpdateFileNameCondition(ModRule.FileNameFlags fileName, ModRule.FileNameFlags targetFileName, bool val) + { + if (val) + { + // If targetFileName is true, add it to fileName + fileName |= targetFileName; + } + else + { + // If targetFileName is false, remove it from fileName + fileName &= ~targetFileName; + } + + return fileName; + } + } + +} \ No newline at end of file diff --git a/DailyScreenshot/ModEntry.cs b/DailyScreenshot/ModEntry.cs index db66061..ee77024 100644 --- a/DailyScreenshot/ModEntry.cs +++ b/DailyScreenshot/ModEntry.cs @@ -8,6 +8,8 @@ using System.Threading; using StardewValley.Menus; using System.Diagnostics; +using static DailyScreenshot.ModTrigger; +using StardewModdingAPI.Utilities; namespace DailyScreenshot { @@ -54,6 +56,8 @@ public class ModEntry : Mod /// private ModConfig m_config; + private DateFlags staleDays; + /// /// Screenshot countdown ticks (make sure the world is rendered) /// @@ -403,36 +407,214 @@ private void OnGameLaunched(object sender, GameLaunchedEventArgs e) var gmcmApi = Helper.ModRegistry.GetApi("spacechase0.GenericModConfigMenu"); if (gmcmApi != null) { + if (m_config.SnapshotRules.Count == 0) + { + m_config.Reset(); + } + gmcmApi.Register(ModManifest, m_config.Reset, () => Helper.WriteConfig(m_config)); - gmcmApi.AddSectionTitle(ModManifest, I18n.Config_EffectControl, I18n.Config_EffectControl_Tooltip); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_About_Header_Title); + + gmcmApi.AddParagraph(ModManifest, I18n.Config_About_Description1); + + gmcmApi.AddParagraph(ModManifest, I18n.Config_About_Description2); + + gmcmApi.AddParagraph(ModManifest, I18n.Config_About_Description3); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Effects_Header_Title, I18n.Config_Effects_Header_Tooltip); gmcmApi.AddBoolOption( mod: ModManifest, - getValue: () => m_config.auditoryEffects, - setValue: (bool val) => m_config.auditoryEffects = val, - name: I18n.Config_AuditoryEffects, - tooltip: I18n.Config_AuditoryEffects_Tooltip + getValue: () => m_config.AuditoryEffects, + setValue: (bool val) => m_config.AuditoryEffects = val, + name: I18n.Config_Effects_Auditory_Title, + tooltip: I18n.Config_Effects_Auditory_Tooltip ); gmcmApi.AddBoolOption( mod: ModManifest, - getValue: () => m_config.visualEffects, - setValue: (bool val) => m_config.visualEffects = val, - name: I18n.Config_VisualEffects, - tooltip: I18n.Config_VisualEffects_Tooltip + getValue: () => m_config.VisualEffects, + setValue: (bool val) => m_config.VisualEffects = val, + name: I18n.Config_Effects_Visual_Title, + tooltip: I18n.Config_Effects_Visual_Tooltip ); gmcmApi.AddBoolOption( mod: ModManifest, - getValue: () => m_config.screenshotNotifications, - setValue: (bool val) => m_config.screenshotNotifications = val, - name: I18n.Config_Notification, - tooltip: I18n.Config_Notification_Tooltip + getValue: () => m_config.ScreenshotNotifications, + setValue: (bool val) => m_config.ScreenshotNotifications = val, + name: I18n.Config_Effects_Notification_Title, + tooltip: I18n.Config_Effects_Notification_Tooltip ); - gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Disclaimer); + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_MainSettings_Header_Title, I18n.Config_MainSettings_Header_Tooltip); - gmcmApi.AddParagraph(ModManifest, I18n.Config_Disclaimer_Paragraph); + gmcmApi.AddTextOption( + mod: ModManifest, + getValue: () => m_config.SnapshotRules[0].Name, + setValue: (string val) => m_config.SnapshotRules[0].Name = val, + name: I18n.Config_MainSettings_SnapshotRuleName_Title, + tooltip: I18n.Config_MainSettings_SnapshotRuleName_Tooltip + ); + + gmcmApi.AddNumberOption( + mod: ModManifest, + getValue: () => m_config.SnapshotRules[0].ZoomLevel, + setValue: (float val) => m_config.SnapshotRules[0].ZoomLevel = val, + name: I18n.Config_MainSettings_ZoomLevel_Title, + tooltip: I18n.Config_MainSettings_ZoomLevel_Tooltip, + min: 0.01f, + max: 1, + interval: 0.01f + ); + + gmcmApi.AddTextOption( + mod: ModManifest, + getValue: () => m_config.SnapshotRules[0].Directory, + setValue: (string val) => m_config.SnapshotRules[0].Directory = val, + name: I18n.Config_MainSettings_SnapshotDirectory_Title, + tooltip: I18n.Config_MainSettings_SnapshotDirectory_Tooltip + ); + + gmcmApi.AddKeybind( + ModManifest, + getValue: () => m_config.SnapshotRules[0].Trigger.Key, + setValue: (SButton val) => m_config.SnapshotRules[0].Trigger.Key = val, + name: I18n.Config_MainSettings_ShortcutKey_Title, + tooltip: I18n.Config_MainSettings_ShortcutKey_Tooltip + ); + + gmcmApi.AddNumberOption( + mod: ModManifest, + getValue: () => m_config.SnapshotRules[0].Trigger.StartTime, + setValue: (int val) => m_config.SnapshotRules[0].Trigger.StartTime = val, + name: I18n.Config_MainSettings_StartTime_Title, + tooltip: I18n.Config_MainSettings_StartTime_Tooltip, + min: 600, + max: 2590, + interval: 10 + ); + + gmcmApi.AddNumberOption( + mod: ModManifest, + getValue: () => m_config.SnapshotRules[0].Trigger.EndTime, + setValue: (int val) => m_config.SnapshotRules[0].Trigger.EndTime = val, + name: I18n.Config_MainSettings_EndTime_Title, + tooltip: I18n.Config_MainSettings_EndTime_Tooltip, + min: 610, + max: 2600, + interval: 10 + ); + + gmcmApi.AddPageLink(ModManifest, "FileName", () => "FileName"); + + gmcmApi.AddPageLink(ModManifest, "Days (Seasons and Weekdays)", () => "Days (Seasons and Weekdays)"); + + // NOTE on Days of the Monthh Code: <-- Search for this text to see explanation on why this is commented out. + // gmcmApi.AddPageLink(ModManifest, "Days (Days of the Month)", () => "Days (Days of the Month)"); + + gmcmApi.AddPageLink(ModManifest, "Weather", () => "Weather"); + + gmcmApi.AddPageLink(ModManifest, "Location", () => "Location"); + + gmcmApi.AddPage(ModManifest, "FileName"); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_FileNameParts_Header1_Title, I18n.Config_FileNameParts_Header1_Tooltip); + + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.Date); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.FarmName); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.GameID); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.Location); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.Weather); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.PlayerName); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.Time); + AddNameConditionOption(gmcmApi, ModRule.FileNameFlags.UniqueID); + + gmcmApi.AddPage(ModManifest, "Days (Seasons and Weekdays)"); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Days_Header1_Title, I18n.Config_Days_Header1_Tooltip); + + gmcmApi.AddParagraph(ModManifest, I18n.Config_Days_Header1_Description); + + AddDateConditionOption(gmcmApi, DateFlags.Spring); + AddDateConditionOption(gmcmApi, DateFlags.Summer); + AddDateConditionOption(gmcmApi, DateFlags.Fall); + AddDateConditionOption(gmcmApi, DateFlags.Winter); + AddDateConditionOption(gmcmApi, DateFlags.Mondays); + AddDateConditionOption(gmcmApi, DateFlags.Tuesdays); + AddDateConditionOption(gmcmApi, DateFlags.Wednesdays); + AddDateConditionOption(gmcmApi, DateFlags.Thursdays); + AddDateConditionOption(gmcmApi, DateFlags.Fridays); + AddDateConditionOption(gmcmApi, DateFlags.Saturdays); + AddDateConditionOption(gmcmApi, DateFlags.Sundays); + + // NOTE on Days of the Monthh Code: This code is commented out but not removed because it may or may not + // be added soon. It is left out for now due to a bug with updating weekdays + // and then clicking more than one time on any save button on the UI. + // If users want to modify the config down to the specific days, they will need + // to do so from the config.json file directly for now. + // gmcmApi.AddPage(ModManifest, "Days (Days of the Month)"); + + // gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Days_Header2_Title, I18n.Config_Days_Header2_Tooltip); + + // AddDateConditionOption(gmcmApi, DateFlags.Day_01); + // AddDateConditionOption(gmcmApi, DateFlags.Day_02); + // AddDateConditionOption(gmcmApi, DateFlags.Day_03); + // AddDateConditionOption(gmcmApi, DateFlags.Day_04); + // AddDateConditionOption(gmcmApi, DateFlags.Day_05); + // AddDateConditionOption(gmcmApi, DateFlags.Day_06); + // AddDateConditionOption(gmcmApi, DateFlags.Day_07); + // AddDateConditionOption(gmcmApi, DateFlags.Day_08); + // AddDateConditionOption(gmcmApi, DateFlags.Day_09); + // AddDateConditionOption(gmcmApi, DateFlags.Day_10); + // AddDateConditionOption(gmcmApi, DateFlags.Day_11); + // AddDateConditionOption(gmcmApi, DateFlags.Day_12); + // AddDateConditionOption(gmcmApi, DateFlags.Day_13); + // AddDateConditionOption(gmcmApi, DateFlags.Day_14); + // AddDateConditionOption(gmcmApi, DateFlags.Day_15); + // AddDateConditionOption(gmcmApi, DateFlags.Day_16); + // AddDateConditionOption(gmcmApi, DateFlags.Day_17); + // AddDateConditionOption(gmcmApi, DateFlags.Day_18); + // AddDateConditionOption(gmcmApi, DateFlags.Day_19); + // AddDateConditionOption(gmcmApi, DateFlags.Day_20); + // AddDateConditionOption(gmcmApi, DateFlags.Day_21); + // AddDateConditionOption(gmcmApi, DateFlags.Day_22); + // AddDateConditionOption(gmcmApi, DateFlags.Day_23); + // AddDateConditionOption(gmcmApi, DateFlags.Day_24); + // AddDateConditionOption(gmcmApi, DateFlags.Day_25); + // AddDateConditionOption(gmcmApi, DateFlags.Day_26); + // AddDateConditionOption(gmcmApi, DateFlags.Day_27); + // AddDateConditionOption(gmcmApi, DateFlags.Day_28); + + gmcmApi.AddPage(ModManifest, "Weather"); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Weather_Header_Title, I18n.Config_Weather_Header_Tooltip); + + AddWeatherConditionOption(gmcmApi, WeatherFlags.Sunny); + AddWeatherConditionOption(gmcmApi, WeatherFlags.Rainy); + AddWeatherConditionOption(gmcmApi, WeatherFlags.Windy); + AddWeatherConditionOption(gmcmApi, WeatherFlags.Stormy); + AddWeatherConditionOption(gmcmApi, WeatherFlags.Snowy); + + gmcmApi.AddPage(ModManifest, "Location"); + + gmcmApi.AddSectionTitle(ModManifest, I18n.Config_Location_Header_Title, I18n.Config_Location_Header_Tooltip); + + AddLocationConditionOption(gmcmApi, LocationFlags.Farm); + AddLocationConditionOption(gmcmApi, LocationFlags.Farmhouse); + AddLocationConditionOption(gmcmApi, LocationFlags.GreenHouse); + AddLocationConditionOption(gmcmApi, LocationFlags.Beach); + AddLocationConditionOption(gmcmApi, LocationFlags.FarmCave); + AddLocationConditionOption(gmcmApi, LocationFlags.Cellar); + AddLocationConditionOption(gmcmApi, LocationFlags.Desert); + AddLocationConditionOption(gmcmApi, LocationFlags.Museum); + AddLocationConditionOption(gmcmApi, LocationFlags.CommunityCenter); + AddLocationConditionOption(gmcmApi, LocationFlags.Mountain); + AddLocationConditionOption(gmcmApi, LocationFlags.IslandWest); + AddLocationConditionOption(gmcmApi, LocationFlags.IslandFarmhouse); + AddLocationConditionOption(gmcmApi, LocationFlags.IslandFieldOffice); + AddLocationConditionOption(gmcmApi, LocationFlags.Unknown); MInfo("Added \"DailyScreenshot\" config menu with \"Generic Mod Config Menu\"."); } @@ -504,7 +686,7 @@ private void RunTriggers(List rules, SButton key = SButton.None) /// The event data. private void OnWarped(object sender, WarpedEventArgs e) { - // if we enqueued a screen shot and warped before + // if we enqueued a screenshot and warped before // the timeout, reset the timeout lock (this) { @@ -569,7 +751,7 @@ private void TakeScreenshot(ModRule rule) { string ssPath = rule.GetFileName(); - if (m_config.visualEffects) + if (m_config.VisualEffects) { Game1.flashAlpha = 1f; } @@ -588,7 +770,7 @@ private void TakeScreenshot(ModRule rule) FileInfo mapScreenshot = new FileInfo(Path.Combine(DefaultSSdirectory.FullName, mapScreenshotPath)); MTrace($"Snapshot saved to {mapScreenshot.FullName}"); - if (m_config.auditoryEffects) + if (m_config.AuditoryEffects) { Game1.playSound("cameraNoise"); } @@ -611,7 +793,7 @@ private void TakeScreenshot(ModRule rule) // Adding space based on user feedback private void DisplayRuleHUD(ModRule rule) { - if (m_config.screenshotNotifications) + if (m_config.ScreenshotNotifications) { Game1.addHUDMessage( new HUDMessage(" " + rule.Name, HUDMessage.screenshot_type) @@ -634,7 +816,7 @@ private void CleanUpEmptyDirectories(DirectoryInfo directory) } /// - /// Queue of screen shot actions to take when the timeout expires + /// Queue of screenshot actions to take when the timeout expires /// private Queue m_ssActions = new Queue(); @@ -745,5 +927,111 @@ private void OnReturnedToTitle(object sender, ReturnedToTitleEventArgs e) m_ssCntDwnTicks = 0; } + + /// + /// Resets the Main Snapshot rule + /// + public void ResetMainSnapshotRule() + { + ModRule newRule = ModConfig.CreateDefaultSnapshotRule(); + + if (m_config.SnapshotRules.Count == 0) + { + m_config.SnapshotRules.Add(newRule); + return; + } + + m_config.SnapshotRules[0] = newRule; + } + + /// + /// Adds a Weather condition to the Config. + /// + /// The GenericModConfigMenu API + /// The Weather type to add to the Config. + void AddWeatherConditionOption(GenericModConfigMenuAPI api, WeatherFlags weatherFlag) + { + api.AddBoolOption( + mod: ModManifest, + getValue: () => ModConfigHelper.IsWeatherConditionEnabled(m_config.SnapshotRules[0].Trigger.Weather, weatherFlag), + setValue: (bool val) => m_config.SnapshotRules[0].Trigger.Weather = ModConfigHelper.UpdateWeatherCondition(m_config.SnapshotRules[0].Trigger.Weather, weatherFlag, val), + name: () => Helper.Translation.Get($"Config.Weather.{weatherFlag}.Title"), + tooltip: () => Helper.Translation.Get($"Config.Weather.{weatherFlag}.Tooltip") + ); + } + + /// + /// Adds a Location condition to the Config. + /// + /// The GenericModConfigMenu API + /// The Location type to add to the Config. + void AddLocationConditionOption(GenericModConfigMenuAPI api, LocationFlags locationFlag) + { + api.AddBoolOption( + mod: ModManifest, + getValue: () => ModConfigHelper.IsLocationConditionEnabled(m_config.SnapshotRules[0].Trigger.Location, locationFlag), + setValue: (bool val) => m_config.SnapshotRules[0].Trigger.Location = ModConfigHelper.UpdateLocationCondition(m_config.SnapshotRules[0].Trigger.Location, locationFlag, val), + name: () => Helper.Translation.Get($"Config.Location.{locationFlag}.Title"), + tooltip: () => Helper.Translation.Get($"Config.Location.{locationFlag}.Tooltip") + ); + } + + /// + /// This retrieves the value of the Days triggers in the config *before* it has changed due to UI Config updating. + /// If we were to directly check the m_config Days value each time, it would cause undesired behavior + /// with which values actually get updated and it will not work as the user intended based on the settings they updated. + /// Note: This isn't a great solution and could use refactoring, but it seems to work well enough as a solution for now. + /// + /// The current date flag potentially being updated + /// + DateFlags getCurrentDaysPriorToUpdate(DateFlags currentDateFlag) + { + // the first date flag that gets updated each time + if (currentDateFlag == DateFlags.Spring) + { + staleDays = m_config.SnapshotRules[0].Trigger.Days; + return staleDays; + } + + // otherwise must be one of the DateFlags in-between first and last + return staleDays; + } + + /// + /// Adds a Date condition to the Config. + /// + /// The GenericModConfigMenu API + /// The Date type to add to the Config. + void AddDateConditionOption(GenericModConfigMenuAPI api, DateFlags dateFlag) + { + api.AddBoolOption( + mod: ModManifest, + getValue: () => ModConfigHelper.IsDateConditionEnabled(m_config.SnapshotRules[0].Trigger.Days, dateFlag), + setValue: (bool val) => { + if (!ModConfigHelper.IsDateConditionAlreadySet(getCurrentDaysPriorToUpdate(dateFlag), dateFlag, val)) + { + m_config.SnapshotRules[0].Trigger.Days = ModConfigHelper.UpdateDateCondition(m_config.SnapshotRules[0].Trigger.Days, dateFlag, val); + } + }, + name: () => Helper.Translation.Get($"Config.Days.{dateFlag}.Title"), + tooltip: () => Helper.Translation.Get($"Config.Days.{dateFlag}.Tooltip") + ); + } + + /// + /// Adds a Name condition to the Config. + /// + /// The GenericModConfigMenu API + /// The Name type to add to the Config. + void AddNameConditionOption(GenericModConfigMenuAPI api, ModRule.FileNameFlags fileNameFlag) + { + api.AddBoolOption( + mod: ModManifest, + getValue: () => ModConfigHelper.IsFileNameConditionEnabled(m_config.SnapshotRules[0].FileName, fileNameFlag), + setValue: (bool val) => m_config.SnapshotRules[0].FileName = ModConfigHelper.UpdateFileNameCondition(m_config.SnapshotRules[0].FileName, fileNameFlag, val), + name: () => Helper.Translation.Get($"Config.FileNameParts.{fileNameFlag}.Title"), + tooltip: () => Helper.Translation.Get($"Config.FileNameParts.{fileNameFlag}.Tooltip") + ); + } } -} \ No newline at end of file +} diff --git a/DailyScreenshot/ModRule.cs b/DailyScreenshot/ModRule.cs index 703c9aa..96a09e3 100644 --- a/DailyScreenshot/ModRule.cs +++ b/DailyScreenshot/ModRule.cs @@ -3,8 +3,6 @@ using System.IO; using StardewValley; using System.Globalization; -using StardewModdingAPI; -using System.Collections.Generic; using Newtonsoft.Json; namespace DailyScreenshot diff --git a/DailyScreenshot/ModTrigger.cs b/DailyScreenshot/ModTrigger.cs index 2ba2285..4fdb433 100644 --- a/DailyScreenshot/ModTrigger.cs +++ b/DailyScreenshot/ModTrigger.cs @@ -72,8 +72,8 @@ public enum DateFlags Day_9 = Day_09, Day_10 = 1 << 9, Day_11 = 1 << 10, - Day_12 = 1 << 10, - Day_13 = 1 << 10, + Day_12 = 1 << 11, + Day_13 = 1 << 12, Day_14 = 1 << 13, Day_15 = 1 << 14, Day_16 = 1 << 15, @@ -93,15 +93,15 @@ public enum DateFlags Summer = 1 << 29, Fall = 1 << 30, Winter = 1 << 31, - AnyDay = Sundays | Mondays | Tuesdays | Wednesdays | Thursdays | Fridays | Saturdays, + AnyDay = Mondays | Tuesdays | Wednesdays | Thursdays | Fridays | Saturdays | Sundays, AnySeason = Spring | Summer | Fall | Winter, - Sundays = Day_01 | Day_08 | Day_15 | Day_22, - Mondays = Sundays << 1, - Tuesdays = Sundays << 2, - Wednesdays = Sundays << 3, - Thursdays = Sundays << 4, - Fridays = Sundays << 5, - Saturdays = Sundays << 6, + Mondays = Day_01 | Day_08 | Day_15 | Day_22, + Tuesdays = Mondays << 1, + Wednesdays = Mondays << 2, + Thursdays = Mondays << 3, + Fridays = Mondays << 4, + Saturdays = Mondays << 5, + Sundays = Mondays << 6, FirstDayOfTheMonth = Day_01, LastDayOfTheMonth = Day_28, Daily = AnyDay | AnySeason diff --git a/DailyScreenshot/Tests/Testing.md b/DailyScreenshot/Tests/Testing.md new file mode 100644 index 0000000..8ea3485 --- /dev/null +++ b/DailyScreenshot/Tests/Testing.md @@ -0,0 +1,252 @@ +# Testing + +Here are the testing strategies available/recommended for this mod. + +## warning_test_files + +See the [how_to_test.md](./warning_test_files/how_to_test.md) guide for how to use these tests. + +## Unit Tests + +It would be nice to have unit tests and these will hopefully be added in the future, but this is not available yet. + +## Manual In-Game Testing + +This is the primary method of testing. + +In general, should make sure to test anything specific that was changed. + +Below are some general examples of Happy-Path and Unhappy-Path test cases. + +### Happy-Path Config Testing + +The Happy-Path Config. Add this to the config.json file for testing: +``` json +{ + "AuditoryEffects": true, + "VisualEffects": true, + "ScreenshotNotifications": true, + "SnapshotRules": [ + { + "Name": "Daily Farm Picture", + "ZoomLevel": 0.25, + "Directory": "Default", + "FileName": "Default", + "Trigger": { + "Days": "Daily", + "Weather": "Any", + "Location": "Farm", + "Key": "None", + "StartTime": 600, + "EndTime": 2600 + } + }, + { + "Name": "Keypress Picture", + "ZoomLevel": 1.0, + "Directory": "/home/bob/SDV", + "FileName": "None", + "Trigger": { + "Days": "Daily", + "Weather": "Any", + "Location": "Any", + "Key": "Multiply", + "StartTime": 600, + "EndTime": 2600 + } + } + ] +} +``` + +1. Able to launch game and capture a screenshot using Happy-Path config.json file. + * Game generally looks/behaves as expected. + * No console errors or warnings. + * Screenshot is taken and can see the notification with auditory (camera sound) and visual effects (flash). + * Can be found in the designated folder. + * Has the expected file name. + * Was triggered under the correct conditions. + * Days + * Weather + * Location + * Key (if any) + * StartTime + * EndTime + * Repeat this a few times for a few different configurations for the triggers. +1. Able to change the settings from the UI Config + * The screenshot behavior updates as expected. + * AuditoryEffects + * VisualEffects + * ScreenshotNotifications + * SnapshotRules + * Name + * ZoomLevel + * Directory + * FileName + * Triggers + * Days + * Weather + * Location + * Key + * StartTime + * EndTime + * Other existing additional snapshot rules are NOT updated/reset/overridden. Only the global settings and first set of snapshot rules are updated. +1. Able to reset to default settings with the Default button from the UI Config. + * The screenshot behavior updates as expected. + * UI Config shows correct default options. + * Screenshot behavior in-game and in designated folder are correct. + * AuditoryEffects + * VisualEffects + * ScreenshotNotifications + * SnapshotRules + * Name + * ZoomLevel + * Directory + * FileName + * Triggers + * Days + * Weather + * Location + * Key + * StartTime + * EndTime + * Other existing additional snapshot rules are NOT updated/reset/overridden. Only the global settings and first set of snapshot rules are updated. + +### Unhappy-Path Config Testing - 1 + +The Happy-Path Config. Add this to the config.json file for testing: +``` json +{ + "SnapshotRules": [ + { + "Name": "Daily Farm Picture", + "ZoomLevel": 0.25, + "Directory": "Default", + "FileName": "Default", + "Trigger": { + "Days": "Daily", + "Weather": "Any", + "Location": "Farm", + "Key": "None", + "StartTime": 600, + "EndTime": 2600 + } + }, + { + "Name": "Keypress Picture", + "ZoomLevel": 1.0, + "Directory": "/home/bob/SDV", + "FileName": "None", + "Trigger": { + "Days": "Daily", + "Weather": "Any", + "Location": "Any", + "Key": "Multiply", + "StartTime": 600, + "EndTime": 2600 + } + } + ] +} +``` + +Expected success Console output (something similar to this): +``` bash +[SMAPI] Loading mods... +[SMAPI] Loaded X mods: +[SMAPI] Daily Screenshot 3.0.0 by CompSciLauren | Automatically takes a daily screenshot of your entire farm. +[SMAPI] Generic Mod Config Menu 1.11.2 by spacechase0 | Adds an in-game UI to edit other mods' config options (for mods which support it). + +[SMAPI] Launching mods... +[SMAPI] Mods loaded and ready! +[Daily Screenshot] Added "DailyScreenshot" config menu with "Generic Mod Config Menu". +``` + +1. Able to launch game and capture a screenshot using Unhappy-Path config.json file. + * Game generally looks/behaves as expected. + * No console errors or warnings. + * For screenshots, it should just use the Default settings automatically for any specific config options that are missing (e.g. AuditoryEffects). + * Screenshot is taken and can see the notification with auditory (camera sound) and visual effects (flash). + * Can be found in the designated folder. + * Has the expected file name. + * Was triggered under the correct conditions. + * Days + * Weather + * Location + * Key (if any) + * StartTime + * EndTime +1. Able to change the settings from the UI Config + * The screenshot behavior updates as expected. + * AuditoryEffects + * VisualEffects + * ScreenshotNotifications + * SnapshotRules + * Name + * ZoomLevel + * Directory + * FileName + * Triggers + * Days + * Weather + * Location + * Key + * StartTime + * EndTime +1. Able to reset to default settings with the Default button from the UI Config. + * The screenshot behavior updates as expected. + * UI Config shows correct default options. + * Screenshot behavior in-game and in designated folder are correct. + * AuditoryEffects + * VisualEffects + * ScreenshotNotifications + * SnapshotRules + * Name + * ZoomLevel + * Directory + * FileName + * Triggers + * Days + * Weather + * Location + * Key + * StartTime + * EndTime + +### Unhappy-Path Config Testing - 2 + +The Unhappy-Path Config. Add this to the config.json file for testing: +``` json +{ +} +``` + +1. Warnings show up in the Console as expected. + +Should see an output like this: +``` bash +[SMAPI] Launching mods... +[Daily Screenshot] Updating unnamed rule to be "Unnamed Rule 1" +[Daily Screenshot] Updating unnamed rule to be "Unnamed Rule 2" +[Daily Screenshot] Rules "Unnamed Rule 1" and "Unnamed Rule 2" can over write one another. +[SMAPI] Mods loaded and ready! +``` + +Not ideal that it creates 2 rules, but this is an edge case and doesn't seem detrimental, though hopefully can be resolved at a future date. + +### Unhappy-Path Config Testing - 3 + +The Unhappy-Path Config where Config file does not exist. Make sure there is no Config.json file in the Mod folder. + +1. Warnings show up in the Console as expected. + +Should see an output like this: +``` bash +[SMAPI] Launching mods... +[Daily Screenshot] Updating unnamed rule to be "Unnamed Rule 1" +[Daily Screenshot] Updating unnamed rule to be "Unnamed Rule 2" +[Daily Screenshot] Rules "Unnamed Rule 1" and "Unnamed Rule 2" can over write one another. +[SMAPI] Mods loaded and ready! +``` + +Not ideal that it creates 2 rules, but this is an edge case and doesn't seem detrimental, though hopefully can be resolved at a future date. diff --git a/DailyScreenshot/warning_test_files/days.json b/DailyScreenshot/Tests/warning_test_files/days.json similarity index 100% rename from DailyScreenshot/warning_test_files/days.json rename to DailyScreenshot/Tests/warning_test_files/days.json diff --git a/DailyScreenshot/Tests/warning_test_files/days_result.txt b/DailyScreenshot/Tests/warning_test_files/days_result.txt new file mode 100644 index 0000000..1eadac0 --- /dev/null +++ b/DailyScreenshot/Tests/warning_test_files/days_result.txt @@ -0,0 +1,298 @@ +Left hand side and right hand side should never both contain a "No Overlap" rule +Make sure each day only overlaps with the correct season and day of week +Make sure each day of week does not overlap with any other day of week +Make sure each season does not overlap with another seasons +Make sure FirstDayOfTheMonth only overlaps Day 1, Sundays and All for that season +Make sure LastDayOfTheMonth only overlaps Day 28, Saturdays and All for that season + +Example: +[Daily Screenshot] Rule Days Inactive AnyDay will not trigger as no season is set. Days="AnyDay" +[Daily Screenshot] Rule Days Inactive AnySeason will not trigger as no day is set. Days="AnySeason" +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 1" and "Days Overlap Season Spring Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 1" and "Days Overlap Season Spring FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 1" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 2" and "Days Overlap Season Spring Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 2" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 3" and "Days Overlap Season Spring Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 3" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 4" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 4" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 5" and "Days Overlap Season Spring Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 5" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 6" and "Days Overlap Season Spring Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 6" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 7" and "Days Overlap Season Spring Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 7" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 8" and "Days Overlap Season Spring Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 8" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 9" and "Days Overlap Season Spring Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 9" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 10" and "Days Overlap Season Spring Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 10" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 11" and "Days No Overlap Season Spring Day 12" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 11" and "Days No Overlap Season Spring Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 11" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 11" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 12" and "Days No Overlap Season Spring Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 12" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 12" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 13" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 13" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 14" and "Days Overlap Season Spring Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 14" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 15" and "Days Overlap Season Spring Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 15" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 16" and "Days Overlap Season Spring Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 16" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 17" and "Days Overlap Season Spring Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 17" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 18" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 18" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 19" and "Days Overlap Season Spring Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 19" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 20" and "Days Overlap Season Spring Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 20" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 21" and "Days Overlap Season Spring Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 21" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 22" and "Days Overlap Season Spring Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 22" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 23" and "Days Overlap Season Spring Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 23" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 24" and "Days Overlap Season Spring Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 24" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 25" and "Days Overlap Season Spring Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 25" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 26" and "Days Overlap Season Spring Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 26" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 27" and "Days Overlap Season Spring Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 27" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 28" and "Days Overlap Season Spring Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 28" and "Days Overlap Season Spring LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Spring Day 28" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Sundays" and "Days Overlap Season Spring FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Sundays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Mondays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Tuesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Wednesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Thursdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Fridays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Saturdays" and "Days Overlap Season Spring LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring Saturdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring FirstDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Spring LastDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 1" and "Days Overlap Season Summer Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 1" and "Days Overlap Season Summer FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 1" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 2" and "Days Overlap Season Summer Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 2" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 3" and "Days Overlap Season Summer Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 3" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 4" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 4" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 5" and "Days Overlap Season Summer Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 5" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 6" and "Days Overlap Season Summer Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 6" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 7" and "Days Overlap Season Summer Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 7" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 8" and "Days Overlap Season Summer Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 8" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 9" and "Days Overlap Season Summer Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 9" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 10" and "Days Overlap Season Summer Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 10" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 11" and "Days No Overlap Season Summer Day 12" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 11" and "Days No Overlap Season Summer Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 11" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 11" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 12" and "Days No Overlap Season Summer Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 12" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 12" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 13" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 13" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 14" and "Days Overlap Season Summer Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 14" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 15" and "Days Overlap Season Summer Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 15" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 16" and "Days Overlap Season Summer Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 16" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 17" and "Days Overlap Season Summer Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 17" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 18" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 18" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 19" and "Days Overlap Season Summer Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 19" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 20" and "Days Overlap Season Summer Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 20" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 21" and "Days Overlap Season Summer Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 21" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 22" and "Days Overlap Season Summer Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 22" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 23" and "Days Overlap Season Summer Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 23" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 24" and "Days Overlap Season Summer Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 24" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 25" and "Days Overlap Season Summer Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 25" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 26" and "Days Overlap Season Summer Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 26" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 27" and "Days Overlap Season Summer Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 27" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 28" and "Days Overlap Season Summer Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 28" and "Days Overlap Season Summer LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Summer Day 28" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Sundays" and "Days Overlap Season Summer FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Sundays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Mondays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Tuesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Wednesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Thursdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Fridays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Saturdays" and "Days Overlap Season Summer LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer Saturdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer FirstDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Summer LastDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 1" and "Days Overlap Season Fall Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 1" and "Days Overlap Season Fall FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 1" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 2" and "Days Overlap Season Fall Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 2" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 3" and "Days Overlap Season Fall Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 3" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 4" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 4" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 5" and "Days Overlap Season Fall Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 5" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 6" and "Days Overlap Season Fall Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 6" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 7" and "Days Overlap Season Fall Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 7" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 8" and "Days Overlap Season Fall Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 8" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 9" and "Days Overlap Season Fall Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 9" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 10" and "Days Overlap Season Fall Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 10" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 11" and "Days No Overlap Season Fall Day 12" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 11" and "Days No Overlap Season Fall Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 11" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 11" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 12" and "Days No Overlap Season Fall Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 12" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 12" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 13" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 13" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 14" and "Days Overlap Season Fall Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 14" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 15" and "Days Overlap Season Fall Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 15" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 16" and "Days Overlap Season Fall Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 16" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 17" and "Days Overlap Season Fall Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 17" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 18" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 18" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 19" and "Days Overlap Season Fall Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 19" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 20" and "Days Overlap Season Fall Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 20" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 21" and "Days Overlap Season Fall Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 21" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 22" and "Days Overlap Season Fall Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 22" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 23" and "Days Overlap Season Fall Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 23" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 24" and "Days Overlap Season Fall Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 24" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 25" and "Days Overlap Season Fall Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 25" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 26" and "Days Overlap Season Fall Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 26" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 27" and "Days Overlap Season Fall Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 27" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 28" and "Days Overlap Season Fall Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 28" and "Days Overlap Season Fall LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Fall Day 28" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Sundays" and "Days Overlap Season Fall FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Sundays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Mondays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Tuesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Wednesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Thursdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Fridays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Saturdays" and "Days Overlap Season Fall LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall Saturdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall FirstDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Fall LastDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 1" and "Days Overlap Season Winter Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 1" and "Days Overlap Season Winter FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 1" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 2" and "Days Overlap Season Winter Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 2" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 3" and "Days Overlap Season Winter Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 3" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 4" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 4" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 5" and "Days Overlap Season Winter Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 5" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 6" and "Days Overlap Season Winter Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 6" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 7" and "Days Overlap Season Winter Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 7" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 8" and "Days Overlap Season Winter Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 8" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 9" and "Days Overlap Season Winter Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 9" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 10" and "Days Overlap Season Winter Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 10" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 11" and "Days No Overlap Season Winter Day 12" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 11" and "Days No Overlap Season Winter Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 11" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 11" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 12" and "Days No Overlap Season Winter Day 13" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 12" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 12" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 13" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 13" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 14" and "Days Overlap Season Winter Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 14" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 15" and "Days Overlap Season Winter Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 15" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 16" and "Days Overlap Season Winter Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 16" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 17" and "Days Overlap Season Winter Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 17" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 18" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 18" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 19" and "Days Overlap Season Winter Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 19" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 20" and "Days Overlap Season Winter Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 20" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 21" and "Days Overlap Season Winter Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 21" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 22" and "Days Overlap Season Winter Sundays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 22" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 23" and "Days Overlap Season Winter Mondays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 23" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 24" and "Days Overlap Season Winter Tuesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 24" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 25" and "Days Overlap Season Winter Wednesdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 25" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 26" and "Days Overlap Season Winter Thursdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 26" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 27" and "Days Overlap Season Winter Fridays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 27" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 28" and "Days Overlap Season Winter Saturdays" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 28" and "Days Overlap Season Winter LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days No Overlap Season Winter Day 28" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Sundays" and "Days Overlap Season Winter FirstDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Sundays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Mondays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Tuesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Wednesdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Thursdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Fridays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Saturdays" and "Days Overlap Season Winter LastDayOfTheMonth" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter Saturdays" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter FirstDayOfTheMonth" and "Days Overlap All" can over write one another. +[Daily Screenshot] Rules "Days Overlap Season Winter LastDayOfTheMonth" and "Days Overlap All" can over write one another. diff --git a/DailyScreenshot/warning_test_files/gen_days_json.bash b/DailyScreenshot/Tests/warning_test_files/gen_days_json.bash similarity index 100% rename from DailyScreenshot/warning_test_files/gen_days_json.bash rename to DailyScreenshot/Tests/warning_test_files/gen_days_json.bash diff --git a/DailyScreenshot/warning_test_files/how_to_test.md b/DailyScreenshot/Tests/warning_test_files/how_to_test.md similarity index 100% rename from DailyScreenshot/warning_test_files/how_to_test.md rename to DailyScreenshot/Tests/warning_test_files/how_to_test.md diff --git a/DailyScreenshot/warning_test_files/location.json b/DailyScreenshot/Tests/warning_test_files/location.json similarity index 100% rename from DailyScreenshot/warning_test_files/location.json rename to DailyScreenshot/Tests/warning_test_files/location.json diff --git a/DailyScreenshot/Tests/warning_test_files/location_result.txt b/DailyScreenshot/Tests/warning_test_files/location_result.txt new file mode 100644 index 0000000..8f37f97 --- /dev/null +++ b/DailyScreenshot/Tests/warning_test_files/location_result.txt @@ -0,0 +1,17 @@ +Times can be ignored. +Left hand side and right hand side should never both contain a "No Overlap" rule + +Example: +[Daily Screenshot] Rule Location Inactive will not trigger as no location is set. Location="Location_None" +[Daily Screenshot] Rules "Location No Overlap Farm" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Farmhouse" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Greenhouse" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Beach" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap FarmCave" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Cellar" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Desert" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Museum" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap CommunityCenter" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Mountain" and "Location Overlap Any" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Unknown" and "Location Overlap Any" can over write one another. + diff --git a/DailyScreenshot/warning_test_files/time.json b/DailyScreenshot/Tests/warning_test_files/time.json similarity index 100% rename from DailyScreenshot/warning_test_files/time.json rename to DailyScreenshot/Tests/warning_test_files/time.json diff --git a/DailyScreenshot/Tests/warning_test_files/time_result.txt b/DailyScreenshot/Tests/warning_test_files/time_result.txt new file mode 100644 index 0000000..876ced4 --- /dev/null +++ b/DailyScreenshot/Tests/warning_test_files/time_result.txt @@ -0,0 +1,13 @@ +Times can be ignored. +Left hand side and right hand side should never both contain a "No Overlap" rule + +Example: + +[Daily Screenshot] Setting limits on StartTime and EndTime for rule "Time Overlap Fixup 1300 to 1099" +[Daily Screenshot] Swapping StartTime and EndTime for rule "Time Overlap Fixup 1300 to 1099" +[Daily Screenshot] StartTime is now "1140" amd EmdTime is now "1300" for rule "Time Overlap Fixup 1300 to 1099" +[Daily Screenshot] Setting limits on StartTime and EndTime for rule "Time No Overlap Directory" +[Daily Screenshot] Swapping StartTime and EndTime for rule "Time No Overlap Directory" +[Daily Screenshot] StartTime is now "1140" amd EmdTime is now "1300" for rule "Time No Overlap Directory" +[Daily Screenshot] Rules "Time No Overlap Morning" and "Time Overlap Fixup 1300 to 1099" can over write one another. +[Daily Screenshot] Rules "Location No Overlap Afternoon" and "Time Overlap Fixup 1300 to 1099" can over write one another. diff --git a/DailyScreenshot/warning_test_files/weather.json b/DailyScreenshot/Tests/warning_test_files/weather.json similarity index 100% rename from DailyScreenshot/warning_test_files/weather.json rename to DailyScreenshot/Tests/warning_test_files/weather.json diff --git a/DailyScreenshot/Tests/warning_test_files/weather_result.txt b/DailyScreenshot/Tests/warning_test_files/weather_result.txt new file mode 100644 index 0000000..64f0195 --- /dev/null +++ b/DailyScreenshot/Tests/warning_test_files/weather_result.txt @@ -0,0 +1,10 @@ +Times can be ignored. +Left hand side and right hand side should never both contain a "No Overlap" rule + +Example: +[Daily Screenshot] Rule Weather Inactive will not trigger as no weather is set. Weather="Weather_None" +[Daily Screenshot] Rules "Weather No Overlap Sunny" and "Weather Overlap Any" can over write one another. +[Daily Screenshot] Rules "Weather No Overlap Rainy" and "Weather Overlap Any" can over write one another. +[Daily Screenshot] Rules "Weather No Overlap Windy" and "Weather Overlap Any" can over write one another. +[Daily Screenshot] Rules "Weather No Overlap Stormy" and "Weather Overlap Any" can over write one another. +[Daily Screenshot] Rules "Weather No Overlap Snowy" and "Weather Overlap Any" can over write one another. \ No newline at end of file diff --git a/DailyScreenshot/dependencies/GenericModConfigMenuAPI.cs b/DailyScreenshot/dependencies/GenericModConfigMenuAPI.cs new file mode 100644 index 0000000..4a40d9a --- /dev/null +++ b/DailyScreenshot/dependencies/GenericModConfigMenuAPI.cs @@ -0,0 +1,100 @@ +using StardewModdingAPI; +using System; + +namespace DailyScreenshot +{ + + public interface GenericModConfigMenuAPI + { + /// Register a mod whose config can be edited through the UI. + /// The mod's manifest. + /// Reset the mod's config to its default values. + /// Save the mod's current config to the config.json file. + /// Whether the options can only be edited from the title screen. + /// Each mod can only be registered once, unless it's deleted via before calling this again. + void Register(IManifest mod, Action reset, Action save, bool titleScreenOnly = false); + + /**** + ** Multi-page management + ****/ + /// Start a new page in the mod's config UI, or switch to that page if it already exists. All options registered after this will be part of that page. + /// The mod's manifest. + /// The unique page ID. + /// The page title shown in its UI, or null to show the value. + /// You must also call to make the page accessible. This is only needed to set up a multi-page config UI. If you don't call this method, all options will be part of the mod's main config UI instead. + void AddPage(IManifest mod, string pageId, Func pageTitle = null); + + /// Add a link to a page added via at the current position in the form. + /// The mod's manifest. + /// The unique ID of the page to open when the link is clicked. + /// The link text shown in the form. + /// The tooltip text shown when the cursor hovers on the link, or null to disable the tooltip. + void AddPageLink(IManifest mod, string pageId, Func text, Func tooltip = null); + + /// Add a section title at the current position in the form. + /// The mod's manifest. + /// The title text shown in the form. + /// The tooltip text shown when the cursor hovers on the title, or null to disable the tooltip. + void AddSectionTitle(IManifest mod, Func text, Func tooltip = null); + + /// Add a paragraph of text at the current position in the form. + /// The mod's manifest. + /// The paragraph text to display. + void AddParagraph(IManifest mod, Func text); + + /// Add a boolean option at the current position in the form. + /// The mod's manifest. + /// Get the current value from the mod config. + /// Set a new value in the mod config. + /// The label text to show in the form. + /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. + /// The unique field ID for use with , or null to auto-generate a randomized ID. + void AddBoolOption(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, string fieldId = null); + + /// Add an integer option at the current position in the form. + /// The mod's manifest. + /// Get the current value from the mod config. + /// Set a new value in the mod config. + /// The label text to show in the form. + /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. + /// The minimum allowed value, or null to allow any. + /// The maximum allowed value, or null to allow any. + /// The interval of values that can be selected. + /// Get the display text to show for a value, or null to show the number as-is. + /// The unique field ID for use with , or null to auto-generate a randomized ID. + void AddNumberOption(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, int? min = null, int? max = null, int? interval = null, Func formatValue = null, string fieldId = null); + + /// Add a float option at the current position in the form. + /// The mod's manifest. + /// Get the current value from the mod config. + /// Set a new value in the mod config. + /// The label text to show in the form. + /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. + /// The minimum allowed value, or null to allow any. + /// The maximum allowed value, or null to allow any. + /// The interval of values that can be selected. + /// Get the display text to show for a value, or null to show the number as-is. + /// The unique field ID for use with , or null to auto-generate a randomized ID. + void AddNumberOption(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, float? min = null, float? max = null, float? interval = null, Func formatValue = null, string fieldId = null); + + /// Add a string option at the current position in the form. + /// The mod's manifest. + /// Get the current value from the mod config. + /// Set a new value in the mod config. + /// The label text to show in the form. + /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. + /// The values that can be selected, or null to allow any. + /// Get the display text to show for a value from , or null to show the values as-is. + /// The unique field ID for use with , or null to auto-generate a randomized ID. + void AddTextOption(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, string[] allowedValues = null, Func formatAllowedValue = null, string fieldId = null); + + /// Add a key binding at the current position in the form. + /// The mod's manifest. + /// Get the current value from the mod config. + /// Set a new value in the mod config. + /// The label text to show in the form. + /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. + /// The unique field ID for use with , or null to auto-generate a randomized ID. + void AddKeybind(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, string fieldId = null); + } +} diff --git a/DailyScreenshot/dependencys/GenericModConfigMenuAPI.cs b/DailyScreenshot/dependencys/GenericModConfigMenuAPI.cs deleted file mode 100644 index 1e2273b..0000000 --- a/DailyScreenshot/dependencys/GenericModConfigMenuAPI.cs +++ /dev/null @@ -1,38 +0,0 @@ -using StardewModdingAPI; -using System; - -namespace DailyScreenshot -{ - - public interface GenericModConfigMenuAPI - { - /// Register a mod whose config can be edited through the UI. - /// The mod's manifest. - /// Reset the mod's config to its default values. - /// Save the mod's current config to the config.json file. - /// Whether the options can only be edited from the title screen. - /// Each mod can only be registered once, unless it's deleted via before calling this again. - void Register(IManifest mod, Action reset, Action save, bool titleScreenOnly = false); - - /// Add a section title at the current position in the form. - /// The mod's manifest. - /// The title text shown in the form. - /// The tooltip text shown when the cursor hovers on the title, or null to disable the tooltip. - void AddSectionTitle(IManifest mod, Func text, Func tooltip = null); - - /// Add a paragraph of text at the current position in the form. - /// The mod's manifest. - /// The paragraph text to display. - void AddParagraph(IManifest mod, Func text); - - /// Add a boolean option at the current position in the form. - /// The mod's manifest. - /// Get the current value from the mod config. - /// Set a new value in the mod config. - /// The label text to show in the form. - /// The tooltip text shown when the cursor hovers on the field, or null to disable the tooltip. - /// The unique field ID for use with , or null to auto-generate a randomized ID. - void AddBoolOption(IManifest mod, Func getValue, Action setValue, Func name, Func tooltip = null, string fieldId = null); - - } -} diff --git a/DailyScreenshot/i18n/default.json b/DailyScreenshot/i18n/default.json index b84c909..9a6ce43 100644 --- a/DailyScreenshot/i18n/default.json +++ b/DailyScreenshot/i18n/default.json @@ -1,22 +1,210 @@ { "GmcmNotFound": "Generic Mod Config Menu (https://www.nexusmods.com/stardewvalley/mods/5098) not found. This mod supports GMCM configuration but it is not installed, so integration disabled.", "GmcmVersionMessage": "Please update Generic Mod Config Menu (https://www.nexusmods.com/stardewvalley/mods/5098) to at least version {{version}} (Current version: {{currentversion}}). GMCM integration disabled.", - - // GMCM Translations: - "config.EffectControl": "Effect control", - "config.EffectControl.tooltip": "Toggle auditory and visual effects as well as notifications.", - "config.AuditoryEffects": "Auditory Effects", - "config.AuditoryEffects.tooltip": "Toggles if a camera sound plays whenever a screenshot was taken.", - "config.VisualEffects": "Visual Effects", - "config.VisualEffects.tooltip": "Toggles if the screen flashes whenever a screenshot was taken.", - "config.Notification": "Notifications", - "config.Notification.tooltip": "Toggles if a notification is displayed whenever a screenshot was taken.", - - "config.Disclaimer": "!!!DISCLAIMER!!!", - "config.Disclaimer.paragraph": "This \"Generic Mod Config Menu\" integration does not include all possible mod configurations! To configure the screenshot rules edit the config.json file located at your Mods folder. For this purpose, read the config section on the respective download page. Changing and saving the settings shown here \nwill NOT override/reset your set screenshot rules.", - - //Warnings: - "warning.unnamed_rule": "Updating unnamed rule to be \"{{rule}}\"", - "warning.rule_overlap": "Rules \"{{rule_one}}\" and \"{{rule_two}}\" can over write one another.", - "warning.save_overlap": "Rule \"{{rule}}\" can overwrite files if you load different saves" + "Config.About.Header.title": "About This Config", + "Config.About.Description_1": "This Config includes all global settings as well as the snapshot rules for your FIRST set of \"SnapshotRules\" in the config.json file (days, weather, location, etc).", + "Config.About.Description_2": "Updating the rules here will update the first set of snapshot rules in your config.json file.", + "Config.About.Description_3": "Updating the rules here will NOT update/reset/override any additional snapshot rules you have set. To configure more than 1 set of snapshot rules, you must edit the config.json file located in your Mods folder.", + "Config.Effects.Header.title": "Global Settings", + "Config.Effects.Header.tooltip": "Settings that apply to all sets of snapshot rules.", + "Config.Effects.Auditory.title": "Auditory Effects", + "Config.Effects.Auditory.tooltip": "Toggles if a camera sound plays whenever a screenshot is taken.", + "Config.Effects.Visual.title": "Visual Effects", + "Config.Effects.Visual.tooltip": "Toggles if the screen flashes whenever a screenshot is taken.", + "Config.Effects.Notification.title": "Screenshot Notifications", + "Config.Effects.Notification.tooltip": "Toggles if a notification is displayed whenever a screenshot is taken.", + "Config.MainSettings.Header.title": "SnapshotRule Settings", + "Config.MainSettings.Header.tooltip": "Settings for the first set of rules inside the config.json \"SnapshotRules\".", + "Config.MainSettings.SnapshotRuleName.title": "Snapshot Rule Name", + "Config.MainSettings.SnapshotRuleName.tooltip": "Set the name for this set of snapshot rules. This text is displayed when a screenshot is taken, if ScreenshotNotifications is turned on.", + "Config.MainSettings.ZoomLevel.title": "Zoom Level", + "Config.MainSettings.ZoomLevel.tooltip": "Determines what size screenshot to take.", + "Config.MainSettings.SnapshotDirectory.title": "Snapshot Directory", + "Config.MainSettings.SnapshotDirectory.tooltip": "Location of snapshot directory.", + "Config.MainSettings.ShortcutKey.title": "Shortcut Key", + "Config.MainSettings.ShortcutKey.tooltip": "What key to press to trigger a screenshot (leave this as None if you want it to be automatic).", + "Config.MainSettings.StartTime.title": "Start Time", + "Config.MainSettings.StartTime.tooltip": "Earliest time the screenshot can be taken. Must be less than End Time.", + "Config.MainSettings.EndTime.title": "End Time", + "Config.MainSettings.EndTime.tooltip": "Latest time the screenshot can be taken. Must be more than Start Time.", + "Config.FileNameParts.Header1.title": "Snapshot File Name", + "Config.FileNameParts.Header1.tooltip": "Determines what the file name of each screenshot will be.", + "Config.FileNameParts.Default.title": "Default", + "Config.FileNameParts.Default.tooltip": "The default file name option (Date, FarmName, GameID, Location).", + "Config.FileNameParts.Date.title": "Date", + "Config.FileNameParts.Date.tooltip": "Have file name include Date.", + "Config.FileNameParts.FarmName.title": "FarmName", + "Config.FileNameParts.FarmName.tooltip": "Have file name include FarmName.", + "Config.FileNameParts.GameID.title": "GameID", + "Config.FileNameParts.GameID.tooltip": "Have file name include GameID.", + "Config.FileNameParts.Location.title": "Location", + "Config.FileNameParts.Location.tooltip": "Have file name include Location.", + "Config.FileNameParts.Weather.title": "Weather", + "Config.FileNameParts.Weather.tooltip": "Have file name include Weather.", + "Config.FileNameParts.PlayerName.title": "PlayerName", + "Config.FileNameParts.PlayerName.tooltip": "Have file name include PlayerName.", + "Config.FileNameParts.Time.title": "Time", + "Config.FileNameParts.Time.tooltip": "Have file name include Time.", + "Config.FileNameParts.UniqueID.title": "UniqueID", + "Config.FileNameParts.UniqueID.tooltip": "Have file name include UniqueID.", + "Config.Days.Header1.title": "Days (Seasons and Weekdays)", + "Config.Days.Header1.tooltip": "Customize day rules that determine what days a screenshot can be taken.", + "Config.Days.Header1.description": "Note: If you want to customize rules for specific days of the month (Day_1, Day_2, and so on) rather than just days of the week, you will need to edit the config.json file directly. Customizing on the individual day level is not currently supported from this UI Config.", + "Config.Days.Daily.Title": "Daily", + "Config.Days.Daily.Tooltip": "Toggles if screenshots should be taken daily.", + "Config.Days.AnyDay.Title": "AnyDay", + "Config.Days.AnyDay.Tooltip": "Toggles if screenshots can be taken on any day.", + "Config.Days.AnySeason.Title": "AnySeason", + "Config.Days.AnySeason.Tooltip": "Toggles if screenshots can be taken on any season.", + "Config.Days.Spring.Title": "Spring", + "Config.Days.Spring.Tooltip": "Toggles if screenshots can be taken in Spring.", + "Config.Days.Summer.Title": "Summer", + "Config.Days.Summer.Tooltip": "Toggles if screenshots can be taken in Summer.", + "Config.Days.Fall.Title": "Fall", + "Config.Days.Fall.Tooltip": "Toggles if screenshots can be taken in Fall.", + "Config.Days.Winter.Title": "Winter", + "Config.Days.Winter.Tooltip": "Toggles if screenshots can be taken in Winter.", + "Config.Days.FirstDayOfTheMonth.Title": "First Day Of The Month", + "Config.Days.FirstDayOfTheMonth.Tooltip": "Toggles if screenshots can be taken on first day of the month.", + "Config.Days.LastDayOfTheMonth.Title": "Last Day Of The Month", + "Config.Days.LastDayOfTheMonth.Tooltip": "Toggles if screenshots can be taken on last day of the month.", + "Config.Days.Mondays.Title": "Mondays", + "Config.Days.Mondays.Tooltip": "Toggles if screenshots can be taken on Mondays.", + "Config.Days.Tuesdays.Title": "Tuesdays", + "Config.Days.Tuesdays.Tooltip": "Toggles if screenshots can be taken on Tuesdays.", + "Config.Days.Wednesdays.Title": "Wednesdays", + "Config.Days.Wednesdays.Tooltip": "Toggles if screenshots can be taken on Wednesdays.", + "Config.Days.Thursdays.Title": "Thursdays", + "Config.Days.Thursdays.Tooltip": "Toggles if screenshots can be taken on Thursdays.", + "Config.Days.Fridays.Title": "Fridays", + "Config.Days.Fridays.Tooltip": "Toggles if screenshots can be taken on Fridays.", + "Config.Days.Saturdays.Title": "Saturdays", + "Config.Days.Saturdays.Tooltip": "Toggles if screenshots can be taken on Saturdays.", + "Config.Days.Sundays.Title": "Sundays", + "Config.Days.Sundays.Tooltip": "Toggles if screenshots can be taken on Sundays.", + "Config.Days.Header2.Title": "Days (Days of the Month)", + "Config.Days.Header2.Tooltip": "Customize day rules that determine what days a screenshot can be taken (page 2).", + "Config.Days.Day_01.Title": "Day_1", + "Config.Days.Day_01.Tooltip": "Toggles if screenshots can be taken on Day_1", + "Config.Days.Day_02.Title": "Day_2", + "Config.Days.Day_02.Tooltip": "Toggles if screenshots can be taken on Day_2", + "Config.Days.Day_03.Title": "Day_3", + "Config.Days.Day_03.Tooltip": "Toggles if screenshots can be taken on Day_3", + "Config.Days.Day_04.Title": "Day_4", + "Config.Days.Day_04.Tooltip": "Toggles if screenshots can be taken on Day_4", + "Config.Days.Day_05.Title": "Day_5", + "Config.Days.Day_05.Tooltip": "Toggles if screenshots can be taken on Day_5", + "Config.Days.Day_06.Title": "Day_6", + "Config.Days.Day_06.Tooltip": "Toggles if screenshots can be taken on Day_6", + "Config.Days.Day_07.Title": "Day_7", + "Config.Days.Day_07.Tooltip": "Toggles if screenshots can be taken on Day_7", + "Config.Days.Day_08.Title": "Day_8", + "Config.Days.Day_08.Tooltip": "Toggles if screenshots can be taken on Day_8", + "Config.Days.Day_09.Title": "Day_9", + "Config.Days.Day_09.Tooltip": "Toggles if screenshots can be taken on Day_9", + "Config.Days.Day_1.Title": "Day_1", + "Config.Days.Day_1.Tooltip": "Toggles if screenshots can be taken on Day_1", + "Config.Days.Day_2.Title": "Day_2", + "Config.Days.Day_2.Tooltip": "Toggles if screenshots can be taken on Day_2", + "Config.Days.Day_3.Title": "Day_3", + "Config.Days.Day_3.Tooltip": "Toggles if screenshots can be taken on Day_3", + "Config.Days.Day_4.Title": "Day_4", + "Config.Days.Day_4.Tooltip": "Toggles if screenshots can be taken on Day_4", + "Config.Days.Day_5.Title": "Day_5", + "Config.Days.Day_5.Tooltip": "Toggles if screenshots can be taken on Day_5", + "Config.Days.Day_6.Title": "Day_6", + "Config.Days.Day_6.Tooltip": "Toggles if screenshots can be taken on Day_6", + "Config.Days.Day_7.Title": "Day_7", + "Config.Days.Day_7.Tooltip": "Toggles if screenshots can be taken on Day_7", + "Config.Days.Day_8.Title": "Day_8", + "Config.Days.Day_8.Tooltip": "Toggles if screenshots can be taken on Day_8", + "Config.Days.Day_9.Title": "Day_9", + "Config.Days.Day_9.Tooltip": "Toggles if screenshots can be taken on Day_9", + "Config.Days.Day_10.Title": "Day_10", + "Config.Days.Day_10.Tooltip": "Toggles if screenshots can be taken on Day_10", + "Config.Days.Day_11.Title": "Day_11", + "Config.Days.Day_11.Tooltip": "Toggles if screenshots can be taken on Day_11", + "Config.Days.Day_12.Title": "Day_12", + "Config.Days.Day_12.Tooltip": "Toggles if screenshots can be taken on Day_12", + "Config.Days.Day_13.Title": "Day_13", + "Config.Days.Day_13.Tooltip": "Toggles if screenshots can be taken on Day_13", + "Config.Days.Day_14.Title": "Day_14", + "Config.Days.Day_14.Tooltip": "Toggles if screenshots can be taken on Day_14", + "Config.Days.Day_15.Title": "Day_15", + "Config.Days.Day_15.Tooltip": "Toggles if screenshots can be taken on Day_15", + "Config.Days.Day_16.Title": "Day_16", + "Config.Days.Day_16.Tooltip": "Toggles if screenshots can be taken on Day_16", + "Config.Days.Day_17.Title": "Day_17", + "Config.Days.Day_17.Tooltip": "Toggles if screenshots can be taken on Day_17", + "Config.Days.Day_18.Title": "Day_18", + "Config.Days.Day_18.Tooltip": "Toggles if screenshots can be taken on Day_18", + "Config.Days.Day_19.Title": "Day_19", + "Config.Days.Day_19.Tooltip": "Toggles if screenshots can be taken on Day_19", + "Config.Days.Day_20.Title": "Day_20", + "Config.Days.Day_20.Tooltip": "Toggles if screenshots can be taken on Day_20", + "Config.Days.Day_21.Title": "Day_21", + "Config.Days.Day_21.Tooltip": "Toggles if screenshots can be taken on Day_21", + "Config.Days.Day_22.Title": "Day_22", + "Config.Days.Day_22.Tooltip": "Toggles if screenshots can be taken on Day_22", + "Config.Days.Day_23.Title": "Day_23", + "Config.Days.Day_23.Tooltip": "Toggles if screenshots can be taken on Day_23", + "Config.Days.Day_24.Title": "Day_24", + "Config.Days.Day_24.Tooltip": "Toggles if screenshots can be taken on Day_24", + "Config.Days.Day_25.Title": "Day_25", + "Config.Days.Day_25.Tooltip": "Toggles if screenshots can be taken on Day_25", + "Config.Days.Day_26.Title": "Day_26", + "Config.Days.Day_26.Tooltip": "Toggles if screenshots can be taken on Day_26", + "Config.Days.Day_27.Title": "Day_27", + "Config.Days.Day_27.Tooltip": "Toggles if screenshots can be taken on Day_27", + "Config.Days.Day_28.Title": "Day_28", + "Config.Days.Day_28.Tooltip": "Toggles if screenshots can be taken on Day_28", + "Config.Weather.Header.title": "Weather", + "Config.Weather.Header.tooltip": "Weather conditions that screenshots are allowed to be taken in.", + "Config.Weather.Any.Title": "Any", + "Config.Weather.Any.Tooltip": "Toggles if any weather is acceptable for screenshots.", + "Config.Weather.Sunny.Title": "Sunny", + "Config.Weather.Sunny.Tooltip": "Toggles if screenshots can be taken in sunny weather.", + "Config.Weather.Rainy.Title": "Rainy", + "Config.Weather.Rainy.Tooltip": "Toggles if screenshots can be taken in rainy weather.", + "Config.Weather.Windy.Title": "Windy", + "Config.Weather.Windy.Tooltip": "Toggles if screenshots can be taken in windy weather.", + "Config.Weather.Stormy.Title": "Stormy", + "Config.Weather.Stormy.Tooltip": "Toggles if screenshots can be taken in stormy weather.", + "Config.Weather.Snowy.Title": "Snowy", + "Config.Weather.Snowy.Tooltip": "Toggles if screenshots can be taken in snowy weather.", + "Config.Location.Header.title": "Location", + "Config.Location.Header.tooltip": "Locations that screenshots are allowed to be taken in.", + "Config.Location.Any.title": "Any", + "Config.Location.Any.tooltip": "Toggles if any location is acceptable for screenshots.", + "Config.Location.Farm.title": "Farm", + "Config.Location.Farm.tooltip": "Toggles if screenshots can be taken at Farm location.", + "Config.Location.Farmhouse.title": "Farmhouse", + "Config.Location.Farmhouse.tooltip": "Toggles if screenshots can be taken at Farmhouse location.", + "Config.Location.Greenhouse.title": "Greenhouse", + "Config.Location.Greenhouse.tooltip": "Toggles if screenshots can be taken at Greenhouse location.", + "Config.Location.Beach.title": "Beach", + "Config.Location.Beach.tooltip": "Toggles if screenshots can be taken at Beach location.", + "Config.Location.FarmCave.title": "FarmCave", + "Config.Location.FarmCave.tooltip": "Toggles if screenshots can be taken at FarmCave location.", + "Config.Location.Cellar.title": "Cellar", + "Config.Location.Cellar.tooltip": "Toggles if screenshots can be taken at Cellar location.", + "Config.Location.Desert.title": "Desert", + "Config.Location.Desert.tooltip": "Toggles if screenshots can be taken at Desert location.", + "Config.Location.Museum.title": "Museum", + "Config.Location.Museum.tooltip": "Toggles if screenshots can be taken at Museum location.", + "Config.Location.CommunityCenter.title": "CommunityCenter", + "Config.Location.CommunityCenter.tooltip": "Toggles if screenshots can be taken at CommunityCenter location.", + "Config.Location.Mountain.title": "Mountain", + "Config.Location.Mountain.tooltip": "Toggles if screenshots can be taken at Mountain location.", + "Config.Location.IslandWest.title": "IslandWest", + "Config.Location.IslandWest.tooltip": "Toggles if screenshots can be taken at IslandWest location.", + "Config.Location.IslandFarmhouse.title": "IslandFarmhouse", + "Config.Location.IslandFarmhouse.tooltip": "Toggles if screenshots can be taken at IslandFarmhouse location.", + "Config.Location.IslandFieldOffice.title": "IslandFieldOffice", + "Config.Location.IslandFieldOffice.tooltip": "Toggles if screenshots can be taken at IslandFieldOffice location.", + "Config.Location.Unknown.title": "Unknown", + "Config.Location.Unknown.tooltip": "Toggles if screenshots can be taken at Unknown location.", + "Warning.unnamed_rule": "Updating unnamed rule to be \"{{rule}}\"", + "Warning.rule_overlap": "Rules \"{{rule_one}}\" and \"{{rule_two}}\" can over write one another.", + "Warning.save_overlap": "Rule \"{{rule}}\" can overwrite files if you load different saves" } diff --git a/DailyScreenshot/manifest.json b/DailyScreenshot/manifest.json index e668c71..7dd3217 100644 --- a/DailyScreenshot/manifest.json +++ b/DailyScreenshot/manifest.json @@ -1,7 +1,7 @@ { "Name": "Daily Screenshot", "Author": "CompSciLauren", - "Version": "2.0.2-unoffical", + "Version": "3.0.0", "Description": "Automatically takes a daily screenshot of your entire farm.", "UniqueID": "CompSciLauren.DailyScreenshot", "EntryDll": "DailyScreenshot.dll", diff --git a/DailyScreenshot/packages.config b/DailyScreenshot/packages.config index 46629f8..810a28e 100644 --- a/DailyScreenshot/packages.config +++ b/DailyScreenshot/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/DailyScreenshot/warning_test_files/days_result.txt b/DailyScreenshot/warning_test_files/days_result.txt deleted file mode 100644 index f30ff89..0000000 --- a/DailyScreenshot/warning_test_files/days_result.txt +++ /dev/null @@ -1,298 +0,0 @@ -Left hand side and right hand side should never both contain a "No Overlap" rule -Make sure each day only overlaps with the correct season and day of week -Make sure each day of week does not overlap with any other day of week -Make sure each season does not overlap with another seasons -Make sure FirstDayOfTheMonth only overlaps Day 1, Sundays and All for that season -Make sure LastDayOfTheMonth only overlaps Day 28, Saturdays and All for that season - -Example: -Rule Days Inactive AnyDay will not trigger as no season is set. Days="AnyDay" -Rule Days Inactive AnySeason will not trigger as no day is set. Days="AnySeason" -Rules "Days No Overlap Season Spring Day 1" and "Days Overlap Season Spring Sundays" can over write one another. -Rules "Days No Overlap Season Spring Day 1" and "Days Overlap Season Spring FirstDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Spring Day 1" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 2" and "Days Overlap Season Spring Mondays" can over write one another. -Rules "Days No Overlap Season Spring Day 2" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 3" and "Days Overlap Season Spring Tuesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 3" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 4" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 4" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 5" and "Days Overlap Season Spring Thursdays" can over write one another. -Rules "Days No Overlap Season Spring Day 5" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 6" and "Days Overlap Season Spring Fridays" can over write one another. -Rules "Days No Overlap Season Spring Day 6" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 7" and "Days Overlap Season Spring Saturdays" can over write one another. -Rules "Days No Overlap Season Spring Day 7" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 8" and "Days Overlap Season Spring Sundays" can over write one another. -Rules "Days No Overlap Season Spring Day 8" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 9" and "Days Overlap Season Spring Mondays" can over write one another. -Rules "Days No Overlap Season Spring Day 9" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 10" and "Days Overlap Season Spring Tuesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 10" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 11" and "Days No Overlap Season Spring Day 12" can over write one another. -Rules "Days No Overlap Season Spring Day 11" and "Days No Overlap Season Spring Day 13" can over write one another. -Rules "Days No Overlap Season Spring Day 11" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 11" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 12" and "Days No Overlap Season Spring Day 13" can over write one another. -Rules "Days No Overlap Season Spring Day 12" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 12" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 13" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 13" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 14" and "Days Overlap Season Spring Saturdays" can over write one another. -Rules "Days No Overlap Season Spring Day 14" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 15" and "Days Overlap Season Spring Sundays" can over write one another. -Rules "Days No Overlap Season Spring Day 15" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 16" and "Days Overlap Season Spring Mondays" can over write one another. -Rules "Days No Overlap Season Spring Day 16" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 17" and "Days Overlap Season Spring Tuesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 17" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 18" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 18" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 19" and "Days Overlap Season Spring Thursdays" can over write one another. -Rules "Days No Overlap Season Spring Day 19" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 20" and "Days Overlap Season Spring Fridays" can over write one another. -Rules "Days No Overlap Season Spring Day 20" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 21" and "Days Overlap Season Spring Saturdays" can over write one another. -Rules "Days No Overlap Season Spring Day 21" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 22" and "Days Overlap Season Spring Sundays" can over write one another. -Rules "Days No Overlap Season Spring Day 22" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 23" and "Days Overlap Season Spring Mondays" can over write one another. -Rules "Days No Overlap Season Spring Day 23" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 24" and "Days Overlap Season Spring Tuesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 24" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 25" and "Days Overlap Season Spring Wednesdays" can over write one another. -Rules "Days No Overlap Season Spring Day 25" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 26" and "Days Overlap Season Spring Thursdays" can over write one another. -Rules "Days No Overlap Season Spring Day 26" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 27" and "Days Overlap Season Spring Fridays" can over write one another. -Rules "Days No Overlap Season Spring Day 27" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Spring Day 28" and "Days Overlap Season Spring Saturdays" can over write one another. -Rules "Days No Overlap Season Spring Day 28" and "Days Overlap Season Spring LastDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Spring Day 28" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Sundays" and "Days Overlap Season Spring FirstDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Spring Sundays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Mondays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Tuesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Wednesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Thursdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Fridays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring Saturdays" and "Days Overlap Season Spring LastDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Spring Saturdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring FirstDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Spring LastDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 1" and "Days Overlap Season Summer Sundays" can over write one another. -Rules "Days No Overlap Season Summer Day 1" and "Days Overlap Season Summer FirstDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Summer Day 1" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 2" and "Days Overlap Season Summer Mondays" can over write one another. -Rules "Days No Overlap Season Summer Day 2" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 3" and "Days Overlap Season Summer Tuesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 3" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 4" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 4" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 5" and "Days Overlap Season Summer Thursdays" can over write one another. -Rules "Days No Overlap Season Summer Day 5" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 6" and "Days Overlap Season Summer Fridays" can over write one another. -Rules "Days No Overlap Season Summer Day 6" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 7" and "Days Overlap Season Summer Saturdays" can over write one another. -Rules "Days No Overlap Season Summer Day 7" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 8" and "Days Overlap Season Summer Sundays" can over write one another. -Rules "Days No Overlap Season Summer Day 8" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 9" and "Days Overlap Season Summer Mondays" can over write one another. -Rules "Days No Overlap Season Summer Day 9" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 10" and "Days Overlap Season Summer Tuesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 10" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 11" and "Days No Overlap Season Summer Day 12" can over write one another. -Rules "Days No Overlap Season Summer Day 11" and "Days No Overlap Season Summer Day 13" can over write one another. -Rules "Days No Overlap Season Summer Day 11" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 11" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 12" and "Days No Overlap Season Summer Day 13" can over write one another. -Rules "Days No Overlap Season Summer Day 12" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 12" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 13" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 13" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 14" and "Days Overlap Season Summer Saturdays" can over write one another. -Rules "Days No Overlap Season Summer Day 14" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 15" and "Days Overlap Season Summer Sundays" can over write one another. -Rules "Days No Overlap Season Summer Day 15" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 16" and "Days Overlap Season Summer Mondays" can over write one another. -Rules "Days No Overlap Season Summer Day 16" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 17" and "Days Overlap Season Summer Tuesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 17" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 18" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 18" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 19" and "Days Overlap Season Summer Thursdays" can over write one another. -Rules "Days No Overlap Season Summer Day 19" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 20" and "Days Overlap Season Summer Fridays" can over write one another. -Rules "Days No Overlap Season Summer Day 20" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 21" and "Days Overlap Season Summer Saturdays" can over write one another. -Rules "Days No Overlap Season Summer Day 21" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 22" and "Days Overlap Season Summer Sundays" can over write one another. -Rules "Days No Overlap Season Summer Day 22" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 23" and "Days Overlap Season Summer Mondays" can over write one another. -Rules "Days No Overlap Season Summer Day 23" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 24" and "Days Overlap Season Summer Tuesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 24" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 25" and "Days Overlap Season Summer Wednesdays" can over write one another. -Rules "Days No Overlap Season Summer Day 25" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 26" and "Days Overlap Season Summer Thursdays" can over write one another. -Rules "Days No Overlap Season Summer Day 26" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 27" and "Days Overlap Season Summer Fridays" can over write one another. -Rules "Days No Overlap Season Summer Day 27" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Summer Day 28" and "Days Overlap Season Summer Saturdays" can over write one another. -Rules "Days No Overlap Season Summer Day 28" and "Days Overlap Season Summer LastDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Summer Day 28" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Sundays" and "Days Overlap Season Summer FirstDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Summer Sundays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Mondays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Tuesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Wednesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Thursdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Fridays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer Saturdays" and "Days Overlap Season Summer LastDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Summer Saturdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer FirstDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Summer LastDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 1" and "Days Overlap Season Fall Sundays" can over write one another. -Rules "Days No Overlap Season Fall Day 1" and "Days Overlap Season Fall FirstDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Fall Day 1" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 2" and "Days Overlap Season Fall Mondays" can over write one another. -Rules "Days No Overlap Season Fall Day 2" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 3" and "Days Overlap Season Fall Tuesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 3" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 4" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 4" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 5" and "Days Overlap Season Fall Thursdays" can over write one another. -Rules "Days No Overlap Season Fall Day 5" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 6" and "Days Overlap Season Fall Fridays" can over write one another. -Rules "Days No Overlap Season Fall Day 6" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 7" and "Days Overlap Season Fall Saturdays" can over write one another. -Rules "Days No Overlap Season Fall Day 7" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 8" and "Days Overlap Season Fall Sundays" can over write one another. -Rules "Days No Overlap Season Fall Day 8" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 9" and "Days Overlap Season Fall Mondays" can over write one another. -Rules "Days No Overlap Season Fall Day 9" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 10" and "Days Overlap Season Fall Tuesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 10" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 11" and "Days No Overlap Season Fall Day 12" can over write one another. -Rules "Days No Overlap Season Fall Day 11" and "Days No Overlap Season Fall Day 13" can over write one another. -Rules "Days No Overlap Season Fall Day 11" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 11" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 12" and "Days No Overlap Season Fall Day 13" can over write one another. -Rules "Days No Overlap Season Fall Day 12" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 12" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 13" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 13" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 14" and "Days Overlap Season Fall Saturdays" can over write one another. -Rules "Days No Overlap Season Fall Day 14" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 15" and "Days Overlap Season Fall Sundays" can over write one another. -Rules "Days No Overlap Season Fall Day 15" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 16" and "Days Overlap Season Fall Mondays" can over write one another. -Rules "Days No Overlap Season Fall Day 16" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 17" and "Days Overlap Season Fall Tuesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 17" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 18" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 18" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 19" and "Days Overlap Season Fall Thursdays" can over write one another. -Rules "Days No Overlap Season Fall Day 19" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 20" and "Days Overlap Season Fall Fridays" can over write one another. -Rules "Days No Overlap Season Fall Day 20" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 21" and "Days Overlap Season Fall Saturdays" can over write one another. -Rules "Days No Overlap Season Fall Day 21" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 22" and "Days Overlap Season Fall Sundays" can over write one another. -Rules "Days No Overlap Season Fall Day 22" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 23" and "Days Overlap Season Fall Mondays" can over write one another. -Rules "Days No Overlap Season Fall Day 23" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 24" and "Days Overlap Season Fall Tuesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 24" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 25" and "Days Overlap Season Fall Wednesdays" can over write one another. -Rules "Days No Overlap Season Fall Day 25" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 26" and "Days Overlap Season Fall Thursdays" can over write one another. -Rules "Days No Overlap Season Fall Day 26" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 27" and "Days Overlap Season Fall Fridays" can over write one another. -Rules "Days No Overlap Season Fall Day 27" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Fall Day 28" and "Days Overlap Season Fall Saturdays" can over write one another. -Rules "Days No Overlap Season Fall Day 28" and "Days Overlap Season Fall LastDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Fall Day 28" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Sundays" and "Days Overlap Season Fall FirstDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Fall Sundays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Mondays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Tuesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Wednesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Thursdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Fridays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall Saturdays" and "Days Overlap Season Fall LastDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Fall Saturdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall FirstDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Fall LastDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 1" and "Days Overlap Season Winter Sundays" can over write one another. -Rules "Days No Overlap Season Winter Day 1" and "Days Overlap Season Winter FirstDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Winter Day 1" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 2" and "Days Overlap Season Winter Mondays" can over write one another. -Rules "Days No Overlap Season Winter Day 2" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 3" and "Days Overlap Season Winter Tuesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 3" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 4" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 4" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 5" and "Days Overlap Season Winter Thursdays" can over write one another. -Rules "Days No Overlap Season Winter Day 5" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 6" and "Days Overlap Season Winter Fridays" can over write one another. -Rules "Days No Overlap Season Winter Day 6" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 7" and "Days Overlap Season Winter Saturdays" can over write one another. -Rules "Days No Overlap Season Winter Day 7" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 8" and "Days Overlap Season Winter Sundays" can over write one another. -Rules "Days No Overlap Season Winter Day 8" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 9" and "Days Overlap Season Winter Mondays" can over write one another. -Rules "Days No Overlap Season Winter Day 9" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 10" and "Days Overlap Season Winter Tuesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 10" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 11" and "Days No Overlap Season Winter Day 12" can over write one another. -Rules "Days No Overlap Season Winter Day 11" and "Days No Overlap Season Winter Day 13" can over write one another. -Rules "Days No Overlap Season Winter Day 11" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 11" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 12" and "Days No Overlap Season Winter Day 13" can over write one another. -Rules "Days No Overlap Season Winter Day 12" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 12" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 13" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 13" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 14" and "Days Overlap Season Winter Saturdays" can over write one another. -Rules "Days No Overlap Season Winter Day 14" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 15" and "Days Overlap Season Winter Sundays" can over write one another. -Rules "Days No Overlap Season Winter Day 15" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 16" and "Days Overlap Season Winter Mondays" can over write one another. -Rules "Days No Overlap Season Winter Day 16" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 17" and "Days Overlap Season Winter Tuesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 17" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 18" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 18" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 19" and "Days Overlap Season Winter Thursdays" can over write one another. -Rules "Days No Overlap Season Winter Day 19" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 20" and "Days Overlap Season Winter Fridays" can over write one another. -Rules "Days No Overlap Season Winter Day 20" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 21" and "Days Overlap Season Winter Saturdays" can over write one another. -Rules "Days No Overlap Season Winter Day 21" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 22" and "Days Overlap Season Winter Sundays" can over write one another. -Rules "Days No Overlap Season Winter Day 22" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 23" and "Days Overlap Season Winter Mondays" can over write one another. -Rules "Days No Overlap Season Winter Day 23" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 24" and "Days Overlap Season Winter Tuesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 24" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 25" and "Days Overlap Season Winter Wednesdays" can over write one another. -Rules "Days No Overlap Season Winter Day 25" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 26" and "Days Overlap Season Winter Thursdays" can over write one another. -Rules "Days No Overlap Season Winter Day 26" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 27" and "Days Overlap Season Winter Fridays" can over write one another. -Rules "Days No Overlap Season Winter Day 27" and "Days Overlap All" can over write one another. -Rules "Days No Overlap Season Winter Day 28" and "Days Overlap Season Winter Saturdays" can over write one another. -Rules "Days No Overlap Season Winter Day 28" and "Days Overlap Season Winter LastDayOfTheMonth" can over write one another. -Rules "Days No Overlap Season Winter Day 28" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Sundays" and "Days Overlap Season Winter FirstDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Winter Sundays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Mondays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Tuesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Wednesdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Thursdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Fridays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter Saturdays" and "Days Overlap Season Winter LastDayOfTheMonth" can over write one another. -Rules "Days Overlap Season Winter Saturdays" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter FirstDayOfTheMonth" and "Days Overlap All" can over write one another. -Rules "Days Overlap Season Winter LastDayOfTheMonth" and "Days Overlap All" can over write one another. diff --git a/DailyScreenshot/warning_test_files/location_result.txt b/DailyScreenshot/warning_test_files/location_result.txt deleted file mode 100644 index b2c8cc4..0000000 --- a/DailyScreenshot/warning_test_files/location_result.txt +++ /dev/null @@ -1,17 +0,0 @@ -Times can be ignored. -Left hand side and right hand side should never both contain a "No Overlap" rule - -Example: -Rule Location Inactive will not trigger as no location is set. Location="Location_None" -Rules "Location No Overlap Farm" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Farmhouse" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Greenhouse" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Beach" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap FarmCave" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Cellar" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Desert" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Museum" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap CommunityCenter" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Mountain" and "Location Overlap Any" can over write one another. -Rules "Location No Overlap Unknown" and "Location Overlap Any" can over write one another. - diff --git a/DailyScreenshot/warning_test_files/time_result.txt b/DailyScreenshot/warning_test_files/time_result.txt deleted file mode 100644 index 21a96e4..0000000 --- a/DailyScreenshot/warning_test_files/time_result.txt +++ /dev/null @@ -1,13 +0,0 @@ -Times can be ignored. -Left hand side and right hand side should never both contain a "No Overlap" rule - -Example: - -Setting limits on StartTime and EndTime for rule "Time Overlap Fixup 1300 to 1099" -Swapping StartTime and EndTime for rule "Time Overlap Fixup 1300 to 1099" -StartTime is now "1140" amd EmdTime is now "1300" for rule "Time Overlap Fixup 1300 to 1099" -Setting limits on StartTime and EndTime for rule "Time No Overlap Directory" -Swapping StartTime and EndTime for rule "Time No Overlap Directory" -StartTime is now "1140" amd EmdTime is now "1300" for rule "Time No Overlap Directory" -Rules "Time No Overlap Morning" and "Time Overlap Fixup 1300 to 1099" can over write one another. -Rules "Location No Overlap Afternoon" and "Time Overlap Fixup 1300 to 1099" can over write one another. diff --git a/DailyScreenshot/warning_test_files/weather_result.txt b/DailyScreenshot/warning_test_files/weather_result.txt deleted file mode 100644 index 0208d17..0000000 --- a/DailyScreenshot/warning_test_files/weather_result.txt +++ /dev/null @@ -1,10 +0,0 @@ -Times can be ignored. -Left hand side and right hand side should never both contain a "No Overlap" rule - -Example: -Rule Weather Inactive will not trigger as no weather is set. Weather="Weather_None" -Rules "Weather No Overlap Sunny" and "Weather Overlap Any" can over write one another. -Rules "Weather No Overlap Rainy" and "Weather Overlap Any" can over write one another. -Rules "Weather No Overlap Windy" and "Weather Overlap Any" can over write one another. -Rules "Weather No Overlap Stormy" and "Weather Overlap Any" can over write one another. -Rules "Weather No Overlap Snowy" and "Weather Overlap Any" can over write one another. \ No newline at end of file diff --git a/LICENSE b/LICENSE index 81415b1..aca69c6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 Lauren Stephenson +Copyright (c) 2020 Lauren Vu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b5e0e45..c2d43c5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![logo](FeatureImage.png) -# Daily Screenshot v2.0 +# Daily Screenshot v3.0.0 > A Stardew Valley mod that automatically takes a screenshot of your entire farm at the start of each day. @@ -24,10 +24,11 @@ For Android users, releases can be found at the following websites: - Screenshots are sent to your StardewValley/Screenshots folder, with each save file getting its own "FarmName-Screenshots" folder. Screenshots between multiple save files will not get mixed up. - Easily access the screenshots in-game by scrolling to the bottom of the "Options" tab in the menu and clicking the "Open Destination Folder" button. - Super easy to gather screenshots to create a GIF that shows how your farm changes over time! GIF makers can be found online, such as [ezgif GIF maker](https://ezgif.com/maker). Here is an [example](example.gif). -- Keeps the screenshots in the correct order to make creating the GIF easier. This is achieved by naming each screenshot with a "year-season-day.png" numerical format. For example, on Year 1, Winter, Day 3, the screenshot would be named "01-04-03.png". +- Keeps the screenshots in the correct order to make creating the GIF easier. This is achieved by naming each screenshot with a "year-season-day.png" numerical format. For example, on Year 1, Winter, Day 3, the screenshot would be named "01-04-03.png". This is configurable. - Keyboard shortcut that takes a screenshot when pressed (set to "None" by default). -- Can choose to disable automatic screenshots for rainy weather days (takes a screenshot every day regardless of weather by default). +- Can choose to disable automatic screenshots for certain weather conditions, like rainy days (takes a screenshot every day regardless of weather by default). - Custom configuration options, including ability to add multiple custom rules! See below. +- Compatible with the ["Generic Mod Config Menu" mod](https://www.nexusmods.com/stardewvalley/mods/5098), which adds an in-game UI for easily updating the config. ## Installation @@ -43,12 +44,15 @@ For Android users, releases can be found at the following websites: ## Configuration File -> Note: Older configuration files will automatically be upgraded to the newer format +> Note: Older configuration files (from prior to v2.0) will automatically be upgraded to the newer format. You can add as many rules as you would like. The config file looks like: -```json +``` json { + "AuditoryEffects": true, + "VisualEffects": true, + "ScreenshotNotifications": true, "SnapshotRules": [ { "Name": "Daily Farm Picture", @@ -82,16 +86,19 @@ You can add as many rules as you would like. The config file looks like: } ``` -Triggers are things that must happen for a screenshot to take place. All of the items must be true. Automatic screen shots (without a key press) happen at most once a day. +Triggers are things that must happen for a screenshot to take place. All of the items must be true. Automatic screenshots (without a key press) happen at most once a day. | Setting | Description | Type | Default Setting | | --------|------- | -------- | -------- | -| Name | What to show when taking a picture. Rules without a name will be given a name automatically | string | Unnamed Rule # | -| ZoomLevel | How should the picture be scaled. Any number between 0.01 and 1.0. The smaller the number, the smaller the picture (smaller pictures take less disk space) | float | 0.25 | -| Directory | Where to save the picture.

Default or empty means the standard Startdew Valley screenshot directory.

**Note: Remember to use a double backslash on Windows.** | string | Default | -| Filename | A combination of values for the filename, separated by commas.

Possible values are: None, Date, FarmName, GameID, Location, Weather, PlayerName, Time, UniqueID.

Will follow the pattern: {FarmName}-{GameID}/{Location}/{Weather}/{Player Name}-{Date}-{Time}-{Unique ID} | Enum | Date, FarmName, GameID, Location | -| Days | A combination of values for the days and seasons to take a screen shot.

Possible values are: Day_1 .. Day_28, Sundays, Mondays, Tuesdays, Wednesdays, Thursdays, Fridays, Saturdays, FirstDayOfTheMonth, LastDayOfTheMonth, Spring, Summer, Fall, Winter, AnySeason, AnyDay, Daily.

**Note: It is important if not using the daily value to specify season(s) and day(s) or a picture will not be taken.**

Example: To take a picture on the 15th of fall use Day_15, Fall. | enum | Daily | +| AuditoryEffects | Global setting (applies to all screenshots). Whether a camera sound plays whenever a screenshot is taken. | bool | true | +| VisualEffects | Global setting (applies to all screenshots). Whether the screen flashes whenever a screenshot is taken. | bool | true | +| ScreenshotNotifications | Global setting (applies to all screenshots). Whether a notification is displayed whenever a screenshot is taken. | bool | true | +| Name | What to show when taking a picture. Rules without a name will be given a name automatically. | string | Unnamed Rule # | +| ZoomLevel | How should the picture be scaled. Any number between 0.01 and 1.0. The smaller the number, the smaller the picture (smaller pictures take less disk space). | float | 0.25 | +| Directory | Where to save the picture.

Default or empty means the standard Startdew Valley screenshot directory.

**Note: Make sure to use a double backslash on Windows.** | string | Default | +| FileName | A combination of values for the filename, separated by commas.

Possible values are: None, Date, FarmName, GameID, Location, Weather, PlayerName, Time, UniqueID.

Will follow the pattern: {FarmName}-{GameID}/{Location}/{Weather}/{Player Name}-{Date}-{Time}-{Unique ID} | enum | Date, FarmName, GameID, Location | +| Days | A combination of values for the days and seasons to take a screenshot.

Possible values are: Day_1 .. Day_28, Mondays, Tuesdays, Wednesdays, Thursdays, Fridays, Saturdays, Sundays, FirstDayOfTheMonth, LastDayOfTheMonth, Spring, Summer, Fall, Winter, AnySeason, AnyDay, Daily.

**Note: It is important if not using the daily value to specify season(s) and day(s) or a picture will not be taken.**

Example: To take a picture on the 15th of fall use Day_15, Fall. | enum | Daily | | Weather| A combination of values for the weather.

Possible values are: Sunny, Rainy, Windy, Stormy, Snowy, Any. | enum | Any | | Location | A combination of locations to take a picture. Picture will be taken when going to one of these locations.

Possible values are: Farm, Farmhouse, Greenhouse, Beach, FarmCave, Cellar, Desert, Museum, CommunityCenter, Mountain, IslandWest, IslandFarmhouse, IslandFieldOffice, Unknown, Any.

**Note: Unknown is not any of the listed locations.** | enum | Any | | Key | Key press to look for to take a picture. If set the picture will be taken on demand and not automatically.

Possible values: [List of possible keybindings](https://stardewvalleywiki.com/Modding:Player_Guide/Key_Bindings) | enum | None |