809 lines
27 KiB
Ucode
809 lines
27 KiB
Ucode
//=============================================================================
|
||
// The trader menu's list with player's current inventory
|
||
//=============================================================================
|
||
// Killing Floor Source
|
||
// Copyright (C) 2009 Tripwire Interactive LLC
|
||
// Dayle "Xienen" Flowers
|
||
//=============================================================================
|
||
class KFBuyMenuInvList extends GUIVertList;
|
||
|
||
// Settings
|
||
var float ItemBGWidthScale;
|
||
var float AmmoBGWidthScale;
|
||
var float ClipButtonWidthScale;
|
||
var float AmmoBGHeightScale;
|
||
var float ButtonBGHeightScale;
|
||
var float EquipmentBGWidthScale;
|
||
var float EquipmentBGHeightScale;
|
||
var float ItemBGYOffset;
|
||
var float AmmoSpacing;
|
||
var float ItemNameSpacing;
|
||
var float ButtonSpacing;
|
||
var float EquipmentBGXOffset;
|
||
var float EquipmentBGYOffset;
|
||
|
||
// Strings
|
||
var localized string EquipmentString;
|
||
var localized string BuyString;
|
||
var localized string PurchasedString;
|
||
var localized string RepairString;
|
||
|
||
// Display
|
||
var texture ItemBackgroundLeft;
|
||
var texture ItemBackgroundRight;
|
||
var texture SelectedItemBackgroundLeft;
|
||
var texture SelectedItemBackgroundRight;
|
||
var texture DisabledItemBackgroundLeft;
|
||
var texture DisabledItemBackgroundRight;
|
||
var texture AmmoBackground;
|
||
var texture ButtonBackground;
|
||
var texture HoverButtonBackground;
|
||
var texture DisabledButtonBackground;
|
||
|
||
var array<string> NameStrings;
|
||
var array<string> AmmoStrings;
|
||
var array<string> ClipPriceStrings;
|
||
var array<string> FillPriceStrings;
|
||
var array<texture> PerkTextures;
|
||
|
||
// state
|
||
var array<GUIBuyable> MyBuyables;
|
||
var int MouseOverIndex;
|
||
var int MouseOverXIndex;
|
||
|
||
var bool bNeedsUpdate;
|
||
var int UpdateCounter;
|
||
var float AutoFillCost;
|
||
|
||
delegate OnBuyClipClick(GUIBuyable Buyable);
|
||
delegate OnFillAmmoClick(GUIBuyable Buyable);
|
||
delegate OnBuyVestClick();
|
||
|
||
event InitComponent(GUIController MyController, GUIComponent MyOwner)
|
||
{
|
||
Super.InitComponent(MyController, MyOwner);
|
||
OnDrawItem = DrawInvItem;
|
||
UpdateMyBuyables();
|
||
}
|
||
|
||
event Opened(GUIComponent Sender)
|
||
{
|
||
super.Opened(Sender);
|
||
UpdateMyBuyables();
|
||
}
|
||
|
||
event Closed(GUIComponent Sender, bool bCancelled)
|
||
{
|
||
NameStrings.Remove(0, NameStrings.Length);
|
||
AmmoStrings.Remove(0, AmmoStrings.Length);
|
||
ClipPriceStrings.Remove(0, ClipPriceStrings.Length);
|
||
FillPriceStrings.Remove(0, FillPriceStrings.Length);
|
||
PerkTextures.Remove(0, PerkTextures.Length);
|
||
MyBuyables.Remove(0, MyBuyables.Length);
|
||
|
||
super.Closed(Sender, bCancelled);
|
||
}
|
||
|
||
function UpdateMyBuyables()
|
||
{
|
||
local class<KFVeterancyTypes> PlayerVeterancy;
|
||
local KFPlayerReplicationInfo KFPRI;
|
||
local GUIBuyable MyBuyable, KnifeBuyable, FragBuyable, SecondaryAmmoBuyable;
|
||
local Inventory CurInv;
|
||
local KFLevelRules KFLR;
|
||
local bool bHasDual, bHasDualCannon, bHasDual44, bhasDualM23, bHasDualFlareGuns, bHasGoldDualCannon;
|
||
local float CurAmmo, MaxAmmo;
|
||
local class<KFWeaponPickup> MyPickup, MyPrimaryPickup;
|
||
local int DualDivider, NumInvItems;
|
||
|
||
//Let's start with our current inventory
|
||
if ( PlayerOwner().Pawn.Inventory == none )
|
||
{
|
||
log("Inventory is none!");
|
||
return;
|
||
}
|
||
|
||
DualDivider = 1;
|
||
AutoFillCost = 0.00000;
|
||
|
||
//Clear the MyBuyables array
|
||
MyBuyables.Remove(0, MyBuyables.Length);
|
||
|
||
// Grab Players Veterancy for quick reference
|
||
if ( KFPlayerController(PlayerOwner()) != none && KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo).ClientVeteranSkill != none )
|
||
{
|
||
PlayerVeterancy = KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo).ClientVeteranSkill;
|
||
}
|
||
else
|
||
{
|
||
PlayerVeterancy = class'KFVeterancyTypes';
|
||
}
|
||
|
||
KFPRI = KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo);
|
||
|
||
//Check if we have dualies or dual hand cannons
|
||
for ( CurInv = PlayerOwner().Pawn.Inventory; CurInv != none; CurInv = CurInv.Inventory )
|
||
{
|
||
if ( KFWeapon(CurInv) != none )
|
||
{
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'DualDeaglePickup' )
|
||
{
|
||
bHasDualCannon = true;
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'GoldenDualDeaglePickup' )
|
||
{
|
||
bHasGoldDualCannon = true;
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'DualiesPickup' )
|
||
{
|
||
bHasDual = true;
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'Dual44MagnumPickup' )
|
||
{
|
||
bHasDual44 = true;
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'DualMK23Pickup' )
|
||
{
|
||
bhasDualM23 = true;
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).default.PickupClass == class'DualFlareRevolverPickup' )
|
||
{
|
||
bHasDualFlareGuns = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Grab the items for sale, we need the categories
|
||
foreach PlayerOwner().DynamicActors(class'KFLevelRules', KFLR)
|
||
break;
|
||
|
||
// Fill the Buyables
|
||
NumInvItems = 0;
|
||
for ( CurInv = PlayerOwner().Pawn.Inventory; CurInv != none; CurInv = CurInv.Inventory )
|
||
{
|
||
if ( CurInv.IsA('Ammunition') )
|
||
{
|
||
continue;
|
||
}
|
||
|
||
// No need for Syringe and Welder
|
||
if ( CurInv.IsA('Welder') || CurInv.IsA('Syringe') )
|
||
{
|
||
continue;
|
||
}
|
||
|
||
if ( CurInv.IsA('DualDeagle') || CurInv.IsA('Dual44Magnum') || CurInv.IsA('DualMK23Pistol')
|
||
|| CurInv.IsA('DualFlareRevolver') )
|
||
{
|
||
DualDivider = 2;
|
||
}
|
||
else
|
||
{
|
||
DualDivider = 1;
|
||
}
|
||
|
||
MyPickup = class<KFWeaponPickup>(KFWeapon(CurInv).default.PickupClass);
|
||
|
||
// if we already own dualies, we do not need the single 9mm in the list
|
||
if ( (bHasDual && MyPickup == class'SinglePickup') ||
|
||
(bHasDualCannon && MyPickup == class'DeaglePickup') ||
|
||
(bHasGoldDualCannon && MyPickup == class'GoldenDeaglePickup') ||
|
||
(bHasDual44 && MyPickup == class'Magnum44Pickup') ||
|
||
(bhasDualM23 && MyPickup == class'MK23Pickup') ||
|
||
(bHasDualFlareGuns && MyPickup == class'FlareRevolverPickup'))
|
||
{
|
||
continue;
|
||
}
|
||
|
||
if ( CurInv.IsA('KFWeapon') )
|
||
{
|
||
KFWeapon(CurInv).GetAmmoCount(MaxAmmo, CurAmmo);
|
||
|
||
MyBuyable = new class'GUIBuyable';
|
||
|
||
// This is a rather ugly way to support Secondary Ammo because all of the needed Data is jumbled between the Weapon and it's 2 Pickup Classes
|
||
if ( KFWeapon(CurInv).bHasSecondaryAmmo )
|
||
{
|
||
MyPrimaryPickup = MyPickup.default.PrimaryWeaponPickup;
|
||
|
||
MyBuyable.ItemName = MyPickup.default.ItemShortName;
|
||
MyBuyable.ItemDescription = KFWeapon(CurInv).default.Description;
|
||
MyBuyable.ItemCategorie = KFLR.EquipmentCategories[MyPickup.default.EquipmentCategoryID].EquipmentCategoryName;
|
||
MyBuyable.ItemImage = KFWeapon(CurInv).default.TraderInfoTexture;
|
||
MyBuyable.ItemWeaponClass = KFWeapon(CurInv).class;
|
||
MyBuyable.ItemAmmoClass = KFWeapon(CurInv).default.FireModeClass[0].default.AmmoClass;
|
||
MyBuyable.ItemPickupClass = MyPrimaryPickup;
|
||
MyBuyable.ItemCost = (float(MyPickup.default.Cost) * PlayerVeterancy.static.GetCostScaling(KFPRI, MyPickup)) / DualDivider;
|
||
MyBuyable.ItemAmmoCost = MyPrimaryPickup.default.AmmoCost * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPrimaryPickup) * PlayerVeterancy.static.GetMagCapacityMod(KFPRI, KFWeapon(CurInv));
|
||
MyBuyable.ItemFillAmmoCost = (int(((MaxAmmo - CurAmmo) * float(MyPrimaryPickup.default.AmmoCost)) / float(KFWeapon(CurInv).default.MagCapacity))) * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPrimaryPickup);
|
||
MyBuyable.ItemWeight = KFWeapon(CurInv).Weight;
|
||
MyBuyable.ItemPower = MyPickup.default.PowerValue;
|
||
MyBuyable.ItemRange = MyPickup.default.RangeValue;
|
||
MyBuyable.ItemSpeed = MyPickup.default.SpeedValue;
|
||
MyBuyable.ItemAmmoCurrent = CurAmmo;
|
||
MyBuyable.ItemAmmoMax = MaxAmmo;
|
||
MyBuyable.bMelee = (KFMeleeGun(CurInv) != none);
|
||
MyBuyable.bSaleList = false;
|
||
MyBuyable.ItemPerkIndex = MyPickup.default.CorrespondingPerkIndex;
|
||
|
||
if ( KFWeapon(CurInv) != none && KFWeapon(CurInv).SellValue != -1 )
|
||
{
|
||
MyBuyable.ItemSellValue = KFWeapon(CurInv).SellValue;
|
||
}
|
||
else
|
||
{
|
||
MyBuyable.ItemSellValue = MyBuyable.ItemCost * 0.75;
|
||
}
|
||
|
||
if ( !MyBuyable.bMelee && int(MaxAmmo) > int(CurAmmo))
|
||
{
|
||
AutoFillCost += MyBuyable.ItemFillAmmoCost;
|
||
}
|
||
|
||
MyBuyable.bSellable = !KFWeapon(CurInv).default.bKFNeverThrow;
|
||
|
||
MyBuyables.Insert(0, 1);
|
||
MyBuyables[0] = MyBuyable;
|
||
|
||
NumInvItems++;
|
||
|
||
KFWeapon(CurInv).GetSecondaryAmmoCount(MaxAmmo, CurAmmo);
|
||
|
||
MyBuyable = new class'GUIBuyable';
|
||
|
||
MyBuyable.ItemName = MyPickup.default.SecondaryAmmoShortName;
|
||
MyBuyable.ItemDescription = KFWeapon(CurInv).default.Description;
|
||
MyBuyable.ItemCategorie = KFLR.EquipmentCategories[MyPickup.default.EquipmentCategoryID].EquipmentCategoryName;
|
||
MyBuyable.ItemImage = KFWeapon(CurInv).default.TraderInfoTexture;
|
||
MyBuyable.ItemWeaponClass = KFWeapon(CurInv).class;
|
||
MyBuyable.ItemAmmoClass = KFWeapon(CurInv).default.FireModeClass[1].default.AmmoClass;
|
||
MyBuyable.ItemPickupClass = MyPickup;
|
||
MyBuyable.ItemCost = (float(MyPickup.default.Cost) * PlayerVeterancy.static.GetCostScaling(KFPRI, MyPickup)) / DualDivider;
|
||
MyBuyable.ItemAmmoCost = MyPickup.default.AmmoCost * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPickup) * PlayerVeterancy.static.GetMagCapacityMod(KFPRI, KFWeapon(CurInv));
|
||
MyBuyable.ItemFillAmmoCost = (int(((MaxAmmo - CurAmmo) * float(MyPickup.default.AmmoCost)) /* Secondary Mags always have a Mag Capacity of 1? / float(KFWeapon(CurInv).default.MagCapacity)*/)) * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPickup);
|
||
MyBuyable.ItemWeight = KFWeapon(CurInv).Weight;
|
||
MyBuyable.ItemPower = MyPickup.default.PowerValue;
|
||
MyBuyable.ItemRange = MyPickup.default.RangeValue;
|
||
MyBuyable.ItemSpeed = MyPickup.default.SpeedValue;
|
||
MyBuyable.ItemAmmoCurrent = CurAmmo;
|
||
MyBuyable.ItemAmmoMax = MaxAmmo;
|
||
MyBuyable.bMelee = (KFMeleeGun(CurInv) != none);
|
||
MyBuyable.bSaleList = false;
|
||
MyBuyable.ItemPerkIndex = MyPickup.default.CorrespondingPerkIndex;
|
||
|
||
if ( KFWeapon(CurInv) != none && KFWeapon(CurInv).SellValue != -1 )
|
||
{
|
||
MyBuyable.ItemSellValue = KFWeapon(CurInv).SellValue;
|
||
}
|
||
else
|
||
{
|
||
MyBuyable.ItemSellValue = MyBuyable.ItemCost * 0.75;
|
||
}
|
||
|
||
if ( !MyBuyable.bMelee && int(MaxAmmo) > int(CurAmmo))
|
||
{
|
||
AutoFillCost += MyBuyable.ItemFillAmmoCost;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MyBuyable.ItemName = MyPickup.default.ItemShortName;
|
||
MyBuyable.ItemDescription = KFWeapon(CurInv).default.Description;
|
||
MyBuyable.ItemCategorie = KFLR.EquipmentCategories[MyPickup.default.EquipmentCategoryID].EquipmentCategoryName;
|
||
MyBuyable.ItemImage = KFWeapon(CurInv).default.TraderInfoTexture;
|
||
MyBuyable.ItemWeaponClass = KFWeapon(CurInv).class;
|
||
MyBuyable.ItemAmmoClass = KFWeapon(CurInv).default.FireModeClass[0].default.AmmoClass;
|
||
MyBuyable.ItemPickupClass = MyPickup;
|
||
MyBuyable.ItemCost = (float(MyPickup.default.Cost) * PlayerVeterancy.static.GetCostScaling(KFPRI, MyPickup)) / DualDivider;
|
||
MyBuyable.ItemAmmoCost = MyPickup.default.AmmoCost * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPickup) * PlayerVeterancy.static.GetMagCapacityMod(KFPRI, KFWeapon(CurInv));
|
||
if( MyPickup == class'HuskGunPickup' )
|
||
{
|
||
MyBuyable.ItemFillAmmoCost = (int(((MaxAmmo - CurAmmo) * float(MyPickup.default.AmmoCost)) / float(MyPickup.default.BuyClipSize))) * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPickup);
|
||
}
|
||
else
|
||
{
|
||
MyBuyable.ItemFillAmmoCost = (int(((MaxAmmo - CurAmmo) * float(MyPickup.default.AmmoCost)) / float(KFWeapon(CurInv).default.MagCapacity))) * PlayerVeterancy.static.GetAmmoCostScaling(KFPRI, MyPickup);
|
||
}
|
||
MyBuyable.ItemWeight = KFWeapon(CurInv).Weight;
|
||
MyBuyable.ItemPower = MyPickup.default.PowerValue;
|
||
MyBuyable.ItemRange = MyPickup.default.RangeValue;
|
||
MyBuyable.ItemSpeed = MyPickup.default.SpeedValue;
|
||
MyBuyable.ItemAmmoCurrent = CurAmmo;
|
||
MyBuyable.ItemAmmoMax = MaxAmmo;
|
||
MyBuyable.bMelee = (KFMeleeGun(CurInv) != none);
|
||
MyBuyable.bSaleList = false;
|
||
MyBuyable.ItemPerkIndex = MyPickup.default.CorrespondingPerkIndex;
|
||
|
||
if ( KFWeapon(CurInv) != none && KFWeapon(CurInv).SellValue != -1 )
|
||
{
|
||
MyBuyable.ItemSellValue = KFWeapon(CurInv).SellValue;
|
||
}
|
||
else
|
||
{
|
||
MyBuyable.ItemSellValue = MyBuyable.ItemCost * 0.75;
|
||
}
|
||
|
||
if ( !MyBuyable.bMelee && int(MaxAmmo) > int(CurAmmo))
|
||
{
|
||
AutoFillCost += MyBuyable.ItemFillAmmoCost;
|
||
}
|
||
}
|
||
|
||
if ( KFWeapon(CurInv).bHasSecondaryAmmo )
|
||
{
|
||
MyBuyable.bSellable = false;
|
||
SecondaryAmmoBuyable = MyBuyable;
|
||
}
|
||
else if ( CurInv.IsA('Knife') )
|
||
{
|
||
MyBuyable.bSellable = false;
|
||
KnifeBuyable = MyBuyable;
|
||
}
|
||
else if ( CurInv.IsA('Frag') )
|
||
{
|
||
MyBuyable.bSellable = false;
|
||
FragBuyable = MyBuyable;
|
||
}
|
||
else if ( NumInvItems < 7 )
|
||
{
|
||
MyBuyable.bSellable = !KFWeapon(CurInv).default.bKFNeverThrow;
|
||
|
||
MyBuyables.Insert(0, 1);
|
||
MyBuyables[0] = MyBuyable;
|
||
|
||
NumInvItems++;
|
||
}
|
||
}
|
||
}
|
||
|
||
MyBuyable = new class'GUIBuyable';
|
||
|
||
MyBuyable.ItemName = class'BuyableVest'.default.ItemName;
|
||
MyBuyable.ItemDescription = class'BuyableVest'.default.ItemDescription;
|
||
MyBuyable.ItemCategorie = "";
|
||
MyBuyable.ItemImage = class'BuyableVest'.default.ItemImage;
|
||
MyBuyable.ItemAmmoCurrent = PlayerOwner().Pawn.ShieldStrength;
|
||
MyBuyable.ItemAmmoMax = 100;
|
||
MyBuyable.ItemCost = int(class'BuyableVest'.default.ItemCost * PlayerVeterancy.static.GetCostScaling(KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo), class'Vest'));
|
||
MyBuyable.ItemAmmoCost = MyBuyable.ItemCost / 100;
|
||
MyBuyable.ItemFillAmmoCost = int((100.0 - MyBuyable.ItemAmmoCurrent) * MyBuyable.ItemAmmoCost);
|
||
MyBuyable.bIsVest = true;
|
||
MyBuyable.bMelee = false;
|
||
MyBuyable.bSaleList = false;
|
||
MyBuyable.bSellable = false;
|
||
MyBuyable.ItemPerkIndex = class'BuyableVest'.default.CorrespondingPerkIndex;
|
||
|
||
MyBuyables[7] = none;
|
||
|
||
if ( SecondaryAmmoBuyable != none )
|
||
{
|
||
MyBuyables[8] = SecondaryAmmoBuyable;
|
||
}
|
||
else
|
||
{
|
||
MyBuyables[8] = KnifeBuyable;
|
||
}
|
||
|
||
MyBuyables[9] = FragBuyable;
|
||
MyBuyables[10] = MyBuyable;
|
||
|
||
//Now Update the list
|
||
UpdateList();
|
||
}
|
||
|
||
function UpdateList()
|
||
{
|
||
local int i;
|
||
|
||
if ( MyBuyables.Length < 1 )
|
||
{
|
||
bNeedsUpdate = true;
|
||
return;
|
||
}
|
||
|
||
// Clear the arrays
|
||
NameStrings.Remove(0, NameStrings.Length);
|
||
AmmoStrings.Remove(0, AmmoStrings.Length);
|
||
ClipPriceStrings.Remove(0, ClipPriceStrings.Length);
|
||
FillPriceStrings.Remove(0, FillPriceStrings.Length);
|
||
PerkTextures.Remove(0, PerkTextures.Length);
|
||
|
||
// Update the ItemCount and select the first item
|
||
ItemCount = MyBuyables.Length;
|
||
|
||
// Update the players inventory list
|
||
for ( i = 0; i < ItemCount; i++ )
|
||
{
|
||
if ( MyBuyables[i] == none )
|
||
continue;
|
||
|
||
NameStrings[i] = MyBuyables[i].ItemName; //@ "(" $ MyBuyables[i].ItemCategorie $ ")";
|
||
|
||
if ( !MyBuyables[i].bIsVest )
|
||
{
|
||
AmmoStrings[i] = int(MyBuyables[i].ItemAmmoCurrent)$"/"$int(MyBuyables[i].ItemAmmoMax);
|
||
|
||
if ( MyBuyables[i].ItemAmmoCurrent < MyBuyables[i].ItemAmmoMax )
|
||
{
|
||
if ( MyBuyables[i].ItemAmmoCost > MyBuyables[i].ItemFillAmmoCost )
|
||
{
|
||
ClipPriceStrings[i] = "<22>" @ int(MyBuyables[i].ItemFillAmmoCost);
|
||
}
|
||
else
|
||
{
|
||
ClipPriceStrings[i] = "<22>" @ int(MyBuyables[i].ItemAmmoCost);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
ClipPriceStrings[i] = "<22> 0";
|
||
}
|
||
|
||
FillPriceStrings[i] = "<22>" @ int(MyBuyables[i].ItemFillAmmoCost);
|
||
}
|
||
else
|
||
{
|
||
AmmoStrings[i] = int((MyBuyables[i].ItemAmmoCurrent / MyBuyables[i].ItemAmmoMax) * 100.0)$"%";
|
||
|
||
if ( MyBuyables[i].ItemAmmoCurrent == 0 )
|
||
{
|
||
FillPriceStrings[i] = BuyString @ ": <20>" @ int(MyBuyables[i].ItemFillAmmoCost);
|
||
}
|
||
else if ( MyBuyables[i].ItemAmmoCurrent == 100 )
|
||
{
|
||
FillPriceStrings[i] = PurchasedString;
|
||
}
|
||
else
|
||
{
|
||
FillPriceStrings[i] = RepairString @ ": <20>" @ int(MyBuyables[i].ItemFillAmmoCost);
|
||
}
|
||
}
|
||
|
||
|
||
if(MyBuyables[i].ItemPerkIndex == 7 )
|
||
{
|
||
PerkTextures[i] = class'KFBuyMenuSaleList'.default.NoPerkIcon;
|
||
}
|
||
else
|
||
{
|
||
PerkTextures[i] = class'KFGameType'.default.LoadedSkills[MyBuyables[i].ItemPerkIndex].default.OnHUDIcon;
|
||
}
|
||
}
|
||
|
||
if ( bNotify )
|
||
{
|
||
CheckLinkedObjects(Self);
|
||
}
|
||
|
||
if ( MyScrollBar != none )
|
||
{
|
||
MyScrollBar.AlignThumb();
|
||
}
|
||
}
|
||
|
||
function bool InternalOnClick(GUIComponent Sender)
|
||
{
|
||
local int NewIndex;
|
||
local float RelativeMouseX;
|
||
|
||
if ( IsInClientBounds() )
|
||
{
|
||
// Figure out which Item we're clicking on
|
||
NewIndex = CalculateIndex();
|
||
RelativeMouseX = Controller.MouseX - ClientBounds[0];
|
||
if ( RelativeMouseX < ActualWidth() * ItemBGWidthScale )
|
||
{
|
||
if ( MyBuyables[NewIndex] != none )
|
||
{
|
||
SetIndex(NewIndex);
|
||
MouseOverXIndex = 0;
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
RelativeMouseX -= ActualWidth() * (ItemBGWidthScale + AmmoBGWidthScale);
|
||
|
||
if ( RelativeMouseX > 0 )
|
||
{
|
||
if ( MyBuyables[NewIndex].bIsVest )
|
||
{
|
||
if ( (PlayerOwner().Pawn.ShieldStrength > 0 && PlayerOwner().PlayerReplicationInfo.Score >= MyBuyables[NewIndex].ItemAmmoCost) || PlayerOwner().PlayerReplicationInfo.Score >= MyBuyables[NewIndex].ItemCost )
|
||
{
|
||
OnBuyVestClick();
|
||
}
|
||
}
|
||
else if ( RelativeMouseX < ActualWidth() * (1.0 - ItemBGWidthScale - AmmoBGWidthScale) * ClipButtonWidthScale )
|
||
{
|
||
// Buy Clip
|
||
OnBuyClipClick(MyBuyables[NewIndex]);
|
||
}
|
||
else
|
||
{
|
||
// Fill Ammo
|
||
OnFillAmmoClick(MyBuyables[NewIndex]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function bool PreDraw(Canvas Canvas)
|
||
{
|
||
local float RelativeMouseX;
|
||
|
||
if ( IsInClientBounds() )
|
||
{
|
||
// Figure out which Item we're clicking on
|
||
MouseOverIndex = Top + ((Controller.MouseY - ClientBounds[1]) / ItemHeight);
|
||
if ( MouseOverIndex >= ItemCount )
|
||
{
|
||
MouseOverIndex = -1;
|
||
}
|
||
else
|
||
{
|
||
RelativeMouseX = Controller.MouseX - ClientBounds[0];
|
||
if ( RelativeMouseX < ActualWidth() * ItemBGWidthScale )
|
||
{
|
||
MouseOverXIndex = 0;
|
||
}
|
||
else
|
||
{
|
||
RelativeMouseX -= ActualWidth() * (ItemBGWidthScale + AmmoBGWidthScale);
|
||
|
||
if ( RelativeMouseX > 0 )
|
||
{
|
||
if ( RelativeMouseX < ActualWidth() * (1.0 - ItemBGWidthScale - AmmoBGWidthScale) * ClipButtonWidthScale )
|
||
{
|
||
MouseOverXIndex = 1;
|
||
}
|
||
else
|
||
{
|
||
MouseOverXIndex = 2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MouseOverXIndex = -1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MouseOverIndex = -1;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function DrawInvItem(Canvas Canvas, int CurIndex, float X, float Y, float Width, float Height, bool bSelected, bool bPending)
|
||
{
|
||
local float IconBGSize, ItemBGWidth, AmmoBGWidth, ClipButtonWidth, FillButtonWidth;
|
||
local float TempX, TempY;
|
||
local float StringHeight, StringWidth;
|
||
|
||
OnClickSound=CS_Click;
|
||
|
||
// Initialize the Canvas
|
||
Canvas.Style = 1;
|
||
// Canvas.Font = class'ROHUD'.Static.GetSmallMenuFont(Canvas);
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
|
||
if ( MyBuyables[CurIndex] == none )
|
||
{
|
||
if ( CurIndex < 7 )
|
||
{
|
||
return;
|
||
}
|
||
|
||
Canvas.SetPos(X + EquipmentBGXOffset, Y + Height - EquipmentBGYOffset - EquipmentBGHeightScale * Height);
|
||
Canvas.DrawTileStretched(AmmoBackground, EquipmentBGWidthScale * Width, EquipmentBGHeightScale * Height);
|
||
|
||
Canvas.SetDrawColor(175, 176, 158, 255);
|
||
Canvas.StrLen(EquipmentString, StringWidth, StringHeight);
|
||
Canvas.SetPos(X + EquipmentBGXOffset + ((EquipmentBGWidthScale * Width - StringWidth) / 2.0), Y + Height - EquipmentBGYOffset - EquipmentBGHeightScale * Height + ((EquipmentBGHeightScale * Height - StringHeight) / 2.0));
|
||
Canvas.DrawText(EquipmentString);
|
||
}
|
||
else
|
||
{
|
||
// Calculate Widths for all components
|
||
IconBGSize = Height;
|
||
ItemBGWidth = (Width * ItemBGWidthScale) - IconBGSize;
|
||
AmmoBGWidth = Width * AmmoBGWidthScale;
|
||
|
||
if ( !MyBuyables[CurIndex].bIsVest )
|
||
{
|
||
FillButtonWidth = ((1.0 - ItemBGWidthScale - AmmoBGWidthScale) * Width) - ButtonSpacing;
|
||
ClipButtonWidth = FillButtonWidth * ClipButtonWidthScale;
|
||
FillButtonWidth -= ClipButtonWidth;
|
||
}
|
||
else
|
||
{
|
||
FillButtonWidth = ((1.0 - ItemBGWidthScale - AmmoBGWidthScale) * Width);
|
||
}
|
||
|
||
// Offset for the Background
|
||
TempX = X;
|
||
TempY = Y;
|
||
|
||
// Draw Item Background
|
||
Canvas.SetPos(TempX, TempY);
|
||
|
||
if ( bSelected )
|
||
{
|
||
Canvas.DrawTileStretched(SelectedItemBackgroundLeft, IconBGSize, IconBGSize);
|
||
Canvas.SetPos(TempX + 4, TempY + 4);
|
||
Canvas.DrawTile(PerkTextures[CurIndex], IconBGSize - 8, IconBGSize - 8, 0, 0, 256, 256);
|
||
|
||
TempX += IconBGSize;
|
||
Canvas.SetPos(TempX, TempY + ItemBGYOffset);
|
||
Canvas.DrawTileStretched(SelectedItemBackgroundRight, ItemBGWidth, IconBGSize - (2.0 * ItemBGYOffset));
|
||
}
|
||
else
|
||
{
|
||
Canvas.DrawTileStretched(ItemBackgroundLeft, IconBGSize, IconBGSize);
|
||
Canvas.SetPos(TempX + 4, TempY + 4);
|
||
Canvas.DrawTile(PerkTextures[CurIndex], IconBGSize - 8, IconBGSize - 8, 0, 0, 256, 256);
|
||
|
||
TempX += IconBGSize;
|
||
Canvas.SetPos(TempX, TempY + ItemBGYOffset);
|
||
Canvas.DrawTileStretched(ItemBackgroundRight, ItemBGWidth, IconBGSize - (2.0 * ItemBGYOffset));
|
||
}
|
||
|
||
// Select Text color
|
||
if ( CurIndex == MouseOverIndex && MouseOverXIndex == 0 )
|
||
{
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
}
|
||
else
|
||
{
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
|
||
// Draw the item's name
|
||
Canvas.StrLen(NameStrings[CurIndex], StringWidth, StringHeight);
|
||
Canvas.SetPos(TempX + ItemNameSpacing, Y + ((Height - StringHeight) / 2.0));
|
||
Canvas.DrawText(NameStrings[CurIndex]);
|
||
|
||
// Draw the item's ammo status if it is not a melee weapon
|
||
if ( !MyBuyables[CurIndex].bMelee )
|
||
{
|
||
TempX += ItemBGWidth + AmmoSpacing;
|
||
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
Canvas.SetPos(TempX, TempY + ((Height - AmmoBGHeightScale * Height) / 2.0));
|
||
Canvas.DrawTileStretched(AmmoBackground, AmmoBGWidth, AmmoBGHeightScale * Height);
|
||
|
||
Canvas.SetDrawColor(175, 176, 158, 255);
|
||
Canvas.StrLen(AmmoStrings[CurIndex], StringWidth, StringHeight);
|
||
Canvas.SetPos(TempX + ((AmmoBGWidth - StringWidth) / 2.0), TempY + ((Height - StringHeight) / 2.0));
|
||
Canvas.DrawText(AmmoStrings[CurIndex]);
|
||
|
||
TempX += AmmoBGWidth + AmmoSpacing;
|
||
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
Canvas.SetPos(TempX, TempY + ((Height - ButtonBGHeightScale * Height) / 2.0));
|
||
|
||
if ( !MyBuyables[CurIndex].bIsVest )
|
||
{
|
||
if ( MyBuyables[CurIndex].ItemAmmoCurrent >= MyBuyables[CurIndex].ItemAmmoMax ||
|
||
(PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemFillAmmoCost && PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemAmmoCost) )
|
||
{
|
||
Canvas.DrawTileStretched(DisabledButtonBackground, ClipButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
else if ( CurIndex == MouseOverIndex && MouseOverXIndex == 1 )
|
||
{
|
||
Canvas.DrawTileStretched(HoverButtonBackground, ClipButtonWidth, ButtonBGHeightScale * Height);
|
||
}
|
||
else
|
||
{
|
||
Canvas.DrawTileStretched(ButtonBackground, ClipButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
|
||
Canvas.StrLen(ClipPriceStrings[CurIndex], StringWidth, StringHeight);
|
||
Canvas.SetPos(TempX + ((ClipButtonWidth - StringWidth) / 2.0), TempY + ((Height - StringHeight) / 2.0));
|
||
Canvas.DrawText(ClipPriceStrings[CurIndex]);
|
||
|
||
TempX += ClipButtonWidth + ButtonSpacing;
|
||
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
Canvas.SetPos(TempX, TempY + ((Height - ButtonBGHeightScale * Height) / 2.0));
|
||
|
||
if ( MyBuyables[CurIndex].ItemAmmoCurrent >= MyBuyables[CurIndex].ItemAmmoMax ||
|
||
(PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemFillAmmoCost && PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemAmmoCost) )
|
||
{
|
||
Canvas.DrawTileStretched(DisabledButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
else if ( CurIndex == MouseOverIndex && MouseOverXIndex == 2 )
|
||
{
|
||
Canvas.DrawTileStretched(HoverButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
}
|
||
else
|
||
{
|
||
Canvas.DrawTileStretched(ButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if ( (PlayerOwner().Pawn.ShieldStrength > 0 && PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemAmmoCost) ||
|
||
(PlayerOwner().Pawn.ShieldStrength <= 0 && PlayerOwner().PlayerReplicationInfo.Score < MyBuyables[CurIndex].ItemCost) ||
|
||
MyBuyables[CurIndex].ItemAmmoCurrent >= MyBuyables[CurIndex].ItemAmmoMax )
|
||
{
|
||
Canvas.DrawTileStretched(DisabledButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
else if ( CurIndex == MouseOverIndex && MouseOverXIndex >= 1 )
|
||
{
|
||
Canvas.DrawTileStretched(HoverButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
}
|
||
else
|
||
{
|
||
Canvas.DrawTileStretched(ButtonBackground, FillButtonWidth, ButtonBGHeightScale * Height);
|
||
Canvas.SetDrawColor(0, 0, 0, 255);
|
||
}
|
||
}
|
||
|
||
Canvas.StrLen(FillPriceStrings[CurIndex], StringWidth, StringHeight);
|
||
Canvas.SetPos(TempX + ((FillButtonWidth - StringWidth) / 2.0), TempY + ((Height - StringHeight) / 2.0));
|
||
Canvas.DrawText(FillPriceStrings[CurIndex]);
|
||
}
|
||
|
||
Canvas.SetDrawColor(255, 255, 255, 255);
|
||
}
|
||
}
|
||
|
||
function float InvItemHeight(Canvas c)
|
||
{
|
||
return (MenuOwner.ActualHeight() / 11) - 1.0;
|
||
}
|
||
|
||
defaultproperties
|
||
{
|
||
ItemBGWidthScale=0.51
|
||
AmmoBGWidthScale=0.19
|
||
ClipButtonWidthScale=0.45
|
||
AmmoBGHeightScale=0.5
|
||
ButtonBGHeightScale=0.5
|
||
EquipmentBGWidthScale=0.35
|
||
EquipmentBGHeightScale=0.60
|
||
ItemBGYOffset=6.0
|
||
AmmoSpacing=1.0
|
||
ItemNameSpacing=10.0
|
||
ButtonSpacing=3.0
|
||
EquipmentBGXOffset=3.0
|
||
EquipmentBGYOffset=6.0
|
||
|
||
EquipmentString="Equipment"
|
||
BuyString="Buy"
|
||
PurchasedString="Purchased"
|
||
RepairString="Repair"
|
||
|
||
OnPreDraw=PreDraw
|
||
|
||
ItemBackgroundLeft=Texture'KF_InterfaceArt_tex.Menu.Item_box_box'
|
||
ItemBackgroundRight=Texture'KF_InterfaceArt_tex.Menu.Item_box_bar'
|
||
SelectedItemBackgroundLeft=Texture'KF_InterfaceArt_tex.Menu.Item_box_box_Highlighted'
|
||
SelectedItemBackgroundRight=Texture'KF_InterfaceArt_tex.Menu.Item_box_bar_Highlighted'
|
||
DisabledItemBackgroundLeft=Texture'KF_InterfaceArt_tex.Menu.Item_box_box_disabled'
|
||
DisabledItemBackgroundRight=Texture'KF_InterfaceArt_tex.Menu.Item_box_bar_disabled'
|
||
AmmoBackground=Texture'KF_InterfaceArt_tex.Menu.Innerborder_transparent'
|
||
ButtonBackground=Texture'KF_InterfaceArt_tex.Menu.Button'
|
||
HoverButtonBackground=Texture'KF_InterfaceArt_tex.Menu.button_Highlight'
|
||
DisabledButtonBackground=Texture'KF_InterfaceArt_tex.Menu.button_disabled'
|
||
|
||
FontScale=FNS_Medium
|
||
GetItemHeight=KFBuyMenuInvList.InvItemHeight
|
||
}
|