public SwapGiveMenu(int defaultChoice, int openSpaces, OnMultiChoice chooseSlots) { action = chooseSlots; AllowedGoods = new List <int>(); int[] itemPresence = new int[DataManager.Instance.DataIndices[DataManager.DataType.Item].Count]; for (int ii = 0; ii < itemPresence.Length; ii++) { itemPresence[ii] += DataManager.Instance.Save.ActiveTeam.Storage[ii]; } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.GetInvCount(); ii++) { itemPresence[DataManager.Instance.Save.ActiveTeam.GetInv(ii).ID]++; } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++) { Character activeChar = DataManager.Instance.Save.ActiveTeam.Players[ii]; if (activeChar.EquippedItem.ID > -1) { itemPresence[activeChar.EquippedItem.ID]++; } } List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < itemPresence.Length; ii++) { int index = ii; if (itemPresence[index] > 0) { ItemEntrySummary itemEntry = DataManager.Instance.DataIndices[DataManager.DataType.Item].Entries[ii] as ItemEntrySummary; if (itemEntry.ContainsState <MaterialState>()) { AllowedGoods.Add(index); MenuText menuText = new MenuText(DataManager.Instance.GetItem(ii).GetIconName(), new Loc(2, 1)); MenuText menuCount = new MenuText("(" + itemPresence[index] + ")", new Loc(ItemMenu.ITEM_MENU_WIDTH - 8 * 4, 1), DirV.Up, DirH.Right, Color.White); flatChoices.Add(new MenuElementChoice(() => { }, true, menuText, menuCount)); } } } defaultChoice = Math.Min(defaultChoice, flatChoices.Count - 1); int startChoice = defaultChoice % SLOTS_PER_PAGE; int startPage = defaultChoice / SLOTS_PER_PAGE; List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); int buyLimit = DataManager.Instance.Save.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone) - DataManager.Instance.Save.ActiveTeam.GetInvCount(); Initialize(new Loc(16, 16), ItemMenu.ITEM_MENU_WIDTH, Text.FormatKey("MENU_SHOP_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE, false, new IntRange(openSpaces)); }
public SellMenu(int defaultChoice, OnChooseSlots chooseSlots) { action = chooseSlots; List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++) { Character activeChar = DataManager.Instance.Save.ActiveTeam.Players[ii]; int index = ii; if (activeChar.EquippedItem.ID > -1) { MenuText itemText = new MenuText((index + 1).ToString() + ": " + activeChar.EquippedItem.GetName(), new Loc(2, 1)); MenuText itemPrice = new MenuText(activeChar.EquippedItem.GetSellValue().ToString(), new Loc(ItemMenu.ITEM_MENU_WIDTH - 8 * 4, 1), DirV.Up, DirH.Right, Color.Lime); flatChoices.Add(new MenuElementChoice(() => { choose(new InvSlot(true, index)); }, true, itemText, itemPrice)); } } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.GetInvCount(); ii++) { int index = ii; MenuText itemText = new MenuText(DataManager.Instance.Save.ActiveTeam.GetInv(index).GetName(), new Loc(2, 1)); MenuText itemPrice = new MenuText(DataManager.Instance.Save.ActiveTeam.GetInv(index).GetSellValue().ToString(), new Loc(ItemMenu.ITEM_MENU_WIDTH - 8 * 4, 1), DirV.Up, DirH.Right, Color.Lime); flatChoices.Add(new MenuElementChoice(() => { choose(new InvSlot(false, index)); }, true, itemText, itemPrice)); } defaultChoice = Math.Min(defaultChoice, flatChoices.Count - 1); int startChoice = defaultChoice % SLOTS_PER_PAGE; int startPage = defaultChoice / SLOTS_PER_PAGE; List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); moneySummary = new MoneySummary(Rect.FromPoints(new Loc(16 + SELL_MENU_WIDTH, summaryMenu.Bounds.Top - LINE_SPACE * 2 - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, summaryMenu.Bounds.Top))); Initialize(new Loc(16, 16), SELL_MENU_WIDTH, Text.FormatKey("MENU_ITEM_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE, false, flatChoices.Count); }
public ItemMenu(int replaceSlot) { this.replaceSlot = replaceSlot; bool enableHeld = (replaceSlot == -2); bool enableBound = (replaceSlot != -1); List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++) { Character activeChar = DataManager.Instance.Save.ActiveTeam.Players[ii]; int index = ii; if (activeChar.EquippedItem.ID > -1) { flatChoices.Add(new MenuTextChoice((index + 1).ToString() + ": " + activeChar.EquippedItem.GetDisplayName(), () => { choose(-index - 1); }, enableHeld, !enableHeld ? Color.Red : Color.White)); } } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.GetInvCount(); ii++) { int index = ii; ItemData entry = DataManager.Instance.GetItem(DataManager.Instance.Save.ActiveTeam.GetInv(index).ID); bool enable = !entry.CannotDrop || enableBound; flatChoices.Add(new MenuTextChoice(DataManager.Instance.Save.ActiveTeam.GetInv(index).GetDisplayName(), () => { choose(index); }, enable, !enable ? Color.Red : Color.White)); } int actualChoice = Math.Min(Math.Max(0, defaultChoice), flatChoices.Count - 1); List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); int startPage = actualChoice / SLOTS_PER_PAGE; int startIndex = actualChoice % SLOTS_PER_PAGE; Initialize(new Loc(16, 16), ITEM_MENU_WIDTH, (replaceSlot == -2) ? Text.FormatKey("MENU_ITEM_TITLE") : Text.FormatKey("MENU_ITEM_SWAP_TITLE"), inv.ToArray(), startIndex, startPage, SLOTS_PER_PAGE); }
public WithdrawMenu(int defaultChoice, bool continueOnChoose, OnMultiChoice storageChoice) { this.continueOnChoose = continueOnChoose; this.storageChoice = storageChoice; availableItems = new List <int>(); List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Storage.Length; ii++) { int index = ii; if (DataManager.Instance.Save.ActiveTeam.Storage[ii] > 0) { availableItems.Add(index); Data.ItemData entry = Data.DataManager.Instance.GetItem(ii); MenuText menuText = new MenuText(DataManager.Instance.GetItem(ii).GetIconName(), new Loc(2, 1)); MenuText menuCount = new MenuText("(" + DataManager.Instance.Save.ActiveTeam.Storage[ii] + ")", new Loc(ItemMenu.ITEM_MENU_WIDTH - 8 * 4, 1), DirV.Up, DirH.Right, Color.White); flatChoices.Add(new MenuElementChoice(() => { choose(index); }, true, menuText, menuCount)); } } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.BoxStorage.Count; ii++) { int index = ii + DataManager.Instance.DataIndices[DataManager.DataType.Item].Count; availableItems.Add(index); flatChoices.Add(new MenuTextChoice(DataManager.Instance.Save.ActiveTeam.BoxStorage[ii].GetDisplayName(), () => { choose(index); })); } defaultChoice = Math.Min(defaultChoice, flatChoices.Count - 1); int startChoice = defaultChoice % SLOTS_PER_PAGE; int startPage = defaultChoice / SLOTS_PER_PAGE; List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); int withdrawLimit = continueOnChoose ? DataManager.Instance.Save.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone) - DataManager.Instance.Save.ActiveTeam.GetInvCount() : -1; Initialize(new Loc(16, 16), ItemMenu.ITEM_MENU_WIDTH, Text.FormatKey("MENU_STORAGE_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE, false, withdrawLimit); }
public AppraiseMenu(int defaultChoice, OnChooseSlots chooseSlots) { action = chooseSlots; List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++) { Character activeChar = DataManager.Instance.Save.ActiveTeam.Players[ii]; int index = ii; if (activeChar.EquippedItem.ID > -1) { bool enabled = DataManager.Instance.GetItem(activeChar.EquippedItem.ID).UsageType == ItemData.UseType.Box; flatChoices.Add(new MenuTextChoice((index + 1).ToString() + ": " + activeChar.EquippedItem.GetDisplayName(), () => { choose(new InvSlot(true, index)); }, enabled, enabled ? Color.White : Color.Red)); } } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.GetInvCount(); ii++) { int index = ii; bool enabled = DataManager.Instance.GetItem(DataManager.Instance.Save.ActiveTeam.GetInv(index).ID).UsageType == ItemData.UseType.Box; flatChoices.Add(new MenuTextChoice(DataManager.Instance.Save.ActiveTeam.GetInv(index).GetDisplayName(), () => { choose(new InvSlot(false, index)); }, enabled, enabled ? Color.White : Color.Red)); } defaultChoice = Math.Min(defaultChoice, flatChoices.Count - 1); int startChoice = defaultChoice % SLOTS_PER_PAGE; int startPage = defaultChoice / SLOTS_PER_PAGE; List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); moneySummary = new MoneySummary(Rect.FromPoints(new Loc(16 + ItemMenu.ITEM_MENU_WIDTH, summaryMenu.Bounds.Top - LINE_SPACE * 2 - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, summaryMenu.Bounds.Top))); Initialize(new Loc(16, 16), APPRAISE_MENU_WIDTH, Text.FormatKey("MENU_ITEM_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE, false, flatChoices.Count); }
public SwapShopMenu(List <Tuple <int, int[]> > goods, int[] priceList, int defaultChoice, OnChooseSlot chooseSlot) { Goods = goods; PriceList = priceList; action = chooseSlot; AllowedGoods = new List <int>(); itemPresence = new bool[DataManager.Instance.DataIndices[DataManager.DataType.Item].Count]; tradePresence = new bool[DataManager.Instance.DataIndices[DataManager.DataType.Item].Count]; for (int ii = 0; ii < itemPresence.Length; ii++) { if (DataManager.Instance.Save.ActiveTeam.Storage[ii] > 0) { updatePresence(ii); } } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.GetInvCount(); ii++) { updatePresence(DataManager.Instance.Save.ActiveTeam.GetInv(ii).ID); } for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++) { Character activeChar = DataManager.Instance.Save.ActiveTeam.Players[ii]; if (activeChar.EquippedItem.ID > -1) { updatePresence(activeChar.EquippedItem.ID); } } List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < goods.Count; ii++) { int index = ii; bool canView = false; bool canTrade = true; int wildcards = 0; int[] reqs = goods[ii].Item2; for (int jj = 0; jj < reqs.Length; jj++) { if (reqs[jj] > -1) { if (!itemPresence[reqs[jj]]) { canTrade = false; } else { canView = true; } } else { wildcards++; canView = true; } } if (canView) { AllowedGoods.Add(ii); ItemData itemEntry = DataManager.Instance.GetItem(goods[ii].Item1); if (PriceList[itemEntry.Rarity] > DataManager.Instance.Save.ActiveTeam.Money || wildcards > presenceCount) { canTrade = false; } flatChoices.Add(new MenuTextChoice(itemEntry.GetIconName(), () => { choose(index); }, canTrade, canTrade ? Color.White : Color.Red)); } } defaultChoice = Math.Min(defaultChoice, flatChoices.Count - 1); int startChoice = defaultChoice % SLOTS_PER_PAGE; int startPage = defaultChoice / SLOTS_PER_PAGE; List <MenuChoice[]> inv = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); tradeSummary = new TradeSummary(Rect.FromPoints(new Loc(16 + SWAP_MENU_WIDTH, summaryMenu.Bounds.Top - LINE_SPACE * 7 - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, summaryMenu.Bounds.Top))); moneySummary = new MoneySummary(Rect.FromPoints(new Loc(16 + SWAP_MENU_WIDTH, tradeSummary.Bounds.Top - LINE_SPACE * 2 - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, tradeSummary.Bounds.Top))); int buyLimit = DataManager.Instance.Save.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone) - DataManager.Instance.Save.ActiveTeam.GetInvCount(); Initialize(new Loc(16, 16), SWAP_MENU_WIDTH, Text.FormatKey("MENU_SHOP_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE); }
public ItemUnderfootMenu(int mapItemSlot) { this.mapItemSlot = mapItemSlot; MapItem mapItem = ZoneManager.Instance.CurrentMap.Items[mapItemSlot]; string itemName = mapItem.GetDungeonName(); List <MenuTextChoice> choices = new List <MenuTextChoice>(); bool invFull = (DungeonScene.Instance.ActiveTeam.GetInvCount() >= DungeonScene.Instance.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone)); bool hasItem = (DungeonScene.Instance.FocusedCharacter.EquippedItem.ID > -1); if (mapItem.IsMoney) { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_GROUND_GET"), PickupAction)); } else { Data.ItemData entry = Data.DataManager.Instance.GetItem(mapItem.Value); //disable pick up for full inv //disable swap for empty inv bool canGet = (DungeonScene.Instance.ActiveTeam.GetInvCount() < DungeonScene.Instance.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone)); if (!canGet && entry.MaxStack > 1) { //find an inventory slot that isn't full stack foreach (InvItem item in DungeonScene.Instance.ActiveTeam.EnumerateInv()) { if (item.ID == mapItem.Value && item.Cursed == mapItem.Cursed && item.HiddenValue < entry.MaxStack) { canGet = true; break; } } } bool hasItems = (DungeonScene.Instance.ActiveTeam.GetInvCount() > 0); choices.Add(new MenuTextChoice(Text.FormatKey("MENU_GROUND_GET"), PickupAction, canGet, canGet ? Color.White : Color.Red)); choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_REPLACE"), ReplaceAction, hasItems, hasItems ? Color.White : Color.Red)); switch (entry.UsageType) { case Data.ItemData.UseType.Eat: { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_EAT"), UseSelfAction, !mapItem.Cursed, mapItem.Cursed ? Color.Red : Color.White)); break; } case Data.ItemData.UseType.Drink: { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_DRINK"), UseSelfAction, !mapItem.Cursed, mapItem.Cursed ? Color.Red : Color.White)); break; } case Data.ItemData.UseType.Use: case Data.ItemData.UseType.UseOther: { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_USE"), UseSelfAction, !mapItem.Cursed, mapItem.Cursed ? Color.Red : Color.White)); break; } case Data.ItemData.UseType.Learn: { //if the character is teaching to himself, need to disable this choice if not compatible bool canLearn = TeachMenu.CanLearnSkill(DungeonScene.Instance.FocusedCharacter, DungeonScene.Instance.FocusedCharacter, BattleContext.FLOOR_ITEM_SLOT); choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_LEARN"), UseSelfAction, canLearn && !mapItem.Cursed, (canLearn && !mapItem.Cursed) ? Color.White : Color.Red)); break; } } //hold item bool allowHold = (!invFull || hasItem); if (hasItem) { ItemData equipEntry = DataManager.Instance.GetItem(DungeonScene.Instance.FocusedCharacter.EquippedItem.ID); if (equipEntry.CannotDrop) { allowHold = false; } } choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_HOLD"), HoldAction, allowHold, allowHold ? Color.White : Color.Red)); if (entry.UsageType == Data.ItemData.UseType.Throw) { int choiceIndex = choices.Count - 1; choices.Insert(choiceIndex, new MenuTextChoice(Text.FormatKey("MENU_ITEM_THROW"), ThrowAction)); } else { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_THROW"), ThrowAction)); } if (entry.UsageType == Data.ItemData.UseType.Learn) { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_INFO"), InfoAction)); } } choices.Add(new MenuTextChoice(Text.FormatKey("MENU_EXIT"), ExitAction)); if (!mapItem.IsMoney) { summaryMenu = new ItemSummary(Rect.FromPoints(new Loc(16, GraphicsManager.ScreenHeight - 8 - 4 * VERT_SPACE - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8))); summaryMenu.SetItem(new InvItem(mapItem.Value, mapItem.Cursed, mapItem.HiddenValue)); } int menuwidth = CalculateChoiceLength(choices, 72); Initialize(new Loc(GraphicsManager.ScreenWidth - 16 - menuwidth, 16), menuwidth, choices.ToArray(), 0, itemName); }