Neste artigo vamos começar a implementar a classe base C++ que será usada para representar o canhão inimigo.
No Content Browser, acesse a pasta TutoPart3 que está dentro da pasta C++ Classes. Clique com o botão direito em um espaço livre e escolha a opção New C++ Class... .
Na tela seguinte, escolha a classe Actor como classe pai e clique no botão Next.
No campo Name coloque EnemyCannon. No campo Path, mantenha a pasta padrão do projeto. Clique no botão Create Class.
O código abaixo mostra a primeira versão do arquivo EnemyCannon.h. Em outro artigo vamos adicionar mais variáveis e funções para contar os Hits e destruir o canhão.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "EnemyCannon.generated.h"
class AEnemyProjectile;
class UArrowComponent;
UCLASS()
class TUTOPART3_API AEnemyCannon : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AEnemyCannon();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
USceneComponent* RootScene;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
UStaticMeshComponent* StaticMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
UArrowComponent* ProjectileSpawnLocation;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Cannon)
TSubclassOf<AEnemyProjectile> ProjectileClass;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Cannon)
float FireRate;
APawn* PlayerPawn;
FTimerHandle ShotTimerHandle;
void ShootCannon();
};
O canhão inimigo não sai de sua posição, mas rotaciona para sempre estar apontando em direção à posição atual do jogador. Para fazermos isso, é armazenada uma referência da instância do jogador no ponteiro PlayerPawn.
Ele dispara projéteis do tipo AEnemyProjectile ou de classes filhas. A classe de projétil usada por uma instância do canhão fica armazenada na variável ProjectileClass.
A variável ProjectileSpawnLocation é um componente do tipo UArrowComponent usado para especificar o local onde será criado o projétil.
O tempo entre os disparos de um canhão é armazenado em segundos na variável FireRate. Esta variável será usada na criação de um Timer (referenciado por ShotTimerHandle) que ficará chamando a função ShootCannon() quando passar o tempo que está em FireRate.
No próximo artigo vamos analisar o conteúdo do arquivo de implementação EnemyCannon.cpp.