private void ShiftTextOver(On.Terraria.GameContent.UI.Elements.UICharacterListItem.orig_ctor orig, UICharacterListItem self, PlayerFileData data, int snapPointIndex) { orig(self, data, snapPointIndex); FieldInfo info = typeof(UICharacterListItem).GetField("_buttonLabel", BindingFlags.Instance | BindingFlags.NonPublic); UIText text = info.GetValue(self) as UIText; text.Left.Set(280, 0); UICharacter character = (UICharacter)_playerPanel.GetValue(self); Player player = (Player)_player.GetValue(character); MedalPlayer mp3 = player.GetModPlayer <MedalPlayer>(); if (mp3.player == player && mp3.medals.Count > 0) //expand only if medals are earned { self.Height.Set(152, 0); var elements = (List <UIElement>)Elements.GetValue(self); foreach (UIElement e in elements.Where(n => n.VAlign == 1)) { e.Top.Set(-56, 0); } } }
private void DrawSpecialCharacter(On.Terraria.GameContent.UI.Elements.UICharacterListItem.orig_DrawSelf orig, UICharacterListItem self, SpriteBatch spriteBatch) { orig(self, spriteBatch); Vector2 origin = new Vector2(self.GetDimensions().X, self.GetDimensions().Y); //hooray double reflection UICharacter character = (UICharacter)_playerPanel.GetValue(self); Player player = (Player)_player.GetValue(character); AbilityHandler mp = player.GetHandler(); CodexHandler mp2 = player.GetModPlayer <CodexHandler>(); MedalPlayer mp3 = player.GetModPlayer <MedalPlayer>(); if (mp == null || mp2 == null) { return; } for (int k = 0; k < player.armor.Length; k++) { if (player.armor[k].modItem != null && player.armor[k].modItem.mod.Name == StarlightRiver.Instance.Name) { player.VanillaUpdateEquip(player.armor[k]); } } float playerStamina = mp.StaminaMaxDefault; int codexProgress = (int)(mp2.Entries.Count(n => !n.Locked) / (float)mp2.Entries.Count * 100f); Rectangle box = new Rectangle((int)(origin + new Vector2(86, 66)).X, (int)(origin + new Vector2(86, 66)).Y, 80, 25); Rectangle box2 = new Rectangle((int)(origin + new Vector2(172, 66)).X, (int)(origin + new Vector2(86, 66)).Y, 104, 25); spriteBatch.Draw(ModContent.GetTexture("StarlightRiver/Assets/GUI/box"), box, Color.White); //Stamina box spriteBatch.Draw(ModContent.GetTexture("StarlightRiver/Assets/GUI/box"), box2, Color.White); //Codex box if (mp.AnyUnlocked) //Draw stamina if any unlocked { spriteBatch.Draw(ModContent.GetTexture("StarlightRiver/Assets/GUI/Stamina"), origin + new Vector2(91, 68), Color.White); Utils.DrawBorderString(spriteBatch, playerStamina + " SP", origin + new Vector2(118, 68), Color.White); } else//Myserious if locked { spriteBatch.Draw(ModContent.GetTexture("StarlightRiver/Assets/GUI/Stamina3"), origin + new Vector2(91, 68), Color.White); Utils.DrawBorderString(spriteBatch, "???", origin + new Vector2(118, 68), Color.White); } if (mp2.CodexState != 0)//Draw codex percentage if unlocked { var bookTex = mp2.CodexState == 2 ? ("StarlightRiver/Assets/GUI/Book2Closed") : ("StarlightRiver/Assets/GUI/Book1Closed"); var drawTex = ModContent.GetTexture(bookTex); spriteBatch.Draw(drawTex, origin + new Vector2(178, 60), Color.White); Utils.DrawBorderString(spriteBatch, codexProgress + "%", origin + new Vector2(212, 68), codexProgress >= 100 ? new Color(255, 205 + (int)(Math.Sin(Main.time / 50000 * 100) * 40), 50) : Color.White); } else//Mysterious if locked { spriteBatch.Draw(ModContent.GetTexture("StarlightRiver/Assets/GUI/BookLocked"), origin + new Vector2(178, 60), Color.White * 0.4f); Utils.DrawBorderString(spriteBatch, "???", origin + new Vector2(212, 68), Color.White); } var abilities = Ability.GetAbilityInstances(); //Draw ability Icons for (int k = 0; k < abilities.Length; k++) { var ability = abilities[(abilities.Length - 1) - k]; var texture = player.GetHandler().Unlocked(ability.GetType()) ? ability.PreviewTexture : ability.PreviewTextureOff; spriteBatch.Draw(ModContent.GetTexture(texture), origin + new Vector2(540 - k * 32, 64), Color.White); } if (player.statLifeMax > 400) //why vanilla dosent do this I dont know { spriteBatch.Draw(Main.heart2Texture, origin + new Vector2(80, 37), Color.White); } if (player.GetModPlayer <ShieldPlayer>().MaxShield > 0) { var barrierTex = ModContent.GetTexture(AssetDirectory.GUI + "ShieldHeartOver"); var barrierTex2 = ModContent.GetTexture(AssetDirectory.GUI + "ShieldHeart"); var barrierTex3 = ModContent.GetTexture(AssetDirectory.GUI + "ShieldHeartLine"); var pos = origin + new Vector2(80, 37); var width = barrierTex.Width / 2; var source = new Rectangle(0, 0, width, barrierTex.Height); var target = new Rectangle((int)pos.X, (int)pos.Y, width, barrierTex.Height); var lineTarget = new Rectangle((int)pos.X + width - 2, (int)pos.Y, 2, barrierTex.Height); var lineSource = new Rectangle(width - 2, 0, 2, barrierTex.Height); spriteBatch.Draw(barrierTex2, target, source, Color.White * 0.25f); spriteBatch.Draw(barrierTex, target, source, Color.White); spriteBatch.Draw(barrierTex3, lineTarget, lineSource, Color.White); } if (mp3.medals.Count > 0) //draw medals if any are earned { Rectangle boxMedals = new Rectangle((int)(origin.X + 10), (int)(origin.Y + 96), (int)self.GetDimensions().Width - 20, 50); spriteBatch.Draw(Main.magicPixel, boxMedals, new Color(43, 56, 101)); //Medal box for (int k = 0; k < mp3.medals.Count; k++) //Draw all medals { var medal = mp3.medals[k]; var tex = mp3.GetMedalTexture(medal.name); var frame = new Rectangle(36 * (medal.difficulty + 1), 0, 34, 46); spriteBatch.Draw(tex, origin + new Vector2(14 + k * 42, 98), frame, Color.White); var rectangle = new Rectangle((int)origin.X + 14 + k * 42, (int)origin.Y + 98, 34, 46); if (rectangle.Contains(Main.MouseScreen.ToPoint())) { Utils.DrawBorderString(spriteBatch, medal.ToString(), origin + new Vector2(286, 70), Color.White); } } } if ( //player is "complete" player.statLifeMax == 500 && player.statManaMax == 200 && playerStamina == 5 && codexProgress == 100 && !abilities.Any(n => !player.GetHandler().Unlocked(n.GetType())) ) { var borderTex = ModContent.GetTexture(AssetDirectory.GUI + "GoldBorder"); spriteBatch.Draw(borderTex, origin, Color.White); if (Main.rand.Next(3) == 0) { if (Main.rand.Next(4) > 0) { sparkles.AddParticle(new Particle(origin + new Vector2(Main.rand.Next(borderTex.Width), Main.rand.NextBool() ? 2 : borderTex.Height - 2), Vector2.Zero, 0, 0, new Color(255, 230, 0), 60, new Vector2(Main.rand.NextFloat(0.4f, 0.7f), 0), new Rectangle(0, 0, 15, 15))); } else { sparkles.AddParticle(new Particle(origin + new Vector2(Main.rand.NextBool() ? 2 : borderTex.Width - 2, Main.rand.Next(borderTex.Height)), Vector2.Zero, 0, 0, new Color(255, 230, 0), 60, new Vector2(Main.rand.NextFloat(0.4f, 0.7f), 0), new Rectangle(0, 0, 15, 15))); } } sparkles.DrawParticles(spriteBatch); } player.ResetEffects(); }