Beispiel #1
0
        private void ActivateVanillaSprinkler(StardewValley.Object sprinkler)
        {
            Vector2 sprinklerTile = sprinkler.TileLocation;
            int     range         = sprinkler.GetModifiedRadiusForSprinkler();

            if (range < 0)
            {
                Monitor.Log($"Invalid sprinkler range: {range}", LogLevel.Error);
                return;
            }
            List <Vector2> coverage = sprinkler.GetSprinklerTiles();

            foreach (Vector2 v in coverage)
            {
                WaterTile(v);
            }
            switch (range)
            {
            case 0:
                playAnimation(sprinklerTile, animSize.SMALL);
                break;

            case 1:
                playAnimation(sprinklerTile, animSize.MEDIUM);
                break;

            default:
                playAnimation(sprinklerTile, animSize.LARGE);
                break;
            }
        }
Beispiel #2
0
        internal int GetSprinklerPower(SObject sprinkler, Vector2[] layout)
        {
            int?GetTier()
            {
                foreach (var sprinklerTierProvider in SprinklerTierProviders)
                {
                    var tier = sprinklerTierProvider(sprinkler);
                    if (tier != null)
                    {
                        return(tier);
                    }
                }

                // Line Sprinklers is patched, no need for custom handling here

                var radius = sprinkler.GetModifiedRadiusForSprinkler();

                return(radius == -1 ? null : radius + 1);
            }

            var tier = GetTier();

            if (tier == null)
            {
                return(layout.Length);
            }
            else
            {
                var powers = new[] { Config.Tier1Power, Config.Tier2Power, Config.Tier3Power, Config.Tier4Power, Config.Tier5Power, Config.Tier6Power, Config.Tier7Power, Config.Tier8Power };
                return(tier.Value < powers.Length ? powers[tier.Value - 1] : layout.Length);
            }
        }
        public void ApplySprinklerAnimation(GameLocation location, StardewValley.Object sprinkler)
        {
            int radius = sprinkler.GetModifiedRadiusForSprinkler();

            if (radius >= 0)
            {
                int delay         = 0;
                int numberOfLoops = 6;
                switch (radius)
                {
                case 0:
                {
                    location.temporarySprites.Add(new TemporaryAnimatedSprite(29, sprinkler.tileLocation.Value * 64f + new Vector2(0f, -48f), Color.White * 0.5f, 4, flipped: false, 60f, numberOfLoops)
                        {
                            delayBeforeAnimationStart = delay,
                            id = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y
                        });
                    location.temporarySprites.Add(new TemporaryAnimatedSprite(29, sprinkler.tileLocation.Value * 64f + new Vector2(48f, 0f), Color.White * 0.5f, 4, flipped: false, 60f, numberOfLoops)
                        {
                            rotation = (float)Math.PI / 2f,
                            delayBeforeAnimationStart = delay,
                            id = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y
                        });
                    location.temporarySprites.Add(new TemporaryAnimatedSprite(29, sprinkler.tileLocation.Value * 64f + new Vector2(0f, 48f), Color.White * 0.5f, 4, flipped: false, 60f, numberOfLoops)
                        {
                            rotation = (float)Math.PI,
                            delayBeforeAnimationStart = delay,
                            id = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y
                        });
                    location.temporarySprites.Add(new TemporaryAnimatedSprite(29, sprinkler.tileLocation.Value * 64f + new Vector2(-48f, 0f), Color.White * 0.5f, 4, flipped: false, 60f, numberOfLoops)
                        {
                            rotation = 4.712389f,
                            delayBeforeAnimationStart = delay,
                            id = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y
                        });
                    break;
                }

                case 1:
                    location.temporarySprites.Add(new TemporaryAnimatedSprite("TileSheets\\animations", new Microsoft.Xna.Framework.Rectangle(0, 1984, 192, 192), 60f, 3, numberOfLoops, sprinkler.tileLocation.Value * 64f + new Vector2(-64f, -64f), flicker: false, flipped: false)
                    {
                        color = Color.White * 0.4f,
                        delayBeforeAnimationStart = delay,
                        id = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y
                    });
                    break;

                default:
                {
                    float scale = (float)radius / 2f;
                    location.temporarySprites.Add(new TemporaryAnimatedSprite("TileSheets\\animations", new Microsoft.Xna.Framework.Rectangle(0, 2176, 320, 320), 60f, 4, numberOfLoops, sprinkler.tileLocation.Value * 64f + new Vector2(32f, 32f) + new Vector2(-160f, -160f) * scale, flicker: false, flipped: false)
                        {
                            color = Color.White * 0.4f,
                            delayBeforeAnimationStart = delay,
                            id    = sprinkler.tileLocation.X * 4000f + sprinkler.tileLocation.Y,
                            scale = scale
                        });
                    break;
                }
                }
            }
        }