public static void Farm_DayUpdate_Postfix(Farm __instance) { if (!Config.EnableMod || !wateringPipeDict.ContainsKey(__instance.Name)) { return; } RefreshWateringTiles(__instance, true); SMonitor.Log($"{wateringPipeDict[__instance.Name].Count} pipes watering {wateringTileDict[__instance.Name].Count} tiles in {__instance.Name}"); foreach (Vector2 pipe in wateringPipeDict[__instance.Name]) { Object sprinkler = new Object(pipe, 621); __instance.postFarmEventOvernightActions.Add(delegate { if (Game1.player.team.SpecialOrderRuleActive("NO_SPRINKLER", null)) { return; } if (Config.WaterSurroundingTiles) { foreach (Vector2 tile in tileOffsets) { sprinkler.ApplySprinkler(__instance, pipe + tile); } if (Config.ShowSprinklerAnimations) { __instance.temporarySprites.Add(new TemporaryAnimatedSprite("TileSheets\\animations", new Rectangle(0, 1984, 192, 192), 60f, 3, 100, pipe * 64f + new Vector2(-64f, -64f), false, false) { color = Color.White * 0.4f, delayBeforeAnimationStart = Game1.random.Next(1000), id = pipe.X * 4000f + pipe.Y }); } } else { sprinkler.ApplySprinkler(__instance, pipe); if (Config.ShowSprinklerAnimations) { int delay = Game1.random.Next(1000); __instance.temporarySprites.Add(new TemporaryAnimatedSprite(29, pipe * 64f + new Vector2(0f, -48f), Color.White * 0.5f, 4, false, 60f, 100, -1, -1f, -1, 0) { delayBeforeAnimationStart = delay, id = pipe.X * 4000f + pipe.Y }); } } }); } }
private void ActivateVanillaSprinkler(StardewValley.Object sprinkler) { if (!sprinkler.IsSprinkler()) { return; } foreach (Vector2 current in sprinkler.GetSprinklerTiles()) { sprinkler.ApplySprinkler(Game1.currentLocation, current); } ApplySprinklerAnimation(Game1.currentLocation, sprinkler); }
public void ActivateSprinkler(SObject sprinkler, GameLocation location) { if (SprinklerBehavior is not ISprinklerBehavior.Independent) { throw new InvalidOperationException("Current sprinkler behavior does not allow independent sprinkler activation."); } if (Game1.player.team.SpecialOrderRuleActive("NO_SPRINKLER")) { return; } if (!sprinkler.IsSprinkler()) { return; } foreach (var sprinklerTile in GetModifiedSprinklerCoverage(sprinkler, location)) { sprinkler.ApplySprinkler(location, new Vector2(sprinklerTile.X, sprinklerTile.Y)); } sprinkler.ApplySprinklerAnimation(location); }
// Make sprinklers that are held by objects, do sprinkler things overnight public static bool DayUpdate_Prefix(StardewValley.Object __instance, GameLocation location) { StardewValley.Object obj = __instance.heldObject; if (obj != null && new[] { 599, 621, 645 }.Contains(obj.ParentSheetIndex)) { location.postFarmEventOvernightActions.Add(delegate { if (!Game1.player.team.SpecialOrderRuleActive("NO_SPRINKLER")) { string tiles_string = ""; foreach (Vector2 current in obj.GetSprinklerTiles()) { Vector2 current_modified = new Vector2(current.X + __instance.TileLocation.X, current.Y + __instance.TileLocation.Y); obj.ApplySprinkler(location, current_modified); tiles_string += $"({current_modified.X},{current_modified.Y}), "; } obj.ApplySprinklerAnimation(location); } }); } return(true); }