Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include "TankAIController.h"
- #include "Engine/World.h"
- #include "TankAimingComponent.h"
- #include "BattleTank.h"
- #include "Tank.h"
- void ATankAIController::BeginPlay()
- {
- Super::BeginPlay();
- }
- void ATankAIController::SetPawn(APawn * InPawn)
- {
- Super::SetPawn(InPawn);
- if (InPawn)
- {
- auto PossessedTank = Cast<ATank>(InPawn);
- if (!ensure(PossessedTank)) { return; }
- PossessedTank->OnDeath.AddUniqueDynamic(this, &ATankAIController::OnPossessedTankDeath);
- }
- }
- // Called every frame
- void ATankAIController::Tick(float DeltaTime)
- {
- Super::Tick(DeltaTime);
- auto PlayerTank = GetWorld()->GetFirstPlayerController()->GetPawn();
- auto ControlledTank = GetPawn();
- if (!ensure(PlayerTank && ControlledTank)) { return; }
- // Move towards the player
- MoveToActor(PlayerTank, AcceptanceRadius); // TODO check radius is in cm
- // Aim towards the player
- auto AimingComponent = ControlledTank->FindComponentByClass<UTankAimingComponent>();
- AimingComponent->AimAt(PlayerTank->GetActorLocation());
- if (AimingComponent->GetFiringState() == EFiringState::Locked)
- {
- AimingComponent->Fire();
- }
- }
- void ATankAIController::OnPossessedTankDeath()
- {
- if (!(GetPawn())) { return; }
- GetPawn()->DetachFromControllerPendingDestroy();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement