mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-14 08:31:23 +00:00
- took the last methods aside from Tick and Serialize out of AInventory.
This commit is contained in:
parent
db814dc333
commit
2cb0b2db87
6 changed files with 33 additions and 55 deletions
|
@ -1328,7 +1328,7 @@ void G_PlayerFinishLevel (int player, EFinishLevelType mode, int flags)
|
||||||
{
|
{
|
||||||
if (!(it->ObjectFlags & OF_EuthanizeMe))
|
if (!(it->ObjectFlags & OF_EuthanizeMe))
|
||||||
{
|
{
|
||||||
it->DepleteOrDestroy();
|
DepleteOrDestroy(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,57 +174,15 @@ DEFINE_ACTION_FUNCTION(AInventory, PrintPickupMessage)
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void AInventory::DepleteOrDestroy ()
|
void DepleteOrDestroy (AInventory *item)
|
||||||
{
|
{
|
||||||
IFVIRTUAL(AInventory, DepleteOrDestroy)
|
IFVIRTUALPTR(item, AInventory, DepleteOrDestroy)
|
||||||
{
|
{
|
||||||
VMValue params[1] = { (DObject*)this };
|
VMValue params[1] = { item };
|
||||||
VMCall(func, params, 1, nullptr, 0);
|
VMCall(func, params, 1, nullptr, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// AInventory :: PrevInv
|
|
||||||
//
|
|
||||||
// Returns the previous item with IF_INVBAR set.
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
AInventory *AInventory::PrevInv ()
|
|
||||||
{
|
|
||||||
AInventory *lastgood = NULL;
|
|
||||||
AInventory *item = Owner->Inventory;
|
|
||||||
|
|
||||||
while (item != NULL && item != this)
|
|
||||||
{
|
|
||||||
if (item->ItemFlags & IF_INVBAR)
|
|
||||||
{
|
|
||||||
lastgood = item;
|
|
||||||
}
|
|
||||||
item = item->Inventory;
|
|
||||||
}
|
|
||||||
return lastgood;
|
|
||||||
}
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// AInventory :: NextInv
|
|
||||||
//
|
|
||||||
// Returns the next item with IF_INVBAR set.
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
AInventory *AInventory::NextInv ()
|
|
||||||
{
|
|
||||||
AInventory *item = Inventory;
|
|
||||||
|
|
||||||
while (item != NULL && !(item->ItemFlags & IF_INVBAR))
|
|
||||||
{
|
|
||||||
item = item->Inventory;
|
|
||||||
}
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// AInventory :: CallTryPickup
|
// AInventory :: CallTryPickup
|
||||||
|
|
|
@ -73,11 +73,6 @@ public:
|
||||||
virtual void Serialize(FSerializer &arc) override;
|
virtual void Serialize(FSerializer &arc) override;
|
||||||
virtual void Tick() override;
|
virtual void Tick() override;
|
||||||
|
|
||||||
void DepleteOrDestroy (); // virtual on the script side.
|
|
||||||
|
|
||||||
AInventory *PrevInv(); // Returns the previous item with IF_INVBAR set.
|
|
||||||
AInventory *NextInv(); // Returns the next item with IF_INVBAR set.
|
|
||||||
|
|
||||||
TObjPtr<AActor*> Owner; // Who owns this item? NULL if it's still a pickup.
|
TObjPtr<AActor*> Owner; // Who owns this item? NULL if it's still a pickup.
|
||||||
int Amount; // Amount of item this instance has
|
int Amount; // Amount of item this instance has
|
||||||
int MaxAmount; // Max amount of item this instance can have
|
int MaxAmount; // Max amount of item this instance can have
|
||||||
|
@ -95,5 +90,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
bool CallTryPickup(AInventory *item, AActor *toucher, AActor **toucher_return = nullptr);
|
bool CallTryPickup(AInventory *item, AActor *toucher, AActor **toucher_return = nullptr);
|
||||||
|
void DepleteOrDestroy(AInventory *item); // virtual on the script side.
|
||||||
|
|
||||||
#endif //__A_PICKUPS_H__
|
#endif //__A_PICKUPS_H__
|
||||||
|
|
|
@ -2085,6 +2085,30 @@ class CommandDrawInventoryBar : public SBarInfoCommand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AInventory *PrevInv(AInventory *item)
|
||||||
|
{
|
||||||
|
AInventory *retval = nullptr;
|
||||||
|
IFVM(Inventory, PrevInv)
|
||||||
|
{
|
||||||
|
VMValue param = item;
|
||||||
|
VMReturn ret((void**)&retval);
|
||||||
|
VMCall(func, ¶m, 1, &ret, 1);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
AInventory *NextInv(AInventory *item)
|
||||||
|
{
|
||||||
|
AInventory *retval = nullptr;
|
||||||
|
IFVM(Inventory, NextInv)
|
||||||
|
{
|
||||||
|
VMValue param = item;
|
||||||
|
VMReturn ret((void**)&retval);
|
||||||
|
VMCall(func, ¶m, 1, &ret, 1);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
void Draw(const SBarInfoMainBlock *block, const DSBarInfo *statusBar)
|
void Draw(const SBarInfoMainBlock *block, const DSBarInfo *statusBar)
|
||||||
{
|
{
|
||||||
int spacing = GetCounterSpacing(statusBar);
|
int spacing = GetCounterSpacing(statusBar);
|
||||||
|
@ -2099,7 +2123,7 @@ class CommandDrawInventoryBar : public SBarInfoCommand
|
||||||
statusBar->CPlayer->mo->InvFirst = statusBar->wrapper->ValidateInvFirst(size);
|
statusBar->CPlayer->mo->InvFirst = statusBar->wrapper->ValidateInvFirst(size);
|
||||||
if(statusBar->CPlayer->mo->InvFirst != NULL || alwaysShow)
|
if(statusBar->CPlayer->mo->InvFirst != NULL || alwaysShow)
|
||||||
{
|
{
|
||||||
for(item = statusBar->CPlayer->mo->InvFirst, i = 0; item != NULL && i < size; item = item->NextInv(), ++i)
|
for(item = statusBar->CPlayer->mo->InvFirst, i = 0; item != NULL && i < size; item = NextInv(item), ++i)
|
||||||
{
|
{
|
||||||
SBarInfoCoordinate rx = x + (!vertical ? i*spacing : 0);
|
SBarInfoCoordinate rx = x + (!vertical ? i*spacing : 0);
|
||||||
SBarInfoCoordinate ry = y + (vertical ? i*spacing : 0);
|
SBarInfoCoordinate ry = y + (vertical ? i*spacing : 0);
|
||||||
|
@ -2133,7 +2157,7 @@ class CommandDrawInventoryBar : public SBarInfoCommand
|
||||||
statusBar->DrawGraphic(statusBar->Images[statusBar->invBarOffset + imgARTIBOX], x + (!vertical ? (i*spacing) : 0), y + (vertical ? (i*spacing) : 0), block->XOffset(), block->YOffset(), bgalpha, block->FullScreenOffsets());
|
statusBar->DrawGraphic(statusBar->Images[statusBar->invBarOffset + imgARTIBOX], x + (!vertical ? (i*spacing) : 0), y + (vertical ? (i*spacing) : 0), block->XOffset(), block->YOffset(), bgalpha, block->FullScreenOffsets());
|
||||||
|
|
||||||
// Is there something to the left?
|
// Is there something to the left?
|
||||||
if (!noArrows && statusBar->CPlayer->mo->InvFirst->PrevInv())
|
if (!noArrows && PrevInv(statusBar->CPlayer->mo->InvFirst))
|
||||||
{
|
{
|
||||||
int offset = (style != STYLE_Strife ? (style != STYLE_HexenStrict ? -12 : -10) : 14);
|
int offset = (style != STYLE_Strife ? (style != STYLE_HexenStrict ? -12 : -10) : 14);
|
||||||
int yOffset = style != STYLE_HexenStrict ? 0 : -1;
|
int yOffset = style != STYLE_HexenStrict ? 0 : -1;
|
||||||
|
|
|
@ -794,7 +794,7 @@ static int UseHealthItems(TArray<AInventory *> &Items, int &saveHealth)
|
||||||
saveHealth -= maxhealth;
|
saveHealth -= maxhealth;
|
||||||
if (--Items[index]->Amount == 0)
|
if (--Items[index]->Amount == 0)
|
||||||
{
|
{
|
||||||
Items[index]->DepleteOrDestroy ();
|
DepleteOrDestroy (Items[index]);
|
||||||
Items.Delete(index);
|
Items.Delete(index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -950,7 +950,7 @@ void AActor::ClearInventory()
|
||||||
AInventory *inv = *invp;
|
AInventory *inv = *invp;
|
||||||
if (!(inv->ItemFlags & IF_UNDROPPABLE))
|
if (!(inv->ItemFlags & IF_UNDROPPABLE))
|
||||||
{
|
{
|
||||||
inv->DepleteOrDestroy();
|
DepleteOrDestroy(inv);
|
||||||
if (!(inv->ObjectFlags & OF_EuthanizeMe)) invp = &inv->Inventory; // was only depleted so advance the pointer manually.
|
if (!(inv->ObjectFlags & OF_EuthanizeMe)) invp = &inv->Inventory; // was only depleted so advance the pointer manually.
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue