// 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); }
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 } }