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; } }