diff options
Diffstat (limited to 'StardewModdingAPI/Inheritance/SObject.cs')
-rw-r--r-- | StardewModdingAPI/Inheritance/SObject.cs | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs new file mode 100644 index 00000000..e05b4f20 --- /dev/null +++ b/StardewModdingAPI/Inheritance/SObject.cs @@ -0,0 +1,188 @@ +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 StardewValley; +using StardewValley.Locations; + +namespace StardewModdingAPI.Inheritance +{ + public class SObject : StardewValley.Object + { + public override String Name { get; set; } + public String Description { get; set; } + public Texture2D Texture { get; set; } + public String CategoryName { get; set; } + public Color CategoryColour { get; set; } + public Boolean IsPassable { get; set; } + public Boolean IsPlaceable { get; set; } + public Boolean HasBeenRegistered { get; set; } + public Int32 RegisteredId { get; set; } + + public Int32 MaxStackSize { get; set; } + + public Boolean WallMounted { get; set; } + public Vector2 DrawPosition { get; set; } + + public Boolean FlaggedForPickup { get; set; } + + public SObject() + { + Name = "Modded Item Name"; + Description = "Modded Item Description"; + CategoryName = "Modded Item Category"; + Category = 4163; + CategoryColour = Color.White; + IsPassable = false; + IsPlaceable = false; + boundingBox = new Rectangle(0, 0, 64, 64); + } + + public override string getDescription() + { + return Description; + } + + public override void draw(SpriteBatch spriteBatch, int x, int y, float alpha = 1) + { + if (Texture != null) + spriteBatch.Draw(Texture, new Vector2(x, y), new Color(255, 255, 255, 255f * alpha)); + } + + public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1) + { + if (Texture != null) + { + spriteBatch.Draw(Texture, new Vector2(xNonTile, yNonTile), null, new Color(255, 255, 255, 255f * alpha), 0, Vector2.Zero, 1, SpriteEffects.None, layerDepth); + spriteBatch.DrawString(Game1.dialogueFont, "TARG: " + new Vector2(xNonTile, yNonTile), new Vector2(128, 0), Color.Red); + } + } + + public override void drawInMenu(SpriteBatch spriteBatch, Vector2 location, float scaleSize, float transparency, float layerDepth, bool drawStackNumber) + { + if (this.isRecipe) + { + transparency = 0.5f; + scaleSize *= 0.75f; + } + + if (Texture != null) + { + int targSize = (int) (64 * scaleSize * 0.9f); + int midX = (int) ((location.X) + 32); + int midY = (int) ((location.Y) + 32); + + int targX = midX - targSize / 2; + int targY = midY - targSize / 2; + + spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, new Color(255, 255, 255, transparency), 0, Vector2.Zero, SpriteEffects.None, layerDepth); + } + if (drawStackNumber) + { + float scale = 0.5f + scaleSize; + Game1.drawWithBorder(string.Concat(this.stack), Color.Black, Color.White, location + new Vector2((float) Game1.tileSize - Game1.tinyFont.MeasureString(string.Concat(this.stack)).X * scale, (float) Game1.tileSize - (float) ((double) Game1.tinyFont.MeasureString(string.Concat(this.stack)).Y * 3.0f / 4.0f) * scale), 0.0f, scale, 1f, true); + } + } + + public override void drawWhenHeld(SpriteBatch spriteBatch, Vector2 objectPosition, Farmer f) + { + if (Texture != null) + { + int targSize = 64; + int midX = (int) ((objectPosition.X) + 32); + int midY = (int) ((objectPosition.Y) + 32); + + int targX = midX - targSize / 2; + int targY = midY - targSize / 2; + + spriteBatch.Draw(Texture, new Rectangle(targX, targY, targSize, targSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, (f.getStandingY() + 2) / 10000f); + } + } + + public override Color getCategoryColor() + { + return CategoryColour; + } + + public override string getCategoryName() + { + if (string.IsNullOrEmpty(CategoryName)) + return "Modded Item"; + return CategoryName; + } + + public override bool isPassable() + { + return IsPassable; + } + + public override bool isPlaceable() + { + return IsPlaceable; + } + + public override int maximumStackSize() + { + return MaxStackSize; + } + + public SObject Clone() + { + SObject toRet = new SObject(); + + toRet.Name = this.Name; + toRet.CategoryName = this.CategoryName; + toRet.Description = this.Description; + toRet.Texture = this.Texture; + toRet.IsPassable = this.IsPassable; + toRet.IsPlaceable = this.IsPlaceable; + toRet.quality = this.quality; + toRet.scale = this.scale; + toRet.isSpawnedObject = this.isSpawnedObject; + toRet.isRecipe = this.isRecipe; + toRet.questItem = this.questItem; + toRet.stack = 1; + toRet.HasBeenRegistered = this.HasBeenRegistered; + toRet.RegisteredId = this.RegisteredId; + + return toRet; + } + + public override Item getOne() + { + return this.Clone(); + } + + public override bool placementAction(GameLocation location, int x, int y, Farmer who = null) + { + SGameLocation s = SGame.GetLocationFromName(location.name); + + if (s.GetHashCode() != SGame.CurrentLocation.GetHashCode()) + { + Program.LogError("HASH DIFFERENCE: " + s.GetHashCode() + " | " + SGame.ModLocations[SGame.ModLocations.IndexOf(SGame.ModLocations.First(z => z.name == location.name))].GetHashCode() + " | " + SGame.CurrentLocation.GetHashCode()); + Console.ReadKey(); + } + + Console.Title = (this.GetHashCode() + " PLACEMENT"); + + if (s != null) + { + Vector2 index1 = new Vector2((float)(x / Game1.tileSize), (float)(y / Game1.tileSize)); + if (!s.ModObjects.ContainsKey(index1)) + { + s.ModObjects.Add(index1, this); + return true; + } + } + else + { + Program.LogError("No SGameLocation could be found for the supplied GameLocation!"); + return false; + } + return false; + } + } +}
\ No newline at end of file |