//////////////// private void CreateCursedBrambleNearbyIf(Func <int, int, bool> validateAt) { if (!this.IsPlayerProducingBrambleWake) { return; } if (!this.CanCreateCursedBramblesThisTick()) { return; } string timerName = CursedBramblesPlayer.TimerNameBase + "_" + this.player.whoAmI; Timers.SetTimer(timerName, this.BrambleWakeTickRate.Invoke(out _), false, () => { if (this.OldPosition != default) { CursedBrambleTile.CreateNearbyIf( worldPos: this.OldPosition, radius: this.BrambleWakeRadius, validateAt: validateAt, sync: true ); } this.OldPosition = this.player.Center; return(false); }); }
//// private bool RunBloom() { if (this.Cooldown++ > 20) { this.Cooldown = 0; } else { return(false); } int nearby; UnifiedRandom rand = TmlHelpers.SafelyGetRand(); foreach (BrambleBloomTendril tendril in this.Tendrils.ToArray()) { if (tendril.IsSplit()) { this.Tendrils.Add(tendril.CloneAsSplit()); } (int x, int y)growAt = tendril.Grow(); nearby = this.CountBramblesNear(growAt.x, growAt.y) + 1; if (nearby <= 1 || rand.NextFloat() < (1f - ((float)nearby / 10f))) { CursedBrambleTile.CreateBrambleAt(growAt.x, growAt.y); } } return(true); }
private static void UpdateBrambleErode() { var config = CursedBramblesConfig.Instance; var myworld = ModContent.GetInstance <CursedBramblesWorld>(); // float erodePercSec = config.Get <float>(nameof(config.BrambleErodePercentChancePerSecond)); float erodePercTick = erodePercSec / 60f; int brambleType = ModContent.TileType <CursedBrambleTile>(); foreach ((int x, int y) in myworld.BramblesSnapshot.ToArray()) { Tile tile = Framing.GetTileSafely(x, y); if (tile?.active() != true || tile.type != brambleType) { myworld.BramblesSnapshot.Remove((x, y)); continue; } if (Main.rand.NextFloat() < erodePercTick) { if (CursedBrambleTile.ErodeBrambleAt(x, y, Main.netMode == NetmodeID.Server)) { myworld.BramblesSnapshot.Remove((x, y)); } } } }
private void RunCleanup(ref bool cleanupComplete) { int tileX = this.TileX; int tileY = this.TileY; int rad = AmbushesMod.Config.AmbushEntrapmentRadius + AmbushesMod.Config.BrambleThickness + 1; IList <(int, int)> brambles = CursedBrambleTile.FindBrambles(tileX - rad, tileY - rad, tileX + rad, tileY + rad); if (brambles.Count > 0) { if (brambles.Count < 48) { if (Main.netMode != 1) { foreach ((int x, int y) in brambles) { CursedBrambleTile.RemoveBrambleAt(x, y); } } cleanupComplete = true; } } else { cleanupComplete = true; } if (cleanupComplete) { if (AmbushesMod.Config.DebugModeInfoBrambles) { Main.NewText("Brambles at " + tileX + ", " + tileY + " cleaned up."); } } }
//////////////// protected override bool OnActivate(int clearTileX, int clearTileY) { Main.NewText("Look out!", Color.Red); int radius = AmbushesMod.Config.AmbushEntrapmentRadius; IDictionary <int, ISet <int> > tileTrace = CursedBrambleTile.TraceTileWall(clearTileX, clearTileY, radius, this.IsHorizontal); CursedBrambleTile.CreateBramblesAt(tileTrace); return(true); }
//// private void RunErode() { if (Main.netMode == 1) { return; } int rad = AmbushesMod.Config.AmbushEntrapmentRadius + AmbushesMod.Config.BrambleThickness + 1; for (int i = 0; i < 120; i++) { CursedBrambleTile.ErodeRandomBrambleWithinRadius(this.TileX, this.TileY, rad); } }
//////////////// protected void CreateBrambleEnclosureIfEntrapping() { if (Main.netMode == 1) { return; } if (this.IsEntrapping) { int radius = AmbushesMod.Config.AmbushEntrapmentRadius; IDictionary <int, ISet <int> > tileTrace = CursedBrambleTile.TraceTileEnclosure(this.TileX, this.TileY, radius); CursedBrambleTile.CreateBramblesAt(tileTrace); } }
//// private void CreateCursedBrambleTrail(NPC npc) { int tileX = (int)npc.Center.X / 16; int tileY = (int)npc.Center.Y / 16; int thickness = npc.width > npc.height ? npc.width : npc.height; thickness = (int)Math.Ceiling((double)thickness / 16d); CursedBrambleTile.CreateBramblePatchAt( tileX: tileX, tileY: tileY, radius: thickness, densityPercent: 0.05f, validateAt: null, sync: Main.netMode == NetmodeID.Server ); }
public static void ApplyExternalEffectsIf(NPC npc) { if (Main.netMode == NetmodeID.MultiplayerClient) { return; } // var mymod = EnragedMod.Instance; string uid = NPCID.GetUniqueKey(npc.type); if (mymod.EnragedNpcHooks.ContainsKey(uid)) { (bool isBramble, bool _)? behavior = mymod.EnragedNpcHooks[uid].Invoke(npc.whoAmI); if (behavior.HasValue && !behavior.Value.isBramble) { return; } } // var config = EnragedConfig.Instance; int thickness = config.Get <int>(nameof(EnragedConfig.EnragedBrambleTrailThickness)); float density = config.Get <float>(nameof(EnragedConfig.EnragedBrambleTrailDensity)); if (thickness > 0 && density > 0f) { int created = CursedBrambleTile.CreateBramblePatchAt( tileX: (int)npc.Center.X / 16, tileY: (int)npc.Center.Y / 16, radius: thickness, densityPercent: density, sync: true ); } }