public ShopMenu(List <Tuple <InvItem, int> > goods, int defaultChoice, OnMultiChoice chooseSlots) { Goods = goods; action = chooseSlots; List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < goods.Count; ii++) { int index = ii; bool canAfford = goods[index].Item2 <= DataManager.Instance.Save.ActiveTeam.Money; MenuText itemText = new MenuText(goods[index].Item1.GetDisplayName(), new Loc(2, 1), canAfford ? Color.White : Color.Red); MenuText itemPrice = new MenuText(goods[index].Item2.ToString(), new Loc(ItemMenu.ITEM_MENU_WIDTH - 8 * 4, 1), DirV.Up, DirH.Right, Color.Lime); flatChoices.Add(new MenuElementChoice(() => { choose(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 + ItemMenu.ITEM_MENU_WIDTH, summaryMenu.Bounds.Top - LINE_SPACE * 2 - GraphicsManager.MenuBG.TileHeight * 2), new Loc(GraphicsManager.ScreenWidth - 16, summaryMenu.Bounds.Top))); int buyLimit = DataManager.Instance.Save.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone) - DataManager.Instance.Save.ActiveTeam.GetInvCount(); Initialize(new Loc(16, 16), SELL_MENU_WIDTH, Text.FormatKey("MENU_SHOP_TITLE"), inv.ToArray(), startChoice, startPage, SLOTS_PER_PAGE, false, buyLimit); }
//TODO: merge with the Withdraw menu, maybe. don't worry about this right now because it's not used for anything public StorageMenu(Character player, bool multiSelect, OnMultiChoice storageChoice, Action refuseAction) { this.multiSelect = multiSelect; this.storageChoice = storageChoice; this.refuseAction = refuseAction; 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); 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); })); } 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))); Initialize(new Loc(16, 16), ItemMenu.ITEM_MENU_WIDTH, Text.FormatKey("MENU_STORAGE_TITLE"), inv.ToArray(), 0, 0, SLOTS_PER_PAGE); }
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 WithdrawChosenMenu(List <int> selections, int origIndex, bool continueOnChoose, OnMultiChoice storageChoice) { this.origIndex = origIndex; this.selections = selections; this.continueOnChoose = continueOnChoose; this.storageChoice = storageChoice; List <MenuTextChoice> choices = new List <MenuTextChoice>(); if (selections.Count > 1) { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_WITHDRAW"), TakeAction)); } else if (!continueOnChoose)//technically, continue on choose is currently representing withdraw for rescue reward... a situation where bag is irrelevant { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_WITHDRAW"), TakeAction)); } else { int selectionIndex = selections[0]; if (selectionIndex >= DataManager.Instance.DataIndices[DataManager.DataType.Item].Count) { selectionIndex = DataManager.Instance.Save.ActiveTeam.BoxStorage[selectionIndex - DataManager.Instance.DataIndices[DataManager.DataType.Item].Count].ID; } ItemData entry = DataManager.Instance.GetItem(selectionIndex); bool fitsInBag = DataManager.Instance.Save.ActiveTeam.GetInvCount() < DataManager.Instance.Save.ActiveTeam.GetMaxInvSlots(ZoneManager.Instance.CurrentZone); if (entry.MaxStack > 1 && !fitsInBag) { //stackable items can be added to a degree for (int jj = 0; jj < DataManager.Instance.Save.ActiveTeam.GetInvCount(); jj++) { //should we allow refills into held item slots? //ehhh it probably doesn't even matter if (DataManager.Instance.Save.ActiveTeam.GetInv(jj).ID == selectionIndex && DataManager.Instance.Save.ActiveTeam.GetInv(jj).HiddenValue < entry.MaxStack) { fitsInBag = true; break; } } } choices.Add(new MenuTextChoice(Text.FormatKey("MENU_ITEM_WITHDRAW"), TakeAction, fitsInBag, fitsInBag ? Color.White : Color.Red)); 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)); Initialize(new Loc(ItemMenu.ITEM_MENU_WIDTH + 16, 16), CalculateChoiceLength(choices, 72), choices.ToArray(), 0); }
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 BuyChosenMenu(List <int> selections, int origIndex, int itemID, OnMultiChoice chooseSlots) { this.origIndex = origIndex; this.selections = selections; action = chooseSlots; List <MenuTextChoice> choices = new List <MenuTextChoice>(); choices.Add(new MenuTextChoice(Text.FormatKey("MENU_SHOP_BUY"), BuyAction)); if (selections.Count == 1) { Data.ItemData entry = Data.DataManager.Instance.GetItem(itemID); if (entry.UsageType == Data.ItemData.UseType.Learn) { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_INFO"), () => { MenuManager.Instance.AddMenu(new TeachInfoMenu(itemID), false); })); } } choices.Add(new MenuTextChoice(Text.FormatKey("MENU_EXIT"), ExitAction)); Initialize(new Loc(ItemMenu.ITEM_MENU_WIDTH + 16, 16), CalculateChoiceLength(choices, 72), choices.ToArray(), 0); }