class GUIShowLibList extends GUIVertList; var array< GUIShowable > Elements; event InitComponent(GUIController MyController, GUIComponent MyOwner) { OnDrawItem=DrawBuyItem; Super.InitComponent(MyController,MyOwner); } function Clear() { if (Elements.Length == 0) return; Elements.Remove(0,Elements.Length); ItemCount = 0; IndexChanged(self); Super.Clear(); } function Add(GUIshowable Item) { local int NewIndex,PointValue,ComparePointValue; PointValue=Item.cost; if (Elements.Length > 0) { while (NewIndex < Elements.Length) { ComparePointValue=Elements[NewIndex].cost; if(ComparePointValue >= PointValue) break; NewIndex++; } } else NewIndex = Elements.Length; Elements.Insert(NewIndex, 1); Elements[NewIndex] = Item; ItemCount = Elements.Length; if (NewIndex == 0) SetIndex(0); else if ( bNotify ) CheckLinkedObjects(Self); if (MyScrollBar != None) MyScrollBar.AlignThumb(); } function string GetItemAtIndex( int idx ) { return Elements[idx].ItemName; } function SelectNewItem(GUIComponent Sender) { if(GUILibraryMenu(PageOwner) == None) return; if(Elements.Length <= 0) GUILibraryMenu(PageOwner).NewInfo(None); else GUILibraryMenu(PageOwner).NewInfo(Elements[Index]); } function bool OnDblClick(GUIComponent Sender) { // HAHAH typecasting nightmare. // All we're doing here is hacking the Items in the buymenu list so when you // double clickem, it runs a quick check to see if you can buy / sell this, and acts // like you had clicked the footer. // Because the Sender (the actual button we're double clicking) has fuck all to do with the GUIshowable itself, // we've gotta route everything back through the BuyMenu... // Care of Alex if (GUILibraryMenu(PageOwner).CanAfford(GUILibraryMenu(PageOwner).ItemsBox.List.Elements[GUILibraryMenu(PageOwner).ItemsBox.List.Index] ) && GUILibraryMenu(PageOwner).ItemsBox.List.Elements[GUILibraryMenu(PageOwner).ItemsBox.List.Index].CanButtonMe(PlayerOwner() ,GUILibraryMenu(PageOwner).myCategories.Index!=0) ) GUILibraryMenuFooter(GUILibraryMenu(PageOwner).t_Footer).OnFooterClick(GUILibraryMenuFooter(GUILibraryMenu(PageOwner).t_Footer).b_Buy); Return False; } function DrawBuyItem(Canvas c, int Item, float X, float Y, float W, float HT, bool bSelected, bool bPending) { local string tString; local float Iheight,Itop,Ileft,Iwidth; local eMenuState drawState; local int AdjustedValue; local float GameDifficulty; if (PlayerOwner().Level.Game != none) GameDifficulty = KFGameType(PlayerOwner().Level.Game).GetDifficulty(); if(!bSelected) drawState = MSAT_Blurry; else drawState = MSAT_Watched; Iheight = HT*0.808917; Itop = Y+(HT-Iheight)/2; Ileft = X; Iwidth = W; SectionStyle.Draw(c,drawState,Ileft,Itop,Iwidth,Iheight); Ileft = X*1.05; Iwidth = W-((ILeft-X)*2); if (Elements[Item].HasMe(PlayerOwner().Pawn)) AdjustedValue =int(Elements[Item].cost / GameDifficulty); else AdjustedValue = Elements[Item].cost; //Draw our nickname tString = GetItemAtIndex(Item); SectionStyle.DrawText(c,MSAT_Blurry,Ileft,Itop,Iwidth,(Iheight/2),TXTA_Center,tString,FNS_Medium); //Draw cost string Added to account for whether it is an item that's in myinventory (and therefore can only be sold) //tString = "Cost:"@Elements[Item].cost; if(Elements[Item].cost == AdjustedValue) tString = "Cost:"@AdjustedValue; else tString = "Sale Value:"@AdjustedValue; SectionStyle.DrawText(c,MSAT_Blurry,Ileft,Itop,Iwidth,(Iheight),TXTA_Center,tString,FNS_small); //Draw Weight string tString = "Weight:"@Elements[item].weight; SectionStyle.DrawText(c,MSAT_Blurry,Ileft,Itop,Iwidth,(Iheight+(Iheight /2)),TXTA_Center,tString,FNS_small); } function float BuyItemHeight(Canvas c) { if(GUIBuyItemsBox(MenuOwner) != None) return MenuOwner.ActualHeight() * 0.25; else return 0; } defaultproperties { // GetItemHeight=GUIBuyItemsList.BuyItemHeight StyleName="ItemBoxInfo" // OnChange=GUIBuyItemsList.SelectNewItem // OnDblClick=GUIBuyItemsList.OnDblClick bMouseOverSound=true OnClickSound=CS_Click }