160 lines
3.5 KiB
Ucode
160 lines
3.5 KiB
Ucode
//=============================================================================
|
|
// Powerup items - activatable inventory.
|
|
//=============================================================================
|
|
class Powerups extends Inventory
|
|
abstract
|
|
native
|
|
nativereplication;
|
|
|
|
var travel int NumCopies;
|
|
var() bool bCanHaveMultipleCopies; // if player can possess more than one of this
|
|
var() bool bAutoActivate; // automatically activated when picked up
|
|
var() bool bActivatable; // Whether item can be activated/deactivated (if true, must auto activate)
|
|
var travel bool bActive; // Whether item is currently activated.
|
|
var() localized String ExpireMessage; // Messages shown when powerup charge runs out
|
|
|
|
var() sound ActivateSound, DeActivateSound;
|
|
|
|
replication
|
|
{
|
|
// Things the server should send to the client.
|
|
reliable if( bNetOwner && bNetDirty && (Role==ROLE_Authority) )
|
|
NumCopies, bActivatable, bActive;
|
|
}
|
|
|
|
event TravelPreAccept()
|
|
{
|
|
Super.TravelPreAccept();
|
|
if( bActive )
|
|
Activate();
|
|
}
|
|
|
|
function PickupFunction(Pawn Other)
|
|
{
|
|
Super.PickupFunction(Other);
|
|
|
|
if (bActivatable && Other.SelectedItem==None)
|
|
Other.SelectedItem=self;
|
|
if (bActivatable && bAutoActivate && Other.bAutoActivate)
|
|
Activate();
|
|
}
|
|
|
|
//
|
|
// Select first activatable item.
|
|
//
|
|
function Powerups SelectNext()
|
|
{
|
|
if ( bActivatable )
|
|
return self;
|
|
|
|
if ( Inventory != None )
|
|
return Inventory.SelectNext();
|
|
else
|
|
return None;
|
|
}
|
|
|
|
//
|
|
// Toggle Activation of selected Item.
|
|
//
|
|
function Activate()
|
|
{
|
|
if( bActivatable )
|
|
{
|
|
GoToState('Activated');
|
|
}
|
|
}
|
|
|
|
//
|
|
// Advanced function which lets existing items in a pawn's inventory
|
|
// prevent the pawn from picking something up. Return true to abort pickup
|
|
// or if item handles the pickup
|
|
function bool HandlePickupQuery( Pickup Item )
|
|
{
|
|
if (item.InventoryType == class)
|
|
{
|
|
if (bCanHaveMultipleCopies)
|
|
NumCopies++;
|
|
else if ( bDisplayableInv )
|
|
{
|
|
if ( Item.Inventory != None )
|
|
Charge = Max(Charge, Item.Inventory.Charge);
|
|
else
|
|
Charge = Max(Charge, Item.InventoryType.Default.Charge);
|
|
}
|
|
else
|
|
return false;
|
|
|
|
Item.AnnouncePickup(Pawn(Owner));
|
|
Item.SetRespawn();
|
|
return true;
|
|
}
|
|
if ( Inventory == None )
|
|
return false;
|
|
|
|
return Inventory.HandlePickupQuery(Item);
|
|
}
|
|
|
|
function float UseCharge(float Amount);
|
|
function FireEffect();
|
|
|
|
//
|
|
// This is called when a usable inventory item has used up it's charge.
|
|
//
|
|
function UsedUp()
|
|
{
|
|
if ( Pawn(Owner) != None )
|
|
{
|
|
bActivatable = false;
|
|
Pawn(Owner).NextItem();
|
|
if (Pawn(Owner).SelectedItem == Self)
|
|
{
|
|
Pawn(Owner).NextItem();
|
|
if (Pawn(Owner).SelectedItem == Self)
|
|
Pawn(Owner).SelectedItem=None;
|
|
}
|
|
|
|
Instigator.ReceiveLocalizedMessage( MessageClass, 0, None, None, Self.Class );
|
|
}
|
|
Owner.PlaySound(DeactivateSound,SLOT_Interface);
|
|
Destroy();
|
|
}
|
|
|
|
static function string GetLocalString(
|
|
optional int Switch,
|
|
optional PlayerReplicationInfo RelatedPRI_1,
|
|
optional PlayerReplicationInfo RelatedPRI_2
|
|
)
|
|
{
|
|
return Default.ExpireMessage;
|
|
}
|
|
|
|
|
|
//=============================================================================
|
|
// Active state: this inventory item is armed and ready to rock!
|
|
|
|
state Activated
|
|
{
|
|
function BeginState()
|
|
{
|
|
bActive = true;
|
|
}
|
|
|
|
function EndState()
|
|
{
|
|
bActive = false;
|
|
}
|
|
|
|
function Activate()
|
|
{
|
|
if ( (Pawn(Owner) != None) && Pawn(Owner).bAutoActivate
|
|
&& bAutoActivate && (Charge>0) )
|
|
return;
|
|
|
|
Global.Activate();
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
}
|