コード例 #1
0
 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
                     });
                 }
             }
         });
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 // 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);
 }