A classe SPG_HealthPickup é usada para representar um item de energia que pode cair de um inimigo quando ele morre. Esta classe é uma subclasse de DroppedPickup. As suas variáveis são as seguintes:
class SPG_HealthPickup extends DroppedPickup
placeable;
// Static mesh used by the pick up
var(HealthPickup) const StaticMeshComponent Mesh;
// Sound to play when the pick up is picked up by a pawn
var(HealthPickup) const SoundCue PickupSound;
// How much health to give to the pawn when picked up
var(HealthPickup) const int HealthToGive;
O Platformer Starter Kit também utiliza um Archetype desta classe para facilitar a mudanças dos valores de suas variáveis.
A imagem abaixo mostra os valores padrões do Archetype da classe SPG_HealthPickup.
A imagem abaixo mostra os valores padrões do Archetype da classe SPG_HealthPickup.
Se você não sabe nada sobre Pickups, recomendo a leitura do meu artigo "PickupFactory e Inventory em UnrealScript".
A função "GiveTo(Pawn P)" é chamada quando o jogador pega o item. Ela apenas toca um Som e atribui mais energia ao jogador:
A função "GiveTo(Pawn P)" é chamada quando o jogador pega o item. Ela apenas toca um Som e atribui mais energia ao jogador:
function GiveTo(Pawn P)
{
// Play sound
if (PickupSound != None)
{
PlaySound(PickupSound);
}
// Add health to the player, but clamp it to the pawn's maximum health
P.Health = Min(P.Health + HealthToGive, P.HealthMax);
// Handle the rest of pick up
PickedUpBy(P);
}
A função "int Min( int A, int B )" retorna o menor número entre dois números inteiros e é usada para evitar que o valor da energia do jogador ultrapasse o valor máximo. A função "PickedUpBy(Pawn P)" pertence a classe DroppedPickup e ela apenas chama a função "Destroy()" para remover este Pickup do jogo.
A classe SPG_HealthPickup sobrescreve a função "ValidTouch(Pawn Other)", que está dentro do estado "Pickup" da classe DroppedPickup, com uma versão mais simples da função. Esta função é chamada toda vez que ocorre uma colisão com um objeto do tipo Pawn para verificar se é o jogador que está pegando o item.
A classe SPG_HealthPickup sobrescreve a função "ValidTouch(Pawn Other)", que está dentro do estado "Pickup" da classe DroppedPickup, com uma versão mais simples da função. Esta função é chamada toda vez que ocorre uma colisão com um objeto do tipo Pawn para verificar se é o jogador que está pegando o item.
auto state Pickup
{
function bool ValidTouch(Pawn Other)
{
// make sure its a live player
if (Other == None || !Other.bCanPickupInventory || (Other.DrivenVehicle == None && Other.Controller == None))
{
return false;
}
// make sure thrower doesn't run over own weapon
if (Physics == PHYS_Falling && Other == Instigator && Velocity.Z > 0)
{
return false;
}
return true;
}
}
Para concluir, temos o bloco defaultproperties cujo código está abaixo. É definido um objeto do tipo StaticMeshComponent com o nome MyStaticMeshComponent. Se você observar na imagem do Archetype que foi criado para esta classe, a propriedade Mesh é associada ao objeto MyStaticMeshComponent que será usado como componente, utilizando ":" e o nome do objeto.
defaultproperties
{
// Remove the sprite component
Components.Remove(Sprite);
// Add the static mesh component
Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
End Object
Mesh=MyStaticMeshComponent
Components.Add(MyStaticMeshComponent);
}