protected bool CastVirtualTargetDowse(Player player, Vector2 aiming_at, int tile_range) { var mymod = (DowsingMod)this.mod; var modplayer = player.GetModPlayer <DowsingPlayer>(); bool dowsed = false; int traveled = 0; this.CurrentBeamTravelDistance = 0; this.CastDowseBeamWithinCone(player, aiming_at, new Utils.PerLinePoint(delegate(int tile_x, int tile_y) { if (!TileWorldHelpers.IsWithinMap(tile_x, tile_y) || traveled >= tile_range) { return(false); } Vector2 from = modplayer.WitchingData.VirtualTargetPosition; float dist_x = (from.X / 16f) - (float)tile_x; float dist_y = (from.Y / 16f) - (float)tile_y; float dist = (float)Math.Sqrt(dist_x * dist_x + dist_y * dist_y); dowsed = dist <= 8; if (dowsed) { PsychokineticChargeDebuff.ApplyForTargetIfAnew(mymod, player); this.VirtualTargetIsDowsed(player); this.RenderRodHitFX(player, tile_x, tile_y); } else { traveled++; if (TileHelpers.IsSolid(Framing.GetTileSafely(tile_x, tile_y), false, false)) { traveled++; } } this.CurrentBeamTravelDistance = traveled; if ((mymod.DEBUGFLAGS & 1) != 0) { var dust = Dust.NewDustPerfect(new Vector2(tile_x * 16, tile_y * 16), 259, Vector2.Zero, 0, Color.Red, 0.75f); dust.noGravity = true; } return(!dowsed); })); return(dowsed); }
protected bool CastNpcTargetDowse(Player player, Vector2 aiming_at, int npc_who, int tile_range) { var mymod = (DowsingMod)this.mod; var modplayer = player.GetModPlayer <DowsingPlayer>(); bool dowsed = false; int traveled = 0; this.CurrentBeamTravelDistance = 0; this.CastDowseBeamWithinCone(player, aiming_at, new Utils.PerLinePoint(delegate(int tile_x, int tile_y) { if (!TileWorldHelpers.IsWithinMap(tile_x, tile_y) || traveled >= tile_range) { return(false); } NPC npc = Main.npc[npc_who]; if (npc == null || !npc.active) { return(false); } dowsed = npc.getRect().Intersects(new Rectangle((tile_x - 1) * 16, (tile_y - 1) * 16, 32, 32)); if (dowsed) { PsychokineticChargeDebuff.ApplyForTargetIfAnew(mymod, player); this.RenderRodHitFX(player, tile_x, tile_y); } else { traveled++; if (TileHelpers.IsSolid(Framing.GetTileSafely(tile_x, tile_y))) { traveled++; } } this.CurrentBeamTravelDistance = traveled; if ((mymod.DEBUGFLAGS & 1) != 0) { var dust = Dust.NewDustPerfect(new Vector2(tile_x * 16, tile_y * 16), 259, Vector2.Zero, 0, Color.Red, 0.75f); dust.noGravity = true; } return(!dowsed); })); return(dowsed); }
//////////////// protected bool CastBlockDowse(Player player, Vector2 aiming_at, int tile_range, int tile_type) { var mymod = (DowsingMod)this.mod; var modplayer = player.GetModPlayer <DowsingPlayer>(); bool dowsed = false; int traveled = 0; this.CurrentBeamTravelDistance = 0; this.CastDowseBeamWithinCone(player, aiming_at, new Utils.PerLinePoint(delegate(int tile_x, int tile_y) { if (!TileWorldHelpers.IsWithinMap(tile_x, tile_y) || traveled >= tile_range) { return(false); } dowsed = modplayer.TileData.ApplyDowseIfTileIsTarget(tile_x, tile_y, tile_type); if (dowsed) { PsychokineticChargeDebuff.ApplyForTilesIfAnew(mymod, player); this.RenderRodHitFX(player, tile_x, tile_y); } else { traveled++; if (TileHelpers.IsSolid(Framing.GetTileSafely(tile_x, tile_y), false, false)) { traveled++; } } this.CurrentBeamTravelDistance = traveled; if ((mymod.DEBUGFLAGS & 1) != 0) { var dust = Dust.NewDustPerfect(new Vector2(tile_x * 16, tile_y * 16), 259, Vector2.Zero, 0, Color.Red, 0.75f); dust.noGravity = true; } return(!dowsed); })); return(dowsed); }
private void UpdatePsychokineticState() { var mymod = (DowsingMod)this.mod; if (this.player.FindBuffIndex(mymod.BuffType <PsychokineticChargeDebuff>()) >= 0) { return; } Item held_item = this.player.HeldItem; if (this.TileData.CountDowsings() > 0) { PsychokineticChargeDebuff.ApplyForTilesIfAnew(mymod, this.player); } if (this.WitchingData.HasTarget() || this.DiviningData.HasTarget()) { PsychokineticChargeDebuff.ApplyForTargetIfAnew(mymod, this.player); } }