From 2448f7ca01afd14b959b9011f5d458b91c2b04f8 Mon Sep 17 00:00:00 2001 From: Joshua Navarro Date: Sat, 5 Jan 2019 23:25:50 -0800 Subject: [PATCH] Added additional costs to recipes such as magic, health, stamina, and gold. --- .../Revitalize/Framework/Crafting/Recipe.cs | 12 ++-- .../Revitalize/Framework/Crafting/StatCost.cs | 59 +++++++++++++++++++ .../Framework/Player/Managers/MagicManager.cs | 21 +++++++ .../Framework/Player/Managers/SittingInfo.cs | 1 - .../Revitalize/Framework/Player/PlayerInfo.cs | 2 + GeneralMods/Revitalize/ModCore.cs | 10 ++-- GeneralMods/Revitalize/Revitalize.csproj | 6 ++ 7 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 GeneralMods/Revitalize/Framework/Crafting/StatCost.cs create mode 100644 GeneralMods/Revitalize/Framework/Player/Managers/MagicManager.cs diff --git a/GeneralMods/Revitalize/Framework/Crafting/Recipe.cs b/GeneralMods/Revitalize/Framework/Crafting/Recipe.cs index 40906ab2..dcb607c4 100644 --- a/GeneralMods/Revitalize/Framework/Crafting/Recipe.cs +++ b/GeneralMods/Revitalize/Framework/Crafting/Recipe.cs @@ -21,13 +21,14 @@ namespace Revitalize.Framework.Crafting public string outputDescription; public string outputName; + public StatCost statCost; public Recipe() { } /// Constructor for single item output. /// All the ingredients required to make the output. /// The item given as output with how many - public Recipe(Dictionary inputs, KeyValuePair output) + public Recipe(Dictionary inputs, KeyValuePair output, StatCost StatCost=null) { this.ingredients = inputs; this.DisplayItem = output.Key; @@ -37,15 +38,17 @@ namespace Revitalize.Framework.Crafting { [output.Key] = output.Value }; + this.statCost = StatCost ?? new StatCost(); } - public Recipe(Dictionary inputs, Dictionary outputs, string OutputName, string OutputDescription, Item DisplayItem = null) + public Recipe(Dictionary inputs, Dictionary outputs, string OutputName, string OutputDescription, Item DisplayItem = null,StatCost StatCost=null) { this.ingredients = inputs; this.outputs = outputs; this.outputName = OutputName; this.outputDescription = OutputDescription; this.DisplayItem = DisplayItem; + this.statCost = StatCost ?? new StatCost(); } /// Checks if a player contains all recipe ingredients. @@ -90,7 +93,7 @@ namespace Revitalize.Framework.Crafting public void consume(ref List from) { - if (!this.InventoryContainsAllIngredient(from)) + if (this.InventoryContainsAllIngredient(from)==false) return; InventoryManager manager = new InventoryManager(from); @@ -154,11 +157,12 @@ namespace Revitalize.Framework.Crafting Game1.player.Items = playerItems; //Set the items to be post consumption. foreach (Item I in outPutItems) Game1.player.addItemToInventory(I); //Add all items produced. + this.statCost.payCost(); } public bool PlayerCanCraft() { - return this.PlayerContainsAllIngredients(); + return this.PlayerContainsAllIngredients() && this.statCost.canSafelyAffordCost(); } public bool CanCraft(List items) diff --git a/GeneralMods/Revitalize/Framework/Crafting/StatCost.cs b/GeneralMods/Revitalize/Framework/Crafting/StatCost.cs new file mode 100644 index 00000000..682f8c42 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Crafting/StatCost.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StardewValley; + +namespace Revitalize.Framework.Crafting +{ + public class StatCost + { + int health; + int stamina; + int magic; + int gold; + + public StatCost(int Stamina = 0, int Health = 0, int Gold = 0, int Magic = 0){ + this.stamina = Stamina; + this.health = Health; + this.gold = Gold; + this.magic = Magic; + } + + /// + /// Checks if the player can afford the cost but allows for player to collapse. + /// + /// + public bool canAffordCost() { + + if (Game1.player.stamina >= this.stamina && Game1.player.health >= this.health && Game1.player.Money >= this.gold && Revitalize.ModCore.playerInfo.magicManager.currentMagic >= this.magic) return true; + return false; + + } + + /// + /// Same as affording the cost but prevents the player from collapsing. + /// + /// + public bool canSafelyAffordCost() + { + if (Game1.player.stamina > this.stamina && Game1.player.health > this.health && Game1.player.Money >= this.gold && Revitalize.ModCore.playerInfo.magicManager.currentMagic >= this.magic) return true; + return false; + } + + /// + /// Consume all necessary components for this cost. + /// + public void payCost() + { + if (canSafelyAffordCost()) + { + Game1.player.stamina -= this.stamina; + Game1.player.health -= this.health; + Game1.player.Money = Game1.player.Money - this.gold; + Revitalize.ModCore.playerInfo.magicManager.currentMagic -= this.magic; + } + } + } +} diff --git a/GeneralMods/Revitalize/Framework/Player/Managers/MagicManager.cs b/GeneralMods/Revitalize/Framework/Player/Managers/MagicManager.cs new file mode 100644 index 00000000..1ad80afe --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Player/Managers/MagicManager.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Revitalize.Framework.Player.Managers +{ + public class MagicManager + { + public int maxMagic; + public int currentMagic; + + public MagicManager() + { + this.currentMagic = 100; + this.maxMagic = 100; + } + + } +} diff --git a/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs b/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs index c2688648..27b53a7b 100644 --- a/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs +++ b/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs @@ -7,7 +7,6 @@ namespace Revitalize.Framework.Player.Managers // TODO: // - Make chair // - animate player better - // - have it where when player is sitting on chair it is passable so it can't be destoryed underneath public class SittingInfo { /// If the player is currently sitting. diff --git a/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs b/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs index 3c0dc322..275e6355 100644 --- a/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs +++ b/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs @@ -5,10 +5,12 @@ namespace Revitalize.Framework.Player public class PlayerInfo { public SittingInfo sittingInfo; + public MagicManager magicManager; public PlayerInfo() { this.sittingInfo = new SittingInfo(); + this.magicManager = new MagicManager(); } public void update() diff --git a/GeneralMods/Revitalize/ModCore.cs b/GeneralMods/Revitalize/ModCore.cs index d5d18eb8..f24478ea 100644 --- a/GeneralMods/Revitalize/ModCore.cs +++ b/GeneralMods/Revitalize/ModCore.cs @@ -149,16 +149,16 @@ namespace Revitalize Recipe pie = new Recipe(new Dictionary() { [bigObject] = 1 - }, new KeyValuePair(new Furniture(3, Vector2.Zero), 1)); + }, new KeyValuePair(new Furniture(3, Vector2.Zero), 1),new StatCost(100,50,0,0)); new InventoryItem(bigObject, 100, 1).addToNPCShop("Gus"); Game1.player.addItemToInventory(bigObject); - //if (pie.PlayerCanCraft()) - //{ - // pie.craft(); - //} + if (pie.PlayerCanCraft()) + { + pie.craft(); + } } public static void log(object message) diff --git a/GeneralMods/Revitalize/Revitalize.csproj b/GeneralMods/Revitalize/Revitalize.csproj index dc74ff89..94c75140 100644 --- a/GeneralMods/Revitalize/Revitalize.csproj +++ b/GeneralMods/Revitalize/Revitalize.csproj @@ -47,6 +47,7 @@ + @@ -57,8 +58,13 @@ + + + + +