sexta-feira, 9 de abril de 2021

EnemyCannon: Arquivo de cabeçalho C++

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.


Sumário C++