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; } }
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; } } } }