diff --git a/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletColored.png b/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletColored.png new file mode 100644 index 00000000..0d11814a Binary files /dev/null and b/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletColored.png differ diff --git a/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletOutline.png b/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletOutline.png new file mode 100644 index 00000000..5b0f943f Binary files /dev/null and b/GeneralMods/Revitalize/Content/Graphics/Menus/EnergyMenu/DropletOutline.png differ diff --git a/GeneralMods/Revitalize/Content/Graphics/Objects/Machines/WaterPump.png b/GeneralMods/Revitalize/Content/Graphics/Objects/Machines/WaterPump.png new file mode 100644 index 00000000..2bff5f48 Binary files /dev/null and b/GeneralMods/Revitalize/Content/Graphics/Objects/Machines/WaterPump.png differ diff --git a/GeneralMods/Revitalize/Framework/Managers/FluidManagerV2.cs b/GeneralMods/Revitalize/Framework/Managers/FluidManagerV2.cs index 9158f1af..ffec6dc4 100644 --- a/GeneralMods/Revitalize/Framework/Managers/FluidManagerV2.cs +++ b/GeneralMods/Revitalize/Framework/Managers/FluidManagerV2.cs @@ -79,7 +79,7 @@ namespace Revitalize.Framework.Managers /// /// The remaining capacity on the tank. /// - + public int remainingCapacity { get @@ -109,6 +109,21 @@ namespace Revitalize.Framework.Managers return this.amount == 0; } } + + public string getFluidDisplayString() + { + StringBuilder b = new StringBuilder(); + if (this.fluid != null) + { + b.Append(this.fluid.name); + b.Append(": "); + } + b.Append(this.amount); + b.Append("/"); + b.Append(this.capacity); + return b.ToString(); + } + /// /// Constructor. /// @@ -165,11 +180,9 @@ namespace Revitalize.Framework.Managers if (this.CanRecieveThisFluid(L)) { if (this.fluid == null) this.fluid = L.Copy(); - else - { - int intakeAmount=Math.Min(this.remainingCapacity, Amount); - this.amount = this.amount + intakeAmount; - } + int intakeAmount = Math.Min(this.remainingCapacity, Amount); + this.amount = this.amount + intakeAmount; + } else return; } @@ -288,7 +301,7 @@ namespace Revitalize.Framework.Managers /// /// /// Can both input tanks store the same Fluid? - public FluidManagerV2(int Capacity, bool OnlyOutput, Enums.FluidInteractionType LiquidInteractionType, bool AllowDoubleInput=false) + public FluidManagerV2(int Capacity, bool OnlyOutput, Enums.FluidInteractionType LiquidInteractionType, bool AllowDoubleInput = false) { if (OnlyOutput) { @@ -333,13 +346,13 @@ namespace Revitalize.Framework.Managers int remainingAmount = Amount; if (this.allowDoubleInput) { - if (this.inputTank1.CanRecieveThisFluid(L) && remainingAmount>0) + if (this.inputTank1.CanRecieveThisFluid(L) && remainingAmount > 0) { int allowedAmount = this.inputTank1.remainingCapacity; this.inputTank1.intakeFluid(L, remainingAmount); remainingAmount -= allowedAmount; } - if (this.inputTank2.CanRecieveThisFluid(L)&& remainingAmount>0) + if (this.inputTank2.CanRecieveThisFluid(L) && remainingAmount > 0) { int allowedAmount = this.inputTank2.remainingCapacity; this.inputTank2.intakeFluid(L, remainingAmount); @@ -350,7 +363,7 @@ namespace Revitalize.Framework.Managers else { - if (this.inputTank1.CanRecieveThisFluid(L) && remainingAmount > 0 && this.inputTank2.DoesTankContainThisFluid(L)==false) + if (this.inputTank1.CanRecieveThisFluid(L) && remainingAmount > 0 && this.inputTank2.DoesTankContainThisFluid(L) == false) { int allowedAmount = this.inputTank1.remainingCapacity; this.inputTank1.intakeFluid(L, remainingAmount); @@ -381,15 +394,15 @@ namespace Revitalize.Framework.Managers int requiredAmount = Amount; int tank1Amount = this.inputTank1.GetAmountOfFluidInThisTank(L); - int tank2Amount= this.inputTank2.GetAmountOfFluidInThisTank(L); - if (tank1Amount > 0 && requiredAmount>0) + int tank2Amount = this.inputTank2.GetAmountOfFluidInThisTank(L); + if (tank1Amount > 0 && requiredAmount > 0) { this.inputTank1.consumeFluid(requiredAmount); requiredAmount -= tank1Amount; this.requiresUpdate = true; } - if(tank2Amount>0 && requiredAmount > 0) + if (tank2Amount > 0 && requiredAmount > 0) { this.inputTank2.consumeFluid(requiredAmount); requiredAmount -= tank2Amount; @@ -434,7 +447,7 @@ namespace Revitalize.Framework.Managers } else { - if(this.inputTank1.CanRecieveThisFluid(L) && this.inputTank2.DoesTankContainThisFluid(L) == false) + if (this.inputTank1.CanRecieveThisFluid(L) && this.inputTank2.DoesTankContainThisFluid(L) == false) { return this.inputTank1.GetAmountOfFluidThisTankCanReceieve(L); } @@ -473,7 +486,7 @@ namespace Revitalize.Framework.Managers } } return false; - + } /// @@ -486,7 +499,7 @@ namespace Revitalize.Framework.Managers if (Other.canRecieveThisFluid(this.outputTank.fluid)) { int actualAmount = Math.Min(this.outputTank.amount, Other.getMaxAmountOfFluidIntakePossible(this.outputTank.fluid)); - Other.intakeFluid(this.outputTank.fluid,actualAmount); + Other.intakeFluid(this.outputTank.fluid, actualAmount); this.drainOutputTank(actualAmount); } } @@ -504,7 +517,7 @@ namespace Revitalize.Framework.Managers public FluidManagerV2 Copy() { - return new FluidManagerV2(this.outputTank.capacity, this.onlyOutput,this.fluidInteractionType,this.allowDoubleInput); + return new FluidManagerV2(this.outputTank.capacity, this.onlyOutput, this.fluidInteractionType, this.allowDoubleInput); } } } diff --git a/GeneralMods/Revitalize/Framework/Menus/Machines/MachineSummaryMenu.cs b/GeneralMods/Revitalize/Framework/Menus/Machines/MachineSummaryMenu.cs index d812cff6..79f7a64d 100644 --- a/GeneralMods/Revitalize/Framework/Menus/Machines/MachineSummaryMenu.cs +++ b/GeneralMods/Revitalize/Framework/Menus/Machines/MachineSummaryMenu.cs @@ -51,6 +51,12 @@ namespace Revitalize.Framework.Menus.Machines private AnimatedButton storageButton; private Vector2 storageRemainingDisplayLocation; + + private AnimatedButton inputFluidTank1Button; + private AnimatedButton inputFluidTank2Button; + private AnimatedButton outputFluidTankButton; + private Vector2 fluidDisplayLocation; + private int requiredEnergyPer10Min; private EnergyManager energy @@ -89,6 +95,7 @@ namespace Revitalize.Framework.Menus.Machines this.timeDisplayLocation = new Vector2(this.xPositionOnScreen + (this.width * .1f), this.yPositionOnScreen + (this.height * .25f)); this.energyRequiredDisplayLocation = this.timeDisplayLocation + new Vector2(0, 64); this.storageRemainingDisplayLocation = this.energyRequiredDisplayLocation + new Vector2(0, 64); + this.fluidDisplayLocation = this.storageRemainingDisplayLocation + new Vector2(0, 64); this.energyPosition = new Vector2(this.xPositionOnScreen + this.width - 128, this.yPositionOnScreen + this.height - 72 * 4); this.batteryBackground = new AnimatedButton(new StardustCore.Animations.AnimatedSprite("BatteryFrame", this.energyPosition, new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus.EnergyMenu", "BatteryFrame"), new StardustCore.Animations.Animation(0, 0, 32, 64)), Color.White), new Rectangle(0, 0, 32, 64), 4f); @@ -99,6 +106,12 @@ namespace Revitalize.Framework.Menus.Machines this.energyRequiredButton=new AnimatedButton(new StardustCore.Animations.AnimatedSprite("Energy Required", this.energyRequiredDisplayLocation, new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus.EnergyMenu", "LightningBolt"), new StardustCore.Animations.Animation(0, 0, 16, 16)), Color.White), new Rectangle(0, 0, 16, 16), 2f); this.storageButton = new AnimatedButton(new StardustCore.Animations.AnimatedSprite("Storage Remaining", this.storageRemainingDisplayLocation, new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus", "Chest"), new StardustCore.Animations.Animation(0, 0, 16, 32)), Color.White), new Rectangle(0, 0, 16, 32), 1f); + + this.inputFluidTank1Button = new AnimatedButton(new StardustCore.Animations.AnimatedSprite("Input 1 fluid:", this.fluidDisplayLocation, new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus.EnergyMenu",this.objectSource.info.fluidManager.inputTank1.fluid!=null? "DropletColored" : "DropletOutline"), new StardustCore.Animations.Animation(0, 0, 16, 16)), this.objectSource.info.fluidManager.inputTank1.fluid!=null ? this.objectSource.info.fluidManager.inputTank1.fluid.color : Color.White), new Rectangle(0, 0, 16, 16), 2f); + this.inputFluidTank2Button = new AnimatedButton(new StardustCore.Animations.AnimatedSprite("Input 2 fluid:", this.fluidDisplayLocation+new Vector2(0,64), new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus.EnergyMenu", this.objectSource.info.fluidManager.inputTank2.fluid!=null ? "DropletColored" : "DropletOutline"), new StardustCore.Animations.Animation(0, 0, 16, 16)), this.objectSource.info.fluidManager.inputTank2.fluid!=null ? this.objectSource.info.fluidManager.inputTank2.fluid.color : Color.White), new Rectangle(0, 0, 16, 16), 2f); + ModCore.log(this.objectSource.info.fluidManager.outputTank.fluid != null ? "Color of fluid:" + this.objectSource.info.fluidManager.outputTank.fluid.color.ToString() : "Color is null!"); + this.outputFluidTankButton = new AnimatedButton(new StardustCore.Animations.AnimatedSprite("Output fluid:", this.fluidDisplayLocation+new Vector2(0,128), new StardustCore.Animations.AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Menus.EnergyMenu", this.objectSource.info.fluidManager.outputTank.fluid!=null ? "DropletColored" : "DropletOutline"), new StardustCore.Animations.Animation(0, 0, 16, 16)), this.objectSource.info.fluidManager.outputTank.fluid!=null ? this.objectSource.info.fluidManager.outputTank.fluid.color : Color.White), new Rectangle(0, 0, 16, 16), 2f); + this.requiredEnergyPer10Min = RequiredEnergyPer10Min; } @@ -160,20 +173,38 @@ namespace Revitalize.Framework.Menus.Machines { this.batteryBackground.draw(b, 1f, 1f); this.energyMeterColorSwap(); - b.Draw(this.energyTexture, new Rectangle((int)this.energyPosition.X + (int)(11 * this.batteryBackground.scale), (int)this.energyPosition.Y + (int)(18 * this.batteryBackground.scale)+ (int)(46 * this.batteryBackground.scale), (int)((9 * this.batteryBackground.scale)), (int)(46 * this.batteryBackground.scale * this.energy.energyPercentRemaining)), new Rectangle(0, 0, 1, 1), Color.White, 0f, new Vector2(0f,1f), SpriteEffects.None, 0.2f); + b.Draw(this.energyTexture, new Rectangle((int)this.energyPosition.X + (int)(11 * this.batteryBackground.scale), (int)this.energyPosition.Y + (int)(18 * this.batteryBackground.scale) + (int)(46 * this.batteryBackground.scale), (int)((9 * this.batteryBackground.scale)), (int)(46 * this.batteryBackground.scale * this.energy.energyPercentRemaining)), new Rectangle(0, 0, 1, 1), Color.White, 0f, new Vector2(0f, 1f), SpriteEffects.None, 0.2f); this.battergyEnergyGuage.draw(b, 1f, 1f); this.energyRequiredButton.draw(b); - b.DrawString(Game1.smallFont, this.requiredEnergyPer10Min+" E/10m", this.energyRequiredDisplayLocation + new Vector2(0, 36f), Color.Black); + b.DrawString(Game1.smallFont, this.requiredEnergyPer10Min + " E/10m", this.energyRequiredDisplayLocation + new Vector2(0, 36f), Color.Black); } if (this.objectSource.info.inventory.HasInventory) { this.storageButton.draw(b); - b.DrawString(Game1.smallFont, "Storage remaining: "+ (this.objectSource.info.inventory.capacity-this.objectSource.info.inventory.ItemCount)+"/"+this.objectSource.info.inventory.capacity, this.storageRemainingDisplayLocation + new Vector2(0, 32f), Color.Black); + b.DrawString(Game1.smallFont, "Storage remaining: " + (this.objectSource.info.inventory.capacity - this.objectSource.info.inventory.ItemCount) + "/" + this.objectSource.info.inventory.capacity, this.storageRemainingDisplayLocation + new Vector2(0, 32f), Color.Black); } - + if (this.objectSource.info.fluidManager.InteractsWithFluids) + { + if (this.objectSource.info.fluidManager.inputTank1.capacity > 0) + { + this.inputFluidTank1Button.draw(b); + b.DrawString(Game1.smallFont, this.objectSource.info.fluidManager.inputTank1.getFluidDisplayString(), this.fluidDisplayLocation + new Vector2(32, 0f), Color.Black); + } + if (this.objectSource.info.fluidManager.inputTank2.capacity > 0) + { + this.inputFluidTank2Button.draw(b); + b.DrawString(Game1.smallFont, this.objectSource.info.fluidManager.inputTank2.getFluidDisplayString(), this.fluidDisplayLocation + new Vector2(32, 64f), Color.Black); + } + if (this.objectSource.info.fluidManager.outputTank.capacity > 0) + { + //ModCore.log("Color:" + this.objectSource.GetFluidManager().outputTank.fluid.color); + this.outputFluidTankButton.draw(b); + b.DrawString(Game1.smallFont, this.objectSource.info.fluidManager.outputTank.getFluidDisplayString(), this.fluidDisplayLocation + new Vector2(32, 128f), Color.Black); + } + } this.objectSource.drawFullyInMenu(b, new Vector2((int)(this.xPositionOnScreen + (this.width / 2) - (this.itemDisplayOffset.X / 2)), (int)(this.yPositionOnScreen + 128f)), .24f); Vector2 nameOffset = Game1.dialogueFont.MeasureString(this.objectSource.DisplayName); diff --git a/GeneralMods/Revitalize/Framework/Objects/Machines/WaterPump.cs b/GeneralMods/Revitalize/Framework/Objects/Machines/WaterPump.cs new file mode 100644 index 00000000..5118dbd4 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Objects/Machines/WaterPump.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using PyTK.CustomElementHandler; +using Revitalize.Framework.Objects.InformationFiles; +using Revitalize.Framework.Utilities; +using StardewValley; + +namespace Revitalize.Framework.Objects.Machines +{ + public class WaterPump: Machine + { + + public WaterPump() { } + + public WaterPump(CustomObjectData PyTKData, BasicItemInformation info, List ProducedResources = null, int EnergyRequiredPer10Minutes = 0, int TimeToProduce = 0, bool UpdatesContainer = false, string CraftingBook = "") : base(PyTKData, info) + { + this.producedResources = ProducedResources ?? new List(); + this.energyRequiredPer10Minutes = EnergyRequiredPer10Minutes; + this.timeToProduce = TimeToProduce; + this.updatesContainerObjectForProduction = UpdatesContainer; + this.MinutesUntilReady = TimeToProduce; + this.craftingRecipeBook = CraftingBook; + this.createStatusBubble(); + + } + + public WaterPump(CustomObjectData PyTKData, BasicItemInformation info, Vector2 TileLocation, List ProducedResources = null, int EnergyRequiredPer10Minutes = 0, int TimeToProduce = 0, bool UpdatesContainer = false, string CraftingBook = "", MultiTiledObject obj = null) : base(PyTKData, info, TileLocation) + { + this.containerObject = obj; + this.producedResources = ProducedResources ?? new List(); + this.energyRequiredPer10Minutes = EnergyRequiredPer10Minutes; + this.timeToProduce = TimeToProduce; + this.updatesContainerObjectForProduction = UpdatesContainer; + this.MinutesUntilReady = TimeToProduce; + this.craftingRecipeBook = CraftingBook; + this.createStatusBubble(); + } + + public WaterPump(CustomObjectData PyTKData, BasicItemInformation info, Vector2 TileLocation, Vector2 offsetKey, List ProducedResources = null, int EnergyRequiredPer10Minutes = 0, int TimeToProduce = 0, bool UpdatesContainer = false, string CraftingBook = "", MultiTiledObject obj = null) : base(PyTKData, info, TileLocation) + { + this.offsetKey = offsetKey; + this.containerObject = obj; + this.producedResources = ProducedResources ?? new List(); + this.energyRequiredPer10Minutes = EnergyRequiredPer10Minutes; + this.timeToProduce = TimeToProduce; + this.updatesContainerObjectForProduction = UpdatesContainer; + this.MinutesUntilReady = TimeToProduce; + this.craftingRecipeBook = CraftingBook; + this.createStatusBubble(); + } + + public override void updateWhenCurrentLocation(GameTime time, GameLocation environment) + { + base.updateWhenCurrentLocation(time, environment); + + this.animationManager.prepareForNextUpdateTick(); + } + + + public override bool minutesElapsed(int minutes, GameLocation environment) + { + + this.updateInfo(); + //ModCore.log(this.info.animationManager.currentAnimationName); + + if (this.updatesContainerObjectForProduction) + { + //ModCore.log("Update container object for production!"); + //this.MinutesUntilReady -= minutes; + int remaining = minutes; + //ModCore.log("Minutes elapsed: " + remaining); + while (remaining > 0) + { + if (LocationUtilities.IsThereWaterAtThisTile(environment, (int)this.TileLocation.X, (int)this.TileLocation.Y)) + { + this.GetFluidManager().produceFluid(ModCore.ObjectManager.resources.getFluid("Water"), 100); + } + remaining -= 10; + } + + return false; + } + return false; + + //return base.minutesElapsed(minutes, environment); + } + + public override bool canBePlacedInWater() + { + return true; + } + + public override bool rightClicked(Farmer who) + { + if (this.location == null) + this.location = Game1.player.currentLocation; + if (Game1.menuUp || Game1.currentMinigame != null) return false; + + //ModCore.playerInfo.sittingInfo.sit(this, Vector2.Zero); + this.createMachineMenu(); + return true; + } + + public override Item getOne() + { + WaterPump component = new WaterPump(this.data, this.info.Copy(), this.producedResources, this.energyRequiredPer10Minutes, this.timeToProduce, this.updatesContainerObjectForProduction, this.craftingRecipeBook); + component.containerObject = this.containerObject; + component.offsetKey = this.offsetKey; + return component; + return component; + } + + public override ICustomObject recreate(Dictionary additionalSaveData, object replacement) + { + Vector2 offsetKey = new Vector2(Convert.ToInt32(additionalSaveData["offsetKeyX"]), Convert.ToInt32(additionalSaveData["offsetKeyY"])); + string GUID = additionalSaveData["GUID"]; + WaterPump self = Revitalize.ModCore.Serializer.DeserializeGUID(additionalSaveData["GUID"]); + if (ModCore.IsNullOrDefault(self)) return null; + try + { + if (!Revitalize.ModCore.ObjectGroups.ContainsKey(additionalSaveData["ParentGUID"])) + { + MultiTiledObject obj = (MultiTiledObject)Revitalize.ModCore.Serializer.DeserializeGUID(additionalSaveData["ParentGUID"]); + self.containerObject = obj; + self.containerObject.removeComponent(offsetKey); + self.containerObject.addComponent(offsetKey, self); + Revitalize.ModCore.ObjectGroups.Add(additionalSaveData["ParentGUID"], obj); + } + else + { + self.containerObject = Revitalize.ModCore.ObjectGroups[additionalSaveData["ParentGUID"]]; + self.containerObject.removeComponent(offsetKey); + self.containerObject.addComponent(offsetKey, self); + } + } + catch (Exception err) + { + ModCore.log(err); + } + + return self; + } + + public override void rebuild(Dictionary additionalSaveData, object replacement) + { + base.rebuild(additionalSaveData, replacement); + } + + public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1f) + { + this.updateInfo(); + + if (this.info == null) + { + Revitalize.ModCore.log("info is null"); + if (this.syncObject == null) Revitalize.ModCore.log("DEAD SYNC"); + } + if (this.animationManager == null) Revitalize.ModCore.log("Animation Manager Null"); + if (this.displayTexture == null) Revitalize.ModCore.log("Display texture is null"); + + //The actual planter box being drawn. + if (this.animationManager == null) + { + if (this.animationManager.getExtendedTexture() == null) + ModCore.ModMonitor.Log("Tex Extended is null???"); + + spriteBatch.Draw(this.displayTexture, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(x * Game1.tileSize), y * Game1.tileSize)), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), this.info.DrawColor * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0f, (float)(y * Game1.tileSize) / 10000f)); + // Log.AsyncG("ANIMATION IS NULL?!?!?!?!"); + } + + else + { + //Log.AsyncC("Animation Manager is working!"); + float addedDepth = 0; + + + if (Revitalize.ModCore.playerInfo.sittingInfo.SittingObject == this.containerObject && this.info.facingDirection == Enums.Direction.Up) + { + addedDepth += (this.containerObject.Height - 1) - ((int)(this.offsetKey.Y)); + if (this.info.ignoreBoundingBox) addedDepth += 1.5f; + } + else if (this.info.ignoreBoundingBox) + { + addedDepth += 1.0f; + } + this.animationManager.draw(spriteBatch, this.displayTexture, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)(x * Game1.tileSize), y * Game1.tileSize)), new Rectangle?(this.animationManager.currentAnimation.sourceRectangle), this.info.DrawColor * alpha, 0f, Vector2.Zero, (float)Game1.pixelZoom, this.flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None, Math.Max(0f, (float)((y + addedDepth) * Game1.tileSize) / 10000f) + .00001f); + this.drawStatusBubble(spriteBatch, x, y, alpha); + + try + { + if (this.animationManager.canTickAnimation()) + { + this.animationManager.tickAnimation(); + } + // Log.AsyncC("Tick animation"); + } + catch (Exception err) + { + ModCore.ModMonitor.Log(err.ToString()); + } + } + + // spriteBatch.Draw(Game1.mouseCursors, Game1.GlobalToLocal(Game1.viewport, new Vector2((float)((double)tileLocation.X * (double)Game1.tileSize + (((double)tileLocation.X * 11.0 + (double)tileLocation.Y * 7.0) % 10.0 - 5.0)) + (float)(Game1.tileSize / 2), (float)((double)tileLocation.Y * (double)Game1.tileSize + (((double)tileLocation.Y * 11.0 + (double)tileLocation.X * 7.0) % 10.0 - 5.0)) + (float)(Game1.tileSize / 2))), new Rectangle?(new Rectangle((int)((double)tileLocation.X * 51.0 + (double)tileLocation.Y * 77.0) % 3 * 16, 128 + this.whichForageCrop * 16, 16, 16)), Color.White, 0.0f, new Vector2(8f, 8f), (float)Game1.pixelZoom, SpriteEffects.None, (float)(((double)tileLocation.Y * (double)Game1.tileSize + (double)(Game1.tileSize / 2) + (((double)tileLocation.Y * 11.0 + (double)tileLocation.X * 7.0) % 10.0 - 5.0)) / 10000.0)); + + } + + public override void updateInfo() + { + return; + if (this.info == null || this.containerObject == null) + { + this.ItemInfo = this.text; + //ModCore.log("Updated item info!"); + return; + } + + if (this.requiresUpdate()) + { + //this.ItemInfo = this.text; + this.text = this.ItemInfo; + this.info.cleanAfterUpdate(); + //this.containerObject.updateInfo(); + //ModCore.log("Force an update for machine: " + this.info.name); + MultiplayerUtilities.RequestUpdateSync(this.guid); + } + } + + public override Dictionary getAdditionalSaveData() + { + Dictionary saveData = base.getAdditionalSaveData(); + Revitalize.ModCore.Serializer.SerializeGUID(this.containerObject.childrenGuids[this.offsetKey].ToString(), this); + this.containerObject.getAdditionalSaveData(); + return saveData; + + } + } +} diff --git a/GeneralMods/Revitalize/Framework/Objects/MultiTiledComponent.cs b/GeneralMods/Revitalize/Framework/Objects/MultiTiledComponent.cs index d98e1afe..cc210ffd 100644 --- a/GeneralMods/Revitalize/Framework/Objects/MultiTiledComponent.cs +++ b/GeneralMods/Revitalize/Framework/Objects/MultiTiledComponent.cs @@ -122,10 +122,24 @@ namespace Revitalize.Framework.Objects return base.checkForAction(who, justCheckingForActivity); } + public override bool canBePlacedHere(GameLocation l, Vector2 tile) + { + return base.canBePlacedHere(l, tile); + } + + + public override bool clicked(Farmer who) { //ModCore.log("Clicked a multiTiledComponent!"); - this.containerObject.pickUp(who); + if (ModCore.playerInfo.justPlacedACustomObject == true) return false; + if (PlayerUtilities.CanPlayerInventoryReceiveThisItem(this.containerObject)) { + this.containerObject.pickUp(who); + } + else + { + return false; + } return true; //return base.clicked(who); } @@ -180,6 +194,7 @@ namespace Revitalize.Framework.Objects location.objects.Add(this.TileLocation, this); + if(this.getBoundingBox(this.TileLocation).Width==0&& this.getBoundingBox(this.TileLocation).Height == 0) { this.boundingBox.Value = new Rectangle(this.boundingBox.X, this.boundingBox.Y, Game1.tileSize, Game1.tileSize); diff --git a/GeneralMods/Revitalize/Framework/Objects/MultiTiledObject.cs b/GeneralMods/Revitalize/Framework/Objects/MultiTiledObject.cs index 0c0a7e3c..dfb69b9e 100644 --- a/GeneralMods/Revitalize/Framework/Objects/MultiTiledObject.cs +++ b/GeneralMods/Revitalize/Framework/Objects/MultiTiledObject.cs @@ -257,8 +257,8 @@ namespace Revitalize.Framework.Objects //Revitalize.ModCore.log(new Vector2(x + ((int)pair.Key.X), y + ((int)pair.Key.Y))); if ((pair.Value as MultiTiledComponent).info.ignoreBoundingBox) { - x *= -1; - y *= -1; + //x *= -1; + //y *= -1; } (pair.Value as MultiTiledComponent).draw(spriteBatch, x / Game1.tileSize, y / Game1.tileSize, 0.5f); //break; @@ -283,10 +283,10 @@ namespace Revitalize.Framework.Objects { if ((pair.Value as MultiTiledComponent).info.lightManager != null) { - ModCore.log("Let there be light."); + //ModCore.log("Let there be light."); if ((pair.Value as MultiTiledComponent).info.lightManager.lightsOn == true) { - ModCore.log("Got a light???"); + //ModCore.log("Got a light???"); } } (pair.Value as MultiTiledComponent).removeFromLocation(who.currentLocation, pair.Key); diff --git a/GeneralMods/Revitalize/Framework/Objects/ObjectManager.cs b/GeneralMods/Revitalize/Framework/Objects/ObjectManager.cs index a0a591d8..c8fe7ba3 100644 --- a/GeneralMods/Revitalize/Framework/Objects/ObjectManager.cs +++ b/GeneralMods/Revitalize/Framework/Objects/ObjectManager.cs @@ -331,6 +331,13 @@ namespace Revitalize.Framework.Objects alloyFurnace.addComponent(new Vector2(0, 1), alloyFurnace_0_1); this.AddItem("AlloyFurnace", alloyFurnace); + + MultiTiledObject waterPumpV1 = new MultiTiledObject(PyTKHelper.CreateOBJData("Omegasis.Revitalize.Objects.Machines.WaterPump", TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), typeof(MultiTiledObject), Color.White, true), new BasicItemInformation("Water Pump", "Omegasis.Revitalize.Objects.Machines.WaterPump", "Pumps up water from a water source.", "Machine", Color.SteelBlue, -300, 0, false, 350, true, true, TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), new AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Machines", "WaterPump"), new Animation(0, 0, 16, 16)), Color.White, false, null, null, null, false, null, null, new Managers.FluidManagerV2(5000, true, Enums.FluidInteractionType.Machine, false))); + WaterPump waterPumpV1_0_0 = new WaterPump(PyTKHelper.CreateOBJData("Omegasis.Revitalize.Objects.Machines.WaterPump", TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), typeof(MultiTiledObject), Color.White, true), new BasicItemInformation("Water Pump", "Omegasis.Revitalize.Objects.Machines.WaterPump", "Pumps up water from a water source.", "Machine", Color.SteelBlue, -300, 0, false, 350, true, true, TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), new AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Machines", "WaterPump"), new Animation(0, 0, 16, 16)), Color.White, true, null, null, null, false, null, null, new Managers.FluidManagerV2(5000, true, Enums.FluidInteractionType.Machine, false)), null, 0, 0, false, ""); + WaterPump waterPumpV1_0_1= new WaterPump(PyTKHelper.CreateOBJData("Omegasis.Revitalize.Objects.Machines.WaterPump", TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), typeof(MultiTiledObject), Color.White, true), new BasicItemInformation("Water Pump", "Omegasis.Revitalize.Objects.Machines.WaterPump", "Pumps up water from a water source.", "Machine", Color.SteelBlue, -300, 0, false, 350, true, true, TextureManager.GetTexture(ModCore.Manifest, "Machines", "WaterPump"), new AnimationManager(TextureManager.GetExtendedTexture(ModCore.Manifest, "Machines", "WaterPump"), new Animation(0, 16, 16, 16)), Color.White, false, null, null, null, false, null, null, new Managers.FluidManagerV2(5000, true, Enums.FluidInteractionType.Machine, false)), null, 0, 0, true, ""); + waterPumpV1.addComponent(new Vector2(0, 0), waterPumpV1_0_0); + waterPumpV1.addComponent(new Vector2(0, 1), waterPumpV1_0_1); + this.AddItem("WaterPumpV1", waterPumpV1); } private void loadInWires() diff --git a/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs b/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs index 9df39c04..3547061a 100644 --- a/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs +++ b/GeneralMods/Revitalize/Framework/Objects/ResourceManager.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using Microsoft.Xna.Framework; using Revitalize.Framework.Factories.Objects.Resources; +using Revitalize.Framework.Managers; using Revitalize.Framework.Objects.InformationFiles; using Revitalize.Framework.Objects.Items.Resources; using Revitalize.Framework.Objects.Resources.OreVeins; @@ -33,6 +34,7 @@ namespace Revitalize.Framework.Objects public Dictionary resources; public Dictionary miningDrillResources; + public Dictionary fluids; /// /// A list of all visited floors on the current visit to the mines. @@ -51,6 +53,7 @@ namespace Revitalize.Framework.Objects this.visitedFloors = new List(); this.resources = new Dictionary(); this.miningDrillResources = new Dictionary(); + this.fluids = new Dictionary(); } @@ -62,8 +65,13 @@ namespace Revitalize.Framework.Objects this.serializeOreVeins(); this.loadOreVeins(); this.loadInMiningDrillLootTable(); + this.loadInFluidDictionary(); } + private void loadInFluidDictionary() + { + this.fluids.Add("Water", new Fluid("Water", Color.Blue)); + } private void loadInMiningDrillLootTable() { this.miningDrillResources.Add("Bauxite", new ResourceInformation(this.getResource("Bauxite"), ModCore.Configs.miningDrillConfig.amountOfBauxiteToMine.min, ModCore.Configs.miningDrillConfig.amountOfBauxiteToMine.max, 1, 1, 1,ModCore.Configs.miningDrillConfig.bauxiteMineChance, 0, 0, 0, 0)); @@ -380,6 +388,23 @@ namespace Revitalize.Framework.Objects } } + /// + /// Gets a fluid from the fluid dictionary. + /// + /// + /// + public Fluid getFluid(string name) + { + if (this.fluids.ContainsKey(name)) + { + return this.fluids[name].Copy(); + } + else + { + return null; + } + } + /// /// Get a resource from the resource maanger. /// diff --git a/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs b/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs index 275e6355..49a46b24 100644 --- a/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs +++ b/GeneralMods/Revitalize/Framework/Player/PlayerInfo.cs @@ -6,6 +6,7 @@ namespace Revitalize.Framework.Player { public SittingInfo sittingInfo; public MagicManager magicManager; + public bool justPlacedACustomObject; public PlayerInfo() { diff --git a/GeneralMods/Revitalize/Framework/Utilities/PlayerUtilities.cs b/GeneralMods/Revitalize/Framework/Utilities/PlayerUtilities.cs index d27be79e..95f6a807 100644 --- a/GeneralMods/Revitalize/Framework/Utilities/PlayerUtilities.cs +++ b/GeneralMods/Revitalize/Framework/Utilities/PlayerUtilities.cs @@ -24,7 +24,7 @@ namespace Revitalize.Framework.Utilities for(int i = 0; i < Game1.player.Items.Count; i++) { if (I == Game1.player.Items[i]) return true; - if (I == null) return true; + if (Game1.player.Items[i] == null) return true; if (I.canStackWith(Game1.player.Items[i])) return true; } return false; diff --git a/GeneralMods/Revitalize/ModCore.cs b/GeneralMods/Revitalize/ModCore.cs index ec8c98f2..a2e494a8 100644 --- a/GeneralMods/Revitalize/ModCore.cs +++ b/GeneralMods/Revitalize/ModCore.cs @@ -275,7 +275,7 @@ namespace Revitalize ModHelper.Events.Multiplayer.ModMessageReceived += MultiplayerUtilities.GetModMessage; ModHelper.Events.Input.ButtonPressed += ObjectInteractionHacks.ResetNormalToolsColorOnLeftClick; - + ModHelper.Events.Input.ButtonPressed += this.Input_ButtonPressed1; ModHelper.Events.Display.MenuChanged += MenuHacks.RecreateFarmhandInventory; @@ -285,6 +285,28 @@ namespace Revitalize CraftingRecipeBook.CraftingRecipesByGroup = new Dictionary(); } + private void Input_ButtonPressed1(object sender, StardewModdingAPI.Events.ButtonPressedEventArgs e) + { + if(e.Button== SButton.MouseLeft) + { + if (Game1.player != null) + { + if (Game1.activeClickableMenu != null || Game1.eventUp || Game1.currentMinigame != null) return; + if(Game1.player.ActiveObject is CustomObject) + { + if((Game1.player.ActiveObject as CustomObject).canBePlacedHere(Game1.player.currentLocation, Game1.currentCursorTile)) + { + CustomObject o =(CustomObject) Game1.player.ActiveObject; + o.placementAction(Game1.currentLocation,(int) Game1.currentCursorTile.X*Game1.tileSize,(int)Game1.currentCursorTile.Y*Game1.tileSize, Game1.player); + //o.performObjectDropInAction(Game1.player.ActiveObject, true, Game1.player); + Game1.player.reduceActiveItemByOne(); + playerInfo.justPlacedACustomObject = true; + } + } + } + } + } + /// @@ -526,6 +548,7 @@ namespace Revitalize private void GameLoop_UpdateTicked(object sender, StardewModdingAPI.Events.UpdateTickedEventArgs e) { + if (playerInfo.justPlacedACustomObject == true) playerInfo.justPlacedACustomObject = false; DarkerNight.SetDarkerColor(); playerInfo.update(); } @@ -577,6 +600,7 @@ namespace Revitalize ModCore.ObjectManager.GetItem("MiningDrillMachineV1"), ModCore.ObjectManager.GetItem("AlloyFurnace"), new StardewValley.Object((int)Enums.SDVObject.IronBar,100), + ModCore.ObjectManager.GetItem("WaterPumpV1") }); } diff --git a/GeneralMods/Revitalize/Revitalize.csproj b/GeneralMods/Revitalize/Revitalize.csproj index 5064cbbf..dc1561e3 100644 --- a/GeneralMods/Revitalize/Revitalize.csproj +++ b/GeneralMods/Revitalize/Revitalize.csproj @@ -88,7 +88,7 @@ - + @@ -168,6 +168,7 @@ + @@ -415,6 +416,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -475,6 +482,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -499,6 +509,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest