/// <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);
        }
Example #3
0
        /// <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);
        }