Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #pragma once
  2.  
  3.  
  4. #include "TankAIController.h"
  5. #include "Engine/World.h"
  6. #include "TankAimingComponent.h"
  7. #include "BattleTank.h"
  8. #include "Tank.h"
  9.  
  10.  
  11. void ATankAIController::BeginPlay()
  12. {
  13. Super::BeginPlay();
  14. }
  15.  
  16. void ATankAIController::SetPawn(APawn * InPawn)
  17. {
  18. Super::SetPawn(InPawn);
  19. if (InPawn)
  20. {
  21. auto PossessedTank = Cast<ATank>(InPawn);
  22. if (!ensure(PossessedTank)) { return; }
  23.  
  24. PossessedTank->OnDeath.AddUniqueDynamic(this, &ATankAIController::OnPossessedTankDeath);
  25. }
  26. }
  27.  
  28. // Called every frame
  29. void ATankAIController::Tick(float DeltaTime)
  30. {
  31. Super::Tick(DeltaTime);
  32.  
  33. auto PlayerTank = GetWorld()->GetFirstPlayerController()->GetPawn();
  34. auto ControlledTank = GetPawn();
  35.  
  36. if (!ensure(PlayerTank && ControlledTank)) { return; }
  37.  
  38. // Move towards the player
  39. MoveToActor(PlayerTank, AcceptanceRadius); // TODO check radius is in cm
  40.  
  41. // Aim towards the player
  42. auto AimingComponent = ControlledTank->FindComponentByClass<UTankAimingComponent>();
  43. AimingComponent->AimAt(PlayerTank->GetActorLocation());
  44.  
  45. if (AimingComponent->GetFiringState() == EFiringState::Locked)
  46. {
  47. AimingComponent->Fire();
  48. }
  49. }
  50.  
  51. void ATankAIController::OnPossessedTankDeath()
  52. {
  53. if (!(GetPawn())) { return; }
  54. GetPawn()->DetachFromControllerPendingDestroy();
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement