public override bool UseItem(Player player) { DaesPlayer modPlayer = player.GetModPlayer <DaesPlayer>(); if (modPlayer.hasEndlessAmmo) { return(false); } modPlayer.UnlockEndlessAmmo(); return(true); }
private void DrawAmmoPicker(SpriteBatch spriteBatch, DaesPlayer modPlayer) { int dx = LeftX; Color titleColor = new Color(Main.mouseTextColor, Main.mouseTextColor, Main.mouseTextColor, Main.mouseTextColor); Point mousePoint = new Point(Main.mouseX, Main.mouseY); Main.LocalPlayer.mouseInterface = true; Color locked = new Color(187, 187, 187, 187); float stringScale = 0.75f; float gap = 8; List <Item> ammos = new List <Item>(); float widestAmmoName = Main.fontMouseText.MeasureString($"{UNLOCK_AMOUNT} / {UNLOCK_AMOUNT}").X; float stringHeight = 0; foreach (Item ammoItem in DataContainer.AmmoItems) { if (ammoItem.ammo == AmmoPicker) { ammos.Add(ammoItem); Vector2 stringDimensions = Main.fontMouseText.MeasureString(ammoItem.Name); if (stringDimensions.X > widestAmmoName) { widestAmmoName = stringDimensions.X; } if (stringDimensions.Y > stringHeight) { stringHeight = stringDimensions.Y; } } } Vector2 stringLeftAlignedVertCenter = new Vector2(0, stringHeight / 2); widestAmmoName *= stringScale; stringHeight *= stringScale; float lineHeight = stringHeight * 0.6f; foreach (EndlessAmmoType ammoType in DataContainer.EndlessAmmoTypes) { if (ammoType.Type == AmmoPicker) { ChatManager.DrawColorCodedString(spriteBatch, Main.fontMouseText, ammoType.Title, new Vector2(dx, 84f), titleColor, 0, Vector2.Zero, Vector2.One * 0.75f); break; } } float unit = 56 * Main.inventoryScale; Rect dropdownRect = new Rect(dx, 105f, unit + widestAmmoName + gap, Main.inventoryScale * (52 + (56 * (ammos.Count - 1)))); // Math.Min(3, ammos.Count) LargeItemSlot.DrawPanel(spriteBatch, dropdownRect, Main.inventoryScale); Rect itemRect = new Rect(dx, 105, 52, 52); itemRect.Scale(Main.inventoryScale); Rect textRect = new Rect(dx, 105, unit + widestAmmoName, 52); textRect.Scale(1, Main.inventoryScale); Item hoveringAmmo = new Item(); int action = 0; int hoveringCount = 0; for (int i = 0; i < ammos.Count; i++) { Item ammo = ammos[i]; LargeItemSlot.DrawItem(spriteBatch, itemRect, ammo, Main.inventoryScale); Vector2 position = itemRect.Position(); position.X += unit; position.Y += unit / 2; int count = 0; bool unlocked = modPlayer.HasEndlessAmmoItemUnlocked(ammo.type); bool canUnlock = false; if (unlocked) { ChatManager.DrawColorCodedStringWithShadow( spriteBatch, Main.fontMouseText, ammo.Name, position, Color.White, 0f, stringLeftAlignedVertCenter, Vector2.One * stringScale ); } else { count = Math.Min(UNLOCK_AMOUNT, modPlayer.CountItemsInInventory(ammo.type)); canUnlock = count == UNLOCK_AMOUNT; position.Y -= lineHeight / 2; ChatManager.DrawColorCodedStringWithShadow( spriteBatch, Main.fontMouseText, ammo.Name, position, canUnlock ? UnlockColor : locked, 0f, stringLeftAlignedVertCenter, Vector2.One * stringScale ); position.Y += lineHeight; ChatManager.DrawColorCodedStringWithShadow( spriteBatch, Main.fontMouseText, $"{count} / {UNLOCK_AMOUNT}", position, canUnlock ? Color.White : locked, 0f, stringLeftAlignedVertCenter, Vector2.One * stringScale ); } if (itemRect.Contains(mousePoint)) { hoveringAmmo = ammo; } else if (textRect.Contains(mousePoint)) { hoveringCount = count; hoveringAmmo = ammo; if (unlocked) { action = 1; } else if (canUnlock) { action = 2; } else { action = 3; } } itemRect.Translate(0, unit); textRect.Translate(0, unit); } if (hoveringAmmo.type != ItemID.None) { switch (action) { case 0: Main.HoverItem = hoveringAmmo.Clone(); Main.HoverItem.ammo = 0; Main.HoverItem.material = false; Main.HoverItem.consumable = false; Main.instance.MouseText(hoveringAmmo.Name, hoveringAmmo.rare, 0); break; case 1: Main.instance.MouseText(string.Format("Select {0}", hoveringAmmo.Name)); if (Main.mouseLeft && Main.mouseLeftRelease) { modPlayer.SelectUnlockedAmmo(hoveringAmmo.type); Main.PlaySound(SoundID.Grab); AmmoPicker = AmmoID.None; } break; case 2: Main.instance.MouseText(string.Format("Unlock {0}", hoveringAmmo.Name)); if (Main.mouseLeft && Main.mouseLeftRelease) { if (modPlayer.UnlockEndlessAmmo(hoveringAmmo.type)) { Main.PlaySound(SoundID.Grab); } AmmoPicker = AmmoID.None; } break; case 3: Main.instance.MouseText(string.Format("Unlock {0} ({1} / {2})", hoveringAmmo.Name, hoveringCount, UNLOCK_AMOUNT)); break; } } if (!dropdownRect.Contains(mousePoint) && Main.mouseLeft && Main.mouseLeftRelease) { Main.PlaySound(SoundID.MenuClose); AmmoPicker = AmmoID.None; } }