/// <summary>The method to call before <see cref="SObject.draw(SpriteBatch,int,int,float,float)"/>.</summary> private static bool Before_Draw1(SObject __instance, SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha) { if (!__instance.bigCraftable.Value) { return(true); } var entry = Mod.Entries.SingleOrDefault(cle => cle.Name == __instance.Name); if (entry == null) { return(true); } int hdiff = entry.Texture.Height - entry.Length * 16; if (__instance.GetBiggerIndex() == 0) { if (__instance.isTemporarilyInvisible) { return(false); } Vector2 scaleFactor = __instance.getScale(); scaleFactor *= 4f; Vector2 pos = Game1.GlobalToLocal(Game1.viewport, new Vector2(xNonTile, yNonTile)); spriteBatch.Draw(entry.Texture, pos - new Vector2(0, hdiff * 4 * 2) + scaleFactor / 2f + (__instance.shakeTimer > 0 ? new Vector2(Game1.random.Next(-1, 2), Game1.random.Next(-1, 2)) : Vector2.Zero), null, Color.White * alpha, 0, Vector2.Zero, 4, SpriteEffects.None, layerDepth); } return(false); }
/// <summary>The method to call before <see cref="SObject.draw(SpriteBatch,int,int,float)"/>.</summary> private static bool Before_Draw2(SObject __instance, SpriteBatch spriteBatch, int x, int y, float alpha) { if (!__instance.bigCraftable.Value) { return(true); } var entry = Mod.Entries.SingleOrDefault(cle => cle.Name == __instance.Name); if (entry == null) { return(true); } int hdiff = entry.Texture.Height; if (__instance.GetBiggerIndex() == 0) { if (__instance.isTemporarilyInvisible) { return(false); } Vector2 scaleFactor = __instance.getScale(); scaleFactor *= 4f; Vector2 pos = Game1.GlobalToLocal(Game1.viewport, new Vector2(x * 64, y * 64)); float drawLayer = Math.Max(0f, ((y + 1) * 64 - 24) / 10000f) + x * 1E-05f; spriteBatch.Draw(entry.Texture, pos - new Vector2(0, hdiff * 4 - 64) + scaleFactor / 2f + (__instance.shakeTimer > 0 ? new Vector2(Game1.random.Next(-1, 2), Game1.random.Next(-1, 2)) : Vector2.Zero), null, Color.White * alpha, 0, Vector2.Zero, 4, SpriteEffects.None, drawLayer); } return(false); }
/// <summary> /// Copying the functionality of BiggerCraftable's OnObjectListChanged to find the base tile /// </summary> /// <param name="obj"></param> /// <returns></returns> private Vector2?GetBaseTile(SObject obj) { if (obj == null) { return(null); } // Tile the object is on var pos = obj.TileLocation; // This checks if "something" exists var entry = BiggerCraftables.Mod.entries.SingleOrDefault(ClearingActivity => ClearingActivity.Name == obj.Name); if (entry == null) { return(null); } // This is probably the "tile index" from top left int ind = obj.GetBiggerIndex(); int relPosX = ind % entry.Width, relPosY = entry.Length - 1 - ind / entry.Width; Vector2 basePos = new Vector2(pos.X - relPosX, pos.Y - relPosY); return(basePos); }