diff --git a/GreenhouseSprinklers/GreenhouseSprinklers.sln b/GreenhouseSprinklers/GreenhouseSprinklers.sln index 4e96476..514f214 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers.sln +++ b/GreenhouseSprinklers/GreenhouseSprinklers.sln @@ -8,13 +8,19 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {96DF27DA-EA8F-4637-A642-90717C166693}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {96DF27DA-EA8F-4637-A642-90717C166693}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96DF27DA-EA8F-4637-A642-90717C166693}.Debug|x86.ActiveCfg = Debug|x86 + {96DF27DA-EA8F-4637-A642-90717C166693}.Debug|x86.Build.0 = Debug|x86 {96DF27DA-EA8F-4637-A642-90717C166693}.Release|Any CPU.ActiveCfg = Release|Any CPU {96DF27DA-EA8F-4637-A642-90717C166693}.Release|Any CPU.Build.0 = Release|Any CPU + {96DF27DA-EA8F-4637-A642-90717C166693}.Release|x86.ActiveCfg = Release|x86 + {96DF27DA-EA8F-4637-A642-90717C166693}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/FileController.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/FileController.cs index c8c788e..a2800fb 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/FileController.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/FileController.cs @@ -1,4 +1,6 @@ using System; +using Bpendragon.GreenhouseSprinklers.Data; +using StardewModdingAPI; using StardewModdingAPI.Events; namespace Bpendragon.GreenhouseSprinklers @@ -7,13 +9,12 @@ partial class ModEntry { internal void OnLoad(object sender, SaveLoadedEventArgs e) { - - throw new NotImplementedException(); + Data = Helper.Data.ReadJsonFile($"data/{Constants.SaveFolderName}.json") ?? new ModData(); } internal void OnSave(object sender, SavingEventArgs e) { - this.Helper.Data.WriteJsonFile("data.json", Data); + Helper.Data.WriteJsonFile($"data/{Constants.SaveFolderName}.json", Data); } } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/MenuController.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/MenuController.cs index 21cdc95..a3583d8 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/MenuController.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/MenuController.cs @@ -16,32 +16,30 @@ partial class ModEntry private readonly int MaxOccupantsID = -794738; private void OnMenuChanged(object sender, MenuChangedEventArgs e) { + if (e.NewMenu == null) return; //if menu was closed this should fix it. Monitor.Log($"Menu type {e.NewMenu.GetType()} opened"); if (!Context.IsWorldReady) return; + if (!(e.NewMenu is CarpenterMenu)) return; int level = 1; if (Data.FirstUpgrade) level = 2; if (Data.SecondUpgrade) level = 3; - if (Data.FinalUpgrade) return; //we've built the final upgrade, - if (e.NewMenu is CarpenterMenu) + if (Data.FinalUpgrade) { - Monitor.Log("In the Carpenter Menu, here's hoping"); - IList blueprints = this.Helper.Reflection - .GetField>(e.NewMenu, "blueprints") - .GetValue(); - - blueprints.Add(this.GetBluePrint(level)); - Monitor.Log("Blueprint should be added"); - if (!blueprints.Any(p => p.name == "Stable" && p.maxOccupants != this.MaxOccupantsID)) - { - Farm farm = Game1.getFarm(); - - int cabins = farm.getNumberBuildingsConstructed("Cabin"); - int stables = farm.getNumberBuildingsConstructed("Stable"); - if (stables < cabins + 1) - blueprints.Add(new BluePrint("Stable")); - } + Monitor.Log("We've got the final upgrade, skipping"); + return; //we've built the final upgrade, } + Monitor.Log("In the Carpenter Menu, here's hoping"); + IList blueprints = Helper.Reflection + .GetField>(e.NewMenu, "blueprints") + .GetValue(); + + blueprints.Add(GetBluePrint(level)); + Monitor.Log("Blueprint should be added"); + } + private void OnBuildingListChanged(object sender, BuildingListChangedEventArgs e) + { + Monitor.Log("Building list changed"); } private BluePrint GetBluePrint(int level) @@ -76,17 +74,17 @@ private BluePrint GetBluePrint(int level) buildMats = BuildMaterials3; days = cost.SecondUpgrade.DaysToConstruct; } - return new BluePrint("Stable") + return new BluePrint("Silo") { displayName = "Sprinkler System Upgrade", description = desc, moneyRequired = money, - nameOfBuildingToUpgrade = "Greenhouse", + nameOfBuildingToUpgrade = "Silo", itemsRequired = buildMats, daysToConstruct = days, - maxOccupants = this.MaxOccupantsID + maxOccupants = MaxOccupantsID, + blueprintType = "Upgrades" }; } - } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/TimeOfDayController.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/TimeOfDayController.cs index 603bbc5..348c739 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/TimeOfDayController.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/Controllers/TimeOfDayController.cs @@ -1,5 +1,7 @@ using StardewModdingAPI.Events; -using System; +using StardewModdingAPI; +using StardewValley; +using System.Linq; namespace Bpendragon.GreenhouseSprinklers { @@ -7,30 +9,45 @@ partial class ModEntry { internal void OnDayStart(object sender, DayStartedEventArgs e) { - WaterGreenHouse(); - this.Monitor.Log("Day starting"); + Monitor.Log("Day starting"); if (Data.FirstUpgrade) { - this.Monitor.Log("first upgrade owned, watering"); - + Monitor.Log("first upgrade owned, watering"); + WaterGreenHouse(); + } + if(Data.FinalUpgrade) + { + Monitor.Log("final ugrade owned, watering entire farm"); + WaterFarm(); } } internal void OnDayEnding(object sender, DayEndingEventArgs e) { - this.Monitor.Log("Day ending"); - if (Data.SecondUpgrade) + Monitor.Log("Day ending"); + if (Data.SecondUpgrade) //run these checks before we check for upgrades { - this.Monitor.Log("second upgrade owned, watering"); + Monitor.Log("second upgrade owned, watering"); WaterGreenHouse(); } - } - - internal void OnTimeChanged(object sender, TimeChangedEventArgs e) - { - throw new NotImplementedException(); - } - - + if (Data.FinalUpgrade) + { + Monitor.Log("final ugrade owned, watering entire farm"); + WaterFarm(); + } + if (!Data.FinalUpgrade) + { + var silo = Game1.getFarm().buildings.Where(x => x.buildingType == "Silo" && x.daysUntilUpgrade == 1).FirstOrDefault(); + if (silo != null) + { + Monitor.Log("Silo \"Upgrade\" completed, moving to next level"); + silo.daysUntilUpgrade.Value = 0; + if (!Data.FirstUpgrade) Data.FirstUpgrade = true; + else if (!Data.SecondUpgrade) Data.SecondUpgrade = true; + else if (!Data.FinalUpgrade) Data.FinalUpgrade = true; + else Monitor.Log("Tried to Upgrade sprinklers while all upgrades already completed", LogLevel.Error); + } + } + } } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/GreenhouseSprinklers.csproj b/GreenhouseSprinklers/GreenhouseSprinklers/GreenhouseSprinklers.csproj index 35f1196..2e7dd8e 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/GreenhouseSprinklers.csproj +++ b/GreenhouseSprinklers/GreenhouseSprinklers/GreenhouseSprinklers.csproj @@ -32,9 +32,33 @@ prompt 4 + + true + bin\x86\Debug\ + DEBUG;TRACE + pdbonly + x86 + 7.3 + prompt + + + true + bin\x86\Release\ + TRACE + true + pdbonly + x86 + 7.3 + prompt + + + + + + @@ -48,7 +72,6 @@ - @@ -60,16 +83,16 @@ - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/ModEntry.cs b/GreenhouseSprinklers/GreenhouseSprinklers/ModEntry.cs index 05ae429..7930d7d 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/ModEntry.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/ModEntry.cs @@ -1,8 +1,11 @@ using Bpendragon.GreenhouseSprinklers.Data; + using StardewModdingAPI; + using StardewValley; using StardewValley.Objects; using StardewValley.TerrainFeatures; + using System.Collections.Generic; using System.Linq; @@ -13,31 +16,34 @@ partial class ModEntry : Mod private ModConfig Config; private ModData Data; public Dictionary BuildMaterials1 { get; set; } = new Dictionary(); - public Dictionary BuildMaterials2 { get; set; } = new Dictionary(); + public Dictionary BuildMaterials2 { get; set; } = new Dictionary(); public Dictionary BuildMaterials3 { get; set; } = new Dictionary(); public Difficulty difficulty; public override void Entry(IModHelper helper) { - this.Config = this.Helper.ReadConfig(); + Config = Helper.ReadConfig(); + + SetBuildMaterials(); - Data = this.Helper.Data.ReadJsonFile($"data/{Constants.SaveFolderName}.json") ?? new ModData(); - - helper.Events.GameLoop.DayStarted += OnDayStart; - helper.Events.GameLoop.DayEnding += OnDayEnding; - helper.Events.GameLoop.Saving += OnSave; - //helper.Events.GameLoop.SaveLoaded += OnLoad; - helper.Events.Display.MenuChanged += OnMenuChanged; + + + helper.Events.GameLoop.DayStarted += OnDayStart; + helper.Events.GameLoop.DayEnding += OnDayEnding; + helper.Events.GameLoop.Saving += OnSave; + helper.Events.GameLoop.SaveLoaded += OnLoad; + helper.Events.Display.MenuChanged += OnMenuChanged; + helper.Events.World.BuildingListChanged += OnBuildingListChanged; } private void SetBuildMaterials() { var diff = Config.DifficultySettings.First(x => x.Difficulty == Config.SelectedDifficulty); - this.difficulty = Config.SelectedDifficulty; - if(null == diff) + difficulty = Config.SelectedDifficulty; + if (null == diff) { Monitor.Log("Difficulty Settings not found or set, mod will not work properly", LogLevel.Error); } @@ -58,15 +64,15 @@ private void WaterGreenHouse() var gh = Game1.getLocationFromName("Greenhouse"); if (gh != null) { - this.Monitor.Log("Greenhouse Located"); + Monitor.Log("Greenhouse Located"); } else { - this.Monitor.Log("No Greenhouse found", StardewModdingAPI.LogLevel.Warn); + Monitor.Log("No Greenhouse found", LogLevel.Warn); } int i = 0; var terrainfeatures = gh.terrainFeatures.Values; - this.Monitor.Log($"Found {terrainfeatures.Count()} terrainfeatures in Greenhouse"); + Monitor.Log($"Found {terrainfeatures.Count()} terrainfeatures in Greenhouse"); foreach (var tf in terrainfeatures) { @@ -76,10 +82,10 @@ private void WaterGreenHouse() i++; } } - this.Monitor.Log($"{i} tiles watered."); + Monitor.Log($"{i} tiles watered."); int j = 0; - this.Monitor.Log("Watering pots in greenhouse"); + Monitor.Log("Watering pots in greenhouse"); foreach (IndoorPot pot in gh.objects.Values.OfType()) { if (pot.hoeDirt.Value is HoeDirt dirt) @@ -90,7 +96,39 @@ private void WaterGreenHouse() } } - this.Monitor.Log($"{j} Pots Watered"); + Monitor.Log($"{j} Pots Watered"); + } + + private void WaterFarm() + { + var farm = Game1.getFarm(); + int i = 0; + var terrainFeatures = farm.terrainFeatures.Values; + Monitor.Log($"Found {terrainFeatures.Count()} terrainfeatures in Farm"); + + foreach (var tf in terrainFeatures) + { + if (tf is HoeDirt dirt) + { + dirt.state.Value = HoeDirt.watered; + i++; + } + } + Monitor.Log($"{i} tiles watered."); + + int j = 0; + Monitor.Log("Watering pots on farm"); + foreach (IndoorPot pot in farm.objects.Values.OfType()) + { + if (pot.hoeDirt.Value is HoeDirt dirt) + { + dirt.state.Value = HoeDirt.watered; + pot.showNextIndex.Value = true; + j++; + } + } + + Monitor.Log($"{j} Pots Watered"); } } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModConfig.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModConfig.cs index 4d22f57..6b80819 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModConfig.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModConfig.cs @@ -24,7 +24,7 @@ class ModConfig public List DifficultySettings = new List() { new UpgradeCost( - new SingleUpgradeCost(SprinklerType.Basic, 5, 10000, 0, 0, 0), + new SingleUpgradeCost(SprinklerType.Basic, 5, 10000, 0, 0, 1), new SingleUpgradeCost(SprinklerType.Quality, 5, 15000, 1, 0, 1), new SingleUpgradeCost(SprinklerType.Iridium, 10, 25000, 5, 0, 3), Difficulty.Easy @@ -32,7 +32,7 @@ class ModConfig new UpgradeCost( new SingleUpgradeCost(SprinklerType.Quality, 5 , 20000, 1, 2, 1), - new SingleUpgradeCost(SprinklerType.Iridium, 5 , 30000, 5, 5, 1), + new SingleUpgradeCost(SprinklerType.Iridium, 5 , 30000, 5, 5, 3), new SingleUpgradeCost(SprinklerType.Iridium, 20, 50000, 10, 10, 3), Difficulty.Medium ), @@ -57,12 +57,12 @@ class SingleUpgradeCost public SingleUpgradeCost(SprinklerType SprinklerType, int NumSprinklers, int GoldAmount, int NumBatteries, int Hearts, int Days) { - this.Sprinkler = SprinklerType; - this.SprinklerCount = NumSprinklers; - this.Gold = GoldAmount; - this.Batteries = NumBatteries; + Sprinkler = SprinklerType; + SprinklerCount = NumSprinklers; + Gold = GoldAmount; + Batteries = NumBatteries; this.Hearts = Hearts; - this.DaysToConstruct = Days; + DaysToConstruct = Days; } } @@ -78,7 +78,7 @@ public UpgradeCost(SingleUpgradeCost FirstUpgrade, SingleUpgradeCost SecondUpgra this.FirstUpgrade = FirstUpgrade; this.SecondUpgrade = SecondUpgrade; this.FinalUpgrade = FinalUpgrade; - this.Difficulty = difficulty; + Difficulty = difficulty; } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModData.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModData.cs index 17a336e..154ebda 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModData.cs +++ b/GreenhouseSprinklers/GreenhouseSprinklers/Models/ModData.cs @@ -5,7 +5,5 @@ class ModData public bool FirstUpgrade { get; set; } = false; public bool SecondUpgrade { get; set; } = false; public bool FinalUpgrade { get; set; } = false; - public bool IsBuilding { get; set; } = false; //Future update maybe - public int? DaysBuilding { get; set; } = null; } } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/Models/Upgrades.cs b/GreenhouseSprinklers/GreenhouseSprinklers/Models/Upgrades.cs deleted file mode 100644 index 7a9449b..0000000 --- a/GreenhouseSprinklers/GreenhouseSprinklers/Models/Upgrades.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Bpendragon.GreenhouseSprinklers.Models -{ - class Upgrades - { - } -} diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/manifest.json b/GreenhouseSprinklers/GreenhouseSprinklers/manifest.json index 792de06..efe4a86 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/manifest.json +++ b/GreenhouseSprinklers/GreenhouseSprinklers/manifest.json @@ -1,10 +1,9 @@ { - "Name": "Greenhouse Sprinklers", - "Author": "Bpendragon", - "Version": "1.0.0", - "Description": "Pay Clint off to add automatic sprinklers to the greenhouse, allowing 100% utilization", - "UniqueID": "Bpendragon.GreenhouseSprinklers", - "EntryDll": "GreenhouseSprinklers.dll", - "MinimumApiVersion": "3.1.0", - "UpdateKeys": [] + "Name": "Greenhouse Sprinklers", + "Author": "Bpendragon", + "Version": "1.0.0", + "Description": "Pay Robin off to add automatic sprinklers to the greenhouse, allowing 100% utilization", + "UniqueID": "Bpendragon.GreenhouseSprinklers", + "EntryDll": "GreenhouseSprinklers.dll", + "UpdateKeys": [ "Nexus:7456" ] } diff --git a/GreenhouseSprinklers/GreenhouseSprinklers/packages.config b/GreenhouseSprinklers/GreenhouseSprinklers/packages.config index ef4b285..c060e12 100644 --- a/GreenhouseSprinklers/GreenhouseSprinklers/packages.config +++ b/GreenhouseSprinklers/GreenhouseSprinklers/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file