qzdoom/wadsrc/static/zscript/shared/player_inventory.txt
2018-12-02 14:34:08 +01:00

179 lines
No EOL
4.1 KiB
Text

extend class PlayerPawn
{
//===========================================================================
//
//
//
//===========================================================================
ui void InvNext()
{
Inventory next;
let old = InvSel;
if (InvSel != NULL)
{
if ((next = InvSel.NextInv()) != NULL)
{
InvSel = next;
}
else
{
// Select the first item in the inventory
InvSel = FirstInv();
}
if (InvSel) InvSel.DisplayNameTag();
}
player.inventorytics = 5*TICRATE;
if (old != InvSel)
{
A_PlaySound("misc/invchange", CHAN_AUTO, 1.0, false, ATTN_NONE);
}
}
//===========================================================================
//
// APlayerPawn :: InvPrev
//
//===========================================================================
ui void InvPrev()
{
Inventory item, newitem;
let old = InvSel;
if (InvSel != NULL)
{
if ((item = InvSel.PrevInv()) != NULL)
{
InvSel = item;
}
else
{
// Select the last item in the inventory
item = InvSel;
while ((newitem = item.NextInv()) != NULL)
{
item = newitem;
}
InvSel = item;
}
if (InvSel) InvSel.DisplayNameTag();
}
player.inventorytics = 5*TICRATE;
if (old != InvSel)
{
A_PlaySound("misc/invchange", CHAN_AUTO, 1.0, false, ATTN_NONE);
}
}
//===========================================================================
//
// APlayerPawn :: AddInventory
//
//===========================================================================
override void AddInventory (Inventory item)
{
// Adding inventory to a voodoo doll should add it to the real player instead.
if (player != NULL && player.mo != self && player.mo != NULL)
{
player.mo.AddInventory (item);
return;
}
Super.AddInventory (item);
// If nothing is selected, select this item.
if (InvSel == NULL && item.bInvBar)
{
InvSel = item;
}
}
//===========================================================================
//
// APlayerPawn :: RemoveInventory
//
//===========================================================================
override void RemoveInventory (Inventory item)
{
bool pickWeap = false;
// Since voodoo dolls aren't supposed to have an inventory, there should be
// no need to redirect them to the real player here as there is with AddInventory.
// If the item removed is the selected one, select something else, either the next
// item, if there is one, or the previous item.
if (player != NULL)
{
if (InvSel == item)
{
InvSel = item.NextInv ();
if (InvSel == NULL)
{
InvSel = item.PrevInv ();
}
}
if (InvFirst == item)
{
InvFirst = item.NextInv ();
if (InvFirst == NULL)
{
InvFirst = item.PrevInv ();
}
}
if (item == player.PendingWeapon)
{
player.PendingWeapon = WP_NOCHANGE;
}
if (item == player.ReadyWeapon)
{
// If the current weapon is removed, clear the refire counter and pick a new one.
pickWeap = true;
player.ReadyWeapon = NULL;
player.refire = 0;
}
}
Super.RemoveInventory (item);
if (pickWeap && player.mo == self && player.PendingWeapon == WP_NOCHANGE)
{
PickNewWeapon (NULL);
}
}
//===========================================================================
//
// APlayerPawn :: UseInventory
//
//===========================================================================
override bool UseInventory (Inventory item)
{
let itemtype = item.GetClass();
if (player.cheats & CF_TOTALLYFROZEN)
{ // You can't use items if you're totally frozen
return false;
}
if ((level.FROZEN) && (player == NULL || player.timefreezer == 0))
{
// Time frozen
return false;
}
if (!Super.UseInventory (item))
{
// Heretic and Hexen advance the inventory cursor if the use failed.
// Should this behavior be retained?
return false;
}
if (player == players[consoleplayer])
{
A_PlaySound(item.UseSound, CHAN_ITEM);
StatusBar.FlashItem (itemtype); // Fixme: This shouldn't be called from here, because it is in the UI.
}
return true;
}
}