From 87913f22ffd008adbefe6152c1094f6e3be5cccb Mon Sep 17 00:00:00 2001 From: Joshua Navarro Date: Sat, 5 Jan 2019 22:25:22 -0800 Subject: [PATCH] Player sits correct direction, and started work on making furniture. --- .../Revitalize/Framework/Enums/Enums.cs | 20 ++++++ .../Framework/Objects/BasicItemInformation.cs | 5 ++ .../Framework/Objects/CustomObject.cs | 2 +- .../Framework/Objects/Furniture/Chair.cs | 12 ++++ .../Furniture/FurnitureTileComponent.cs | 29 ++++++++ .../Furniture/ChairInformation.cs | 23 ++++++ .../Furniture/FurnitureInformation.cs | 16 +++++ .../Framework/Player/Managers/SittingInfo.cs | 67 ++++++++++++++---- GeneralMods/Revitalize/ModCore.cs | 13 ++++ GeneralMods/Revitalize/Revitalize.csproj | 1 + GeneralMods/UpgradeLog.htm | Bin 0 -> 28818 bytes GeneralMods/UpgradeLog2.htm | Bin 0 -> 28818 bytes 12 files changed, 173 insertions(+), 15 deletions(-) create mode 100644 GeneralMods/Revitalize/Framework/Enums/Enums.cs create mode 100644 GeneralMods/Revitalize/Framework/Objects/Furniture/Chair.cs create mode 100644 GeneralMods/Revitalize/Framework/Objects/Furniture/FurnitureTileComponent.cs create mode 100644 GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/ChairInformation.cs create mode 100644 GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/FurnitureInformation.cs create mode 100644 GeneralMods/UpgradeLog.htm create mode 100644 GeneralMods/UpgradeLog2.htm diff --git a/GeneralMods/Revitalize/Framework/Enums/Enums.cs b/GeneralMods/Revitalize/Framework/Enums/Enums.cs new file mode 100644 index 00000000..3d3d7e09 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Enums/Enums.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Revitalize.Framework +{ + public class Enums + { + public enum Direction + { + Up, + Right, + Down, + Left + } + + } +} diff --git a/GeneralMods/Revitalize/Framework/Objects/BasicItemInformation.cs b/GeneralMods/Revitalize/Framework/Objects/BasicItemInformation.cs index 21207f61..eee605af 100644 --- a/GeneralMods/Revitalize/Framework/Objects/BasicItemInformation.cs +++ b/GeneralMods/Revitalize/Framework/Objects/BasicItemInformation.cs @@ -33,6 +33,8 @@ namespace Revitalize.Framework.Objects public LightManager lightManager; + public Enums.Direction facingDirection; + public BasicItemInformation() { this.name = ""; @@ -50,6 +52,8 @@ namespace Revitalize.Framework.Objects this.drawColor = Color.White; this.inventory = new InventoryManager(); this.lightManager = new LightManager(); + + this.facingDirection = Enums.Direction.Down; } public BasicItemInformation(string name, string description, string categoryName, Color categoryColor, int edibility, int fragility, bool isLamp, int price, Vector2 TileLocation, bool canBeSetOutdoors, bool canBeSetIndoors, string id, string data, Texture2D texture, Color color, int tileIndex, bool bigCraftable, Type type, CraftingData craftingData, AnimationManager animationManager, Color drawColor, bool ignoreBoundingBox, InventoryManager Inventory, LightManager Lights) : base(id, data, texture, color, tileIndex, bigCraftable, type, craftingData) @@ -82,6 +86,7 @@ namespace Revitalize.Framework.Objects this.recreateDataString(); this.inventory = Inventory ?? new InventoryManager(); this.lightManager = Lights ?? new LightManager(); + this.facingDirection = Enums.Direction.Down; } public void recreateDataString() diff --git a/GeneralMods/Revitalize/Framework/Objects/CustomObject.cs b/GeneralMods/Revitalize/Framework/Objects/CustomObject.cs index b9c111bb..30929b28 100644 --- a/GeneralMods/Revitalize/Framework/Objects/CustomObject.cs +++ b/GeneralMods/Revitalize/Framework/Objects/CustomObject.cs @@ -70,7 +70,7 @@ namespace Revitalize.Framework.Objects public override bool isPassable() { - return this.info.ignoreBoundingBox; + return this.info.ignoreBoundingBox || Revitalize.ModCore.playerInfo.sittingInfo.SittingObject==this; } public override Rectangle getBoundingBox(Vector2 tileLocation) diff --git a/GeneralMods/Revitalize/Framework/Objects/Furniture/Chair.cs b/GeneralMods/Revitalize/Framework/Objects/Furniture/Chair.cs new file mode 100644 index 00000000..134c0f71 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Objects/Furniture/Chair.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Revitalize.Framework.Objects.Furniture +{ + class Chair + { + } +} diff --git a/GeneralMods/Revitalize/Framework/Objects/Furniture/FurnitureTileComponent.cs b/GeneralMods/Revitalize/Framework/Objects/Furniture/FurnitureTileComponent.cs new file mode 100644 index 00000000..f47a6406 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Objects/Furniture/FurnitureTileComponent.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Revitalize.Framework.Objects.InformationFiles; +using Revitalize.Framework.Objects.InformationFiles.Furniture; + +namespace Revitalize.Framework.Objects.Furniture +{ + public class FurnitureTileComponent:MultiTiledComponent + { + public FurnitureInformation furnitureInfo; + + + public FurnitureTileComponent():base() + { + + } + + public FurnitureTileComponent(BasicItemInformation itemInfo,FurnitureInformation furnitureInfo):base(itemInfo) + { + this.furnitureInfo = furnitureInfo; + } + + + + } +} diff --git a/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/ChairInformation.cs b/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/ChairInformation.cs new file mode 100644 index 00000000..f1e4fe33 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/ChairInformation.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Revitalize.Framework.Objects.InformationFiles.Furniture +{ + public class ChairInformation:FurnitureInformation + { + public bool canSitHere; + + public ChairInformation():base() + { + + } + + public ChairInformation(bool CanSitHere) : base() + { + this.canSitHere = CanSitHere; + } + } +} diff --git a/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/FurnitureInformation.cs b/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/FurnitureInformation.cs new file mode 100644 index 00000000..2df3b252 --- /dev/null +++ b/GeneralMods/Revitalize/Framework/Objects/InformationFiles/Furniture/FurnitureInformation.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Revitalize.Framework.Objects.InformationFiles.Furniture +{ + public class FurnitureInformation + { + public FurnitureInformation() + { + + } + } +} diff --git a/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs b/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs index 3e429060..c2688648 100644 --- a/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs +++ b/GeneralMods/Revitalize/Framework/Player/Managers/SittingInfo.cs @@ -1,4 +1,5 @@ using Microsoft.Xna.Framework; +using Revitalize.Framework.Objects; using StardewValley; namespace Revitalize.Framework.Player.Managers @@ -24,6 +25,15 @@ namespace Revitalize.Framework.Player.Managers /// How long a player has to sit to recover energy/health; public int SittingSpan { get; } + StardewValley.Object sittingObject; + + public StardewValley.Object SittingObject + { + get + { + return this.sittingObject; + } + } /// Construct an instance. public SittingInfo() @@ -41,6 +51,7 @@ namespace Revitalize.Framework.Player.Managers { this.isSitting = false; this.elapsedTime = 0; + this.sittingObject = null; } if (this.isSitting && Game1.player.CanMove) { @@ -55,26 +66,53 @@ namespace Revitalize.Framework.Player.Managers Game1.player.health++; Game1.player.Stamina++; } - ModCore.log(this.elapsedTime); } public void showSitting() { - switch (Game1.player.FacingDirection) + if (this.sittingObject == null) { - case 0: - Game1.player.FarmerSprite.setCurrentSingleFrame(113); - break; - case 1: - Game1.player.FarmerSprite.setCurrentSingleFrame(106); - break; - case 2: - Game1.player.FarmerSprite.setCurrentSingleFrame(107); - break; - case 3: - Game1.player.FarmerSprite.setCurrentSingleFrame(106); - break; + Revitalize.ModCore.log("Does THIS HAPPEN AT ALL???"); + switch (Game1.player.FacingDirection) + { + case 0: + Game1.player.FarmerSprite.setCurrentSingleFrame(113); + break; + case 1: + Game1.player.FarmerSprite.setCurrentSingleFrame(106); + break; + case 2: + Game1.player.FarmerSprite.setCurrentSingleFrame(107); + break; + case 3: + Game1.player.FarmerSprite.setCurrentSingleFrame(106); + break; + } + } + else + { + if(this.sittingObject is CustomObject) + { + Game1.player.faceDirection((int)(this.sittingObject as CustomObject).info.facingDirection); + switch ((this.sittingObject as CustomObject).info.facingDirection) + { + + case Enums.Direction.Up: + + Game1.player.FarmerSprite.setCurrentSingleFrame(113); + break; + case Enums.Direction.Right: + Game1.player.FarmerSprite.setCurrentSingleFrame(106); + break; + case Enums.Direction.Down: + Game1.player.FarmerSprite.setCurrentSingleFrame(107); + break; + case Enums.Direction.Left: + Game1.player.FarmerSprite.setCurrentSingleFrame(106,32000,false,true); + break; + } + } } } @@ -83,6 +121,7 @@ namespace Revitalize.Framework.Player.Managers this.isSitting = true; Game1.player.Position = (obj.TileLocation * Game1.tileSize + offset); Game1.player.position.Y += Game1.tileSize / 2; + this.sittingObject = obj; } } } diff --git a/GeneralMods/Revitalize/ModCore.cs b/GeneralMods/Revitalize/ModCore.cs index f0a63dfa..d5d18eb8 100644 --- a/GeneralMods/Revitalize/ModCore.cs +++ b/GeneralMods/Revitalize/ModCore.cs @@ -44,6 +44,12 @@ namespace Revitalize // -Spell books // -Potions! // -Magic Meter + // -Connected chests much like Project EE2 from MC + // + // + // + // -Bigger chests + // // Festivals // -Firework festival? // Stargazing??? @@ -54,6 +60,7 @@ namespace Revitalize // // Equippables! // -accessories that provide buffs/regen/friendship + // -braclets/rings/broaches....more crafting for these??? // // Music??? // -IDK maybe add in instruments??? @@ -74,6 +81,12 @@ namespace Revitalize // -Small Island Home? // // More crops + // + // More monsters + // -boss fights + // + // More dungeons?? + public class ModCore : Mod { diff --git a/GeneralMods/Revitalize/Revitalize.csproj b/GeneralMods/Revitalize/Revitalize.csproj index 8fa04685..dc74ff89 100644 --- a/GeneralMods/Revitalize/Revitalize.csproj +++ b/GeneralMods/Revitalize/Revitalize.csproj @@ -47,6 +47,7 @@ + diff --git a/GeneralMods/UpgradeLog.htm b/GeneralMods/UpgradeLog.htm new file mode 100644 index 0000000000000000000000000000000000000000..2749ed45fe345e3087c2825e62bcba084cc12971 GIT binary patch literal 28818 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 p!Ty2HBFatrYX`1j<*_h5FpJxq1<+F{ifhEZo