Ejemplo n.º 1
0
        // Because we want the damage tooltip to show our custom damage, we need to modify it
        public override void ModifyTooltips(List <TooltipLine> tooltips)
        {
            // Get the vanilla damage tooltip
            TooltipLine tt = tooltips.FirstOrDefault(x => x.Name == "Damage" && x.mod == "Terraria");

            if (tt != null)
            {
                // We want to grab the last word of the tooltip, which is the translated word for 'damage' (depending on what language the player is using)
                // So we split the string by whitespace, and grab the last word from the returned arrays to get the damage word, and the first to get the damage shown in the tooltip
                string[] splitText   = tt.text.Split(' ');
                string   damageValue = splitText.First();
                string   damageWord  = splitText.Last();
                // Change the tooltip text
                tt.text = damageValue + ' ' + Language.GetTextValue("Mods.Entrogic.ArcaneDamage") + damageWord;
            }
            bool hasGlove = false;

            foreach (Item it in Main.LocalPlayer.inventory)
            {
                if (it.type != ItemID.None && Entrogic.ItemSafe(it) && it.GetGlobalItem <EntrogicItem>().glove)
                {
                    hasGlove = true;
                    break;
                }
            }
            if (!hasGlove && !glove)
            {
                TooltipLine line = new TooltipLine(mod, mod.Name, $"你似乎还无法使用这张卡牌,请" +
                                                   $"{(NPC.AnyNPCs(NPCType<CardMerchant>()) ? "" : "等待卡牌商的到来并")}从卡牌商处购买一个手套以使用")
                {
                    overrideColor = Color.Red
                };
                tooltips.Add(line);
            }
            if (AEntrogicConfigClient.Instance.ShowUsefulInformations)
            {
                TooltipLine line = new TooltipLine(mod, mod.Name, $"抽取概率:{item.GetGlobalItem<EntrogicItem>().cardProb * 100f}%")
                {
                    overrideColor = Color.Gray
                };
                tooltips.Add(line);
            }
            ModifySafeTooltips(tooltips);
        }
Ejemplo n.º 2
0
        public override void Draw(SpriteBatch spriteBatch)
        {
            Player         player  = Main.LocalPlayer;
            EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>();

            if (IsActive)
            {
                base.Draw(spriteBatch);

                Vector2   bookPos   = new Vector2((Main.screenWidth - bookSize.X) / 2, (Main.screenHeight - bookSize.Y) / 2);
                Rectangle rectLeft  = new Rectangle((int)bookPos.X, (int)(bookPos.Y + bookSize.Y - 117), 72, 117);
                Rectangle rectRight = new Rectangle((int)(bookPos.X + bookSize.X - 72), (int)(bookPos.Y + bookSize.Y - 117), 72, 117);
                if (mouseRect.Intersects(rectLeft) && ePlayer.PageNum > 1)
                {
                    spriteBatch.Draw(Entrogic.Instance.GetTexture("UI/Books/书本_03"), new Vector2(rectLeft.X, rectLeft.Y), null, Color.White, 0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0f);
                }
                else
                {
                    string  page = (ePlayer.PageNum * 2 - 1).ToString();
                    Vector2 size = Main.fontMouseText.MeasureString(page) * 0.5f;
                    ChatManager.DrawColorCodedStringWithShadow(spriteBatch, Main.fontItemStack, page, new Vector2(bookPos.X + 34 - size.X, bookPos.Y + bookSize.Y - 86 - size.Y), Color.White, 0f, Vector2.Zero, new Vector2(1f));
                }
                int MaxPage = 1;
                if (ePlayer.GetHoldItem() != null)
                {
                    if (ePlayer.GetHoldItem().GetGlobalItem <EntrogicItem>().book)
                    {
                        MaxPage = ((ModBook)ePlayer.GetHoldItem().modItem).MaxPage;
                    }
                }
                if (mouseRect.Intersects(rectRight) && ePlayer.PageNum < MaxPage)
                {
                    spriteBatch.Draw(Entrogic.Instance.GetTexture("UI/Books/书本_02"), new Vector2(rectRight.X, rectRight.Y), null, Color.White, 0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0f);
                }
                else
                {
                    string  page = (ePlayer.PageNum * 2).ToString();
                    Vector2 size = Main.fontMouseText.MeasureString(page) * 0.5f;
                    ChatManager.DrawColorCodedStringWithShadow(spriteBatch, Main.fontItemStack, page, new Vector2(bookPos.X + bookSize.X - 34 - size.X, bookPos.Y + bookSize.Y - 86 - size.Y), Color.White, 0f, Vector2.Zero, new Vector2(1f));
                }

                #region Draw Text
                Vector2 space = new Vector2((Main.screenWidth - bookSize.X) / 2 + 38, (Main.screenHeight - bookSize.Y) / 2 + 46);
                //Main.spriteBatch.Draw(Main.magicPixel, space.ToRectangle(), Color.Yellow * .7f);
                //Main.spriteBatch.Draw(Main.magicPixel, GetOuterDimensions().ToRectangle(), Color.Red * .7f);
                DynamicSpriteFont font         = Entrogic.PixelFont;
                float             scale        = 1f;
                string            text         = " ";
                Color             baseColor    = Color.White;
                float             lineDistance = 0f;
                Item playerHeldItem            = player.HeldItem;
                if (Entrogic.ItemSafe(playerHeldItem))
                {
                    if (playerHeldItem.GetGlobalItem <EntrogicItem>().book)
                    {
                        ModBook itemBook = (ModBook)playerHeldItem.modItem;
                        if (itemBook.PageText[ePlayer.PageNum * 2 - 1] != null)
                        {
                            text = itemBook.PageText[ePlayer.PageNum * 2 - 1];
                        }
                        //if (((ModBook)ePlayer.GetHoldItem().modItem).font != null)
                        //    font = ((ModBook)ePlayer.GetHoldItem().modItem).font;
                        if (itemBook.textBaseColor != null)
                        {
                            baseColor = itemBook.textBaseColor;
                        }
                        lineDistance = itemBook.lineDistance[ePlayer.PageNum * 2 - 1];
                        scale        = itemBook.textScale[ePlayer.PageNum * 2 - 1];
                    }
                }
                float baseLineDistance = 46f * scale;
                { // 左书页文字
                    List <List <TextSnippet> > drawTextSnippets = WordwrapStringSmart(text, scale, baseColor, font, (int)(bookSize.X * 0.5f) - 72, -1);
                    float         position = 0f;
                    TextSnippet[] texts;
                    foreach (var snippetList in drawTextSnippets)
                    {
                        texts = snippetList.ToArray();
                        //float snippetListHeight = ChatManager.GetStringSize(font, texts, new Vector2(scale)).Y + lineDistance;
                        //Main.NewText($"Y: {ChatManager.GetStringSize(font, texts, Vector2.One).X}");
                        if (position > -baseLineDistance + lineDistance /*snippetListHeight*/)
                        {
                            //foreach (var snippet in snippetList)
                            //{
                            int hoveredSnippet = -1;
                            ChatManager.ConvertNormalSnippets(texts);
                            ChatManager.DrawColorCodedString(spriteBatch, font, texts, new Vector2(space.X, space.Y + position /*+ offset*/), baseColor, 0f, Vector2.Zero, new Vector2(scale), out hoveredSnippet, -1f);
                            //offset += 20;
                            //offset += texts.Max(t => (int)ChatManager.GetStringSize(Main.fontMouseText, texts, Vector2.One).X);
                            //if (hoveredSnippet > -1 && IsMouseHovering)
                            //{
                            //    BossChecklist.instance.BossLog.hoveredTextSnippet = texts[hoveredSnippet];
                            //    // BossChecklist change: Use hoveredTextSnippet to bypass clippingRectangle and draw order issues.
                            //    //texts[hoveredSnippet].OnHover();
                            //    //if (Main.mouseLeft && Main.mouseLeftRelease/* && Terraria.GameInput.PlayerInput.Triggers.JustReleased.MouseLeft*/) {
                            //    //	texts[hoveredSnippet].OnClick();
                            //    //}
                            //}
                        }
                        position += baseLineDistance + lineDistance /*snippetListHeight*/;
                        if (position > bookSize.Y - 48)
                        {
                            break;
                        }
                        //}
                    }
                }
                { // 右书页文字
                    if (ePlayer.GetHoldItem() != null)
                    {
                        if (ePlayer.GetHoldItem().GetGlobalItem <EntrogicItem>().book)
                        {
                            if (((ModBook)ePlayer.GetHoldItem().modItem).PageText[ePlayer.PageNum * 2] != null)
                            {
                                text = ((ModBook)ePlayer.GetHoldItem().modItem).PageText[ePlayer.PageNum * 2];
                            }
                            lineDistance = ((ModBook)ePlayer.GetHoldItem().modItem).lineDistance[ePlayer.PageNum * 2];
                            scale        = ((ModBook)ePlayer.GetHoldItem().modItem).textScale[ePlayer.PageNum * 2];
                        }
                    }

                    List <List <TextSnippet> > drawTextSnippets = WordwrapStringSmart(text, scale, baseColor, font, (int)(bookSize.X * 0.5f) - 78, -1);
                    float         position = 0f;
                    TextSnippet[] texts;
                    foreach (var snippetList in drawTextSnippets)
                    {
                        texts = snippetList.ToArray();
                        //float snippetListHeight = ChatManager.GetStringSize(font, texts, new Vector2(scale)).Y + lineDistance;
                        //Main.NewText($"Y: {ChatManager.GetStringSize(font, texts, Vector2.One).X}");
                        if (position > -baseLineDistance + lineDistance /*snippetListHeight*/)
                        {
                            //foreach (var snippet in snippetList)
                            //{
                            int hoveredSnippet = -1;
                            ChatManager.ConvertNormalSnippets(texts);
                            ChatManager.DrawColorCodedString(spriteBatch, font, texts, new Vector2(space.X + bookSize.X * 0.5f, space.Y + position /*+ offset*/), baseColor, 0f, Vector2.Zero, new Vector2(scale), out hoveredSnippet, -1f);
                            //offset += 20;
                            //offset += texts.Max(t => (int)ChatManager.GetStringSize(Main.fontMouseText, texts, Vector2.One).X);
                            //if (hoveredSnippet > -1 && IsMouseHovering)
                            //{
                            //    BossChecklist.instance.BossLog.hoveredTextSnippet = texts[hoveredSnippet];
                            //    // BossChecklist change: Use hoveredTextSnippet to bypass clippingRectangle and draw order issues.
                            //    //texts[hoveredSnippet].OnHover();
                            //    //if (Main.mouseLeft && Main.mouseLeftRelease/* && Terraria.GameInput.PlayerInput.Triggers.JustReleased.MouseLeft*/) {
                            //    //	texts[hoveredSnippet].OnClick();
                            //    //}
                            //}
                        }
                        position += baseLineDistance + lineDistance /*snippetListHeight*/;
                        if (position > bookSize.Y - 48)
                        {
                            break;
                        }
                        //}
                    }
                }
                #endregion
            }
        }