Herança de classe é um conceito fundamental para entender a programação em Verse no UEFN.
Para criar um dispositivo criativo no Verse, é preciso criar uma subclasse da classe creative_device. A nova classe herdará os campos (constantes e variáveis) e métodos (funções) da classe creative_device que é usada como superclasse como mostra a linha a seguir:
inheritance_device := class(creative_device):
A superclasse também é conhecida como classe pai ou classe base. A subclasse é a classe filha.
O exemplo abaixo mostra uma classe base_bonus com três campos e dois métodos. A classe base_bonus é usada como superclasse na criação da classe time_bonus que herdará os três campos e dois métodos de base_bonus.
base_bonus := class:
BonusId : int = 1
Name : string
BonusValue: int
BonusData(): string =
"BonusId: {BonusId} | Name: {Name} | BonusValue: {BonusValue}"
ApplyBonus() : void =
Print("Adding {BonusValue} to SCORE.")
time_bonus := class(base_bonus):
BonusId<override> : int = 2
ApplyBonus<override>() : void =
Print("Adding {BonusValue} to TIME.")
O especificador <override> está sendo usado para poder inicializar o campo BonusId com um valor diferente do valor usado na superclasse. Ele também está sendo usado para criar uma nova versão do método ApplyBonus() na classe time_bonus.
Vamos criar um dispositivo no UEFN que usa as classes base_bonus e time_bonus. Em qualquer projeto UEFN, abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.
Em Device Name coloque inheritance_device e clique no botão Create Empty.
Este dispositivo possui um array para armazenar referências às instâncias de base_bonus. O array é inicializado com instâncias de base_bonus e de time_bonus. Isto é possível porque uma instância de time_bonus também é do tipo base_bonus.
Copie o código Verse abaixo para o dispositivo inheritance_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
base_bonus := class:
BonusId : int = 1
Name : string
BonusValue: int
BonusData(): string =
"BonusId: {BonusId} | Name: {Name} | BonusValue: {BonusValue}"
ApplyBonus() : void =
Print("Adding {BonusValue} to SCORE.")
time_bonus := class(base_bonus):
BonusId<override> : int = 2
ApplyBonus<override>() : void =
Print("Adding {BonusValue} to TIME.")
inheritance_device := class(creative_device):
BonusArray : []base_bonus = array{ base_bonus{BonusValue := 50, Name := "Score MEDIUM"},
base_bonus{BonusValue := 100, Name := "Score MAX"},
time_bonus{BonusValue := 30, Name := "Time MEDIUM"},
time_bonus{BonusValue := 60, Name := "Time MAX"} }
OnBegin<override>()<suspends>:void=
for (Bonus : BonusArray):
Print( Bonus.BonusData() )
Bonus.ApplyBonus()
No método OnBegin está sendo usado o laço for para percorrer todos os elementos do array. Para cada elemento são executados os métodos BonusData() e ApplyBonus(). Se a instância for do tipo time_bonus, será executada a versão do ApplyBonus() que foi sobrescrita na classe time_bonus.
Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN.
Acesse o Content Drawer e adicione o dispositivo Verse inheritance_device ao nível.
Clique no botão Launch Session localizado na barra de ferramentas do UEFN para carregar o nível no Fortnite.
Após iniciar a partida no Fortnite, pressione a tecla Tab e selecione a aba Registro para visualizar o log com as mensagens escritas pelas funções Print.