Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        ////////////////

        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);
        }
Exemplo n.º 4
0
        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);
            }
        }