Пример #1
0
        public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            Vector2 playerCenter = Main.player[projectile.owner].Center;
            Vector2 center       = projectile.Center;
            Vector2 distToProj   = playerCenter - projectile.Center;
            float   rotation     = distToProj.RotatedBy(MathHelper.ToRadians(180f)).ToRotation();
            float   distance     = distToProj.Length();

            Texture2D texture       = Main.projectileTexture[projectile.type];
            Rectangle rectangle     = new Rectangle(0, 0, 10, 22);
            Rectangle hookRectangle = new Rectangle(10, 0, 26, 22);

            while (distance >= hookRectangle.Width * 0.5f && !float.IsNaN(distance))
            {
                distToProj.Normalize();
                distToProj *= rectangle.Width;
                center     += distToProj;
                distToProj  = playerCenter - center;
                distance    = distToProj.Length();
                Color chainColor = PAFMUtils.LightAtPosition(center);

                spriteBatch.Draw(texture, center - Main.screenPosition, rectangle, chainColor, rotation, rectangle.Size() * 0.5f, projectile.scale, SpriteEffects.None, 0f);
            }

            spriteBatch.Draw(texture, projectile.Center - Main.screenPosition, hookRectangle, lightColor, rotation, hookRectangle.Size() * 0.5f, projectile.scale, SpriteEffects.None, 0f);

            return(false);
        }
Пример #2
0
        public override void ModifyTooltips(List <TooltipLine> tooltips)
        {
            Player player = Main.player[item.owner];

            if (player == Main.player[Main.myPlayer])
            {
                foreach (TooltipLine line in tooltips)
                {
                    if (line.mod == "Terraria" && line.Name == "Tooltip0")
                    {
                        line.text += "\n";

                        if (!PAFMUtils.PressingKey(Keys.LeftShift))
                        {
                            line.text += "Hold shift for attack info";
                        }
                        else
                        {
                            line.text +=
                                "-Left-click: Fire a Solar Eruption triad\nwhich releases Daybreaks towards your cursor\n" +
                                "-Right-click: Target an enemy for triad Daybreaks to home into\n" +
                                "-Left-middle-click: Launch a Daybreak\n" +
                                "-Right-middle-click: Launch a homing Daybreak";
                        }
                    }
                }
            }
        }
Пример #3
0
        public override void PostUpdate()
        {
            for (int i = 0; i < Main.maxPlayers; i++)
            {
                Player target = Main.player[i];

                if (PAFMUtils.CanPlayerBeHitInPVP(player, target))
                {
                    Ichor(target, player);
                }
            }
            for (int i = 0; i < Main.maxNPCs; i++)
            {
                NPC target = Main.npc[i];

                if (!target.active)
                {
                    continue;
                }

                if (player.Hitbox.Intersects(target.Hitbox))
                {
                    if (target.CanBeChasedBy(player))
                    {
                        Ichor(target, player);
                    }
                }
            }
        }
        public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            Texture2D texture = Main.projectileTexture[projectile.type];
            Color     color   = lightColor;

            // Some rectangle presets for different parts of the chain.
            Rectangle chainHandle  = new Rectangle(0, 2, texture.Width, 40);
            Rectangle chainLinkEnd = new Rectangle(0, 68, texture.Width, 18);
            Rectangle chainLink    = new Rectangle(0, 46, texture.Width, 18);
            Rectangle chainHead    = new Rectangle(0, 90, texture.Width, 48);

            // If the chain isn't moving, stop drawing all of its components.
            if (projectile.velocity == Vector2.Zero)
            {
                return(false);
            }
            float     chainDistance = projectile.velocity.Length() + 16f;
            bool      distanceCheck = chainDistance < 100f;
            Vector2   direction     = Vector2.Normalize(projectile.velocity);
            Rectangle rectangle     = chainHandle;
            Vector2   yOffset       = new Vector2(0f, Main.player[projectile.owner].gfxOffY);
            float     rotation      = direction.ToRotation() + MathHelper.ToRadians(-90f);

            spriteBatch.Draw(texture, projectile.Center - Main.screenPosition + yOffset, rectangle, color, rotation, rectangle.Size() / 2f - Vector2.UnitY * 4f, projectile.scale, SpriteEffects.None, 0f);
            chainDistance -= 40f * projectile.scale;
            Vector2 position = projectile.Center;

            position += direction * projectile.scale * 24f;
            rectangle = chainLinkEnd;
            if (chainDistance > 0f)
            {
                float chains = 0f;
                while (chains + 1f < chainDistance)
                {
                    if (chainDistance - chains < rectangle.Height)
                    {
                        rectangle.Height = (int)(chainDistance - chains);
                    }
                    spriteBatch.Draw(texture, position - Main.screenPosition + yOffset, rectangle, PAFMUtils.LightAtPosition(position), rotation, new Vector2(rectangle.Width / 2, 0f), projectile.scale, SpriteEffects.None, 0f);
                    chains   += rectangle.Height * projectile.scale;
                    position += direction * rectangle.Height * projectile.scale;
                }
            }
            Vector2 chainEnd = position;

            position  = projectile.Center;
            position += direction * projectile.scale * 24f;
            rectangle = chainLink;
            int   offset            = distanceCheck ? 9 : 18;
            float chainLinkDistance = chainDistance;

            if (chainDistance > 0f)
            {
                float chains    = 0f;
                float increment = chainLinkDistance / offset;
                chains   += increment * 0.25f;
                position += direction * increment * 0.25f;
                for (int i = 0; i < offset; i++)
                {
                    float spacing = increment;
                    if (i == 0)
                    {
                        spacing *= 0.75f;
                    }
                    spriteBatch.Draw(texture, position - Main.screenPosition + yOffset, rectangle, PAFMUtils.LightAtPosition(position), rotation, new Vector2(rectangle.Width / 2, 0f), projectile.scale, SpriteEffects.None, 0f);
                    chains   += spacing;
                    position += direction * spacing;
                }
            }
            rectangle = chainHead;
            spriteBatch.Draw(texture, chainEnd - Main.screenPosition + yOffset, rectangle, PAFMUtils.LightAtPosition(chainEnd), rotation, texture.Frame().Top(), projectile.scale, SpriteEffects.None, 0f);
            chainHeadPosition = chainEnd;

            return(false);
        }