Os principais ajustes feitos na classe SPG_GameInfo são para possibilitar o uso de Archetypes nas classes Pawn e Weapon do jogador.
Esta classe contém as referências dos Archetypes nas variáveis DefaultPawnArchetype e DefaultWeaponArchetype.
class SPG_GameInfo extends SimpleGame;
// Variable which references the default pawn archetype stored within a package
var() const archetype Pawn DefaultPawnArchetype;
// Variable which references the default weapon archetype stored within a package
var() const archetype Weapon DefaultWeaponArchetype;
Se você não conhece a classe GameInfo, dê uma lida no meu artigo: "Classe GameInfo (UnrealScript)".
A classe SPG_GameInfo sobrescreve a função SpawnDefaultPawnFor() para que o objeto da classe Pawn do jogador seja criado baseado no Archetype.
function Pawn SpawnDefaultPawnFor(Controller NewPlayer, NavigationPoint StartSpot)
{
local Rotator StartRotation;
local Pawn SpawnedPawn;
// Quick exit if NewPlayer is none or if StartSpot is none
if (NewPlayer == None || StartSpot == None)
{
return None;
}
// Only the start spot's yaw from its rotation is required
StartRotation = Rot(0, 0, 0);
StartRotation.Yaw = StartSpot.Rotation.Yaw;
// Spawn the default pawn archetype at the start spot's location and the start rotation defined above
// Set SpawnedPawn to the spawned
SpawnedPawn = Spawn(DefaultPawnArchetype.Class,,, StartSpot.Location, StartRotation, DefaultPawnArchetype);
// Return the value of SpawnedPawn
return SpawnedPawn;
}
A função SpawnDefaultPawnFor() utiliza uma variável local do tipo Rotator chamada StartRotation para obter apenas a rotação no eixo vertical (Yaw) do ponto de ínicio (StartSpot) do jogo. Para mais informações sobre Rotação, leia o meu artigo: "Usando Rotators em UnrealScript".
Após isso, é criado um novo objeto Pawn baseado no Archetype "DefaultPawnArchetype" usando a função Spawn().
Outra função que é sobrescrita na classe SPG_GameInfo é a AddDefaultInventory(). Nesta função é obtida uma referência da classe SPG_InventoryManager para poder criar a arma baseada no Archetype DefaultWeaponArchetype.
event AddDefaultInventory(Pawn P)
{
local SPG_InventoryManager SPG_InventoryManager;
Super.AddDefaultInventory(P);
// Ensure that we have a valid default weapon archetype
if (DefaultWeaponArchetype != None)
{
// Get the inventory manager
SPG_InventoryManager = SPG_InventoryManager(P.InvManager);
if (SPG_InventoryManager != None)
{
// Create the inventory from the archetype
SPG_InventoryManager.CreateInventoryArchetype(DefaultWeaponArchetype, false);
}
}
}
No bloco defaultproperties são especificados os Archetypes do Pawn e da Arma, além das classes responsáveis pelo HUD e pelo PlayerController.
defaultproperties
{
// What player controller class to create for the player
PlayerControllerClass=class'SPG_PlayerController'
// What default pawn archetype to spawn for the player
DefaultPawnArchetype=SPG_PlayerPawn'StarterPlatformGameContent.Archetypes.PlayerPawn'
// What default weapon archetype to spawn for the player
DefaultWeaponArchetype=SPG_Weapon'StarterPlatformGameContent.Archetypes.LinkGunWeapon'
// What HUD class to create for the player
HUDType=class'SPG_HUD'
}