summaryrefslogtreecommitdiff
path: root/StardewModdingAPI/Inheritance/SObject.cs
diff options
context:
space:
mode:
Diffstat (limited to 'StardewModdingAPI/Inheritance/SObject.cs')
-rw-r--r--StardewModdingAPI/Inheritance/SObject.cs188
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