Advertisement
Guest User

Weapon CPP

a guest
Feb 21st, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.02 KB | None | 0 0
  1. #include "EnterAurora.h"
  2. #include "AuroraBaseWeapon.h"
  3.  
  4.  
  5. // Sets default values
  6. AAuroraBaseWeapon::AAuroraBaseWeapon(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
  7. {
  8.     // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
  9.     PrimaryActorTick.bCanEverTick = true;
  10.  
  11.     // Create Weapon Mesh
  12.     weaponMesh = ObjectInitializer.CreateDefaultSubobject<USkeletalMeshComponent>(this, TEXT("Weapon Mesh"));
  13.     RootComponent = weaponMesh;
  14.  
  15.     // Create Audio Component
  16.     audioSource = ObjectInitializer.CreateDefaultSubobject<UAudioComponent>(this, TEXT("Audio Source"));
  17.     audioSource->AttachTo(RootComponent);
  18.     audioSource->bAutoActivate = false;
  19.  
  20.     bCanFire = true;
  21. }
  22.  
  23. // Called when the game starts or when spawned
  24. void AAuroraBaseWeapon::BeginPlay()
  25. {
  26.     Super::BeginPlay();
  27. }
  28.  
  29. // Called every frame
  30. void AAuroraBaseWeapon::Tick(float DeltaTime)
  31. {
  32.     Super::Tick(DeltaTime);
  33.  
  34.     //GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Cyan, TEXT("Cryo: " + FString::SanitizeFloat(currentCryoLevel)));
  35. }
  36.  
  37. void AAuroraBaseWeapon::OnWeaponFireStart()
  38. {
  39.     if (bCanFire)
  40.     {
  41.         Instant_Fire();
  42.         audioSource->Activate(true);
  43.         audioSource->Play(0.0f);
  44.         bCanFire = false;
  45.         GetWorld()->GetTimerManager().SetTimer(fireHandler, this, &AAuroraBaseWeapon::OnWeaponFireStop, fireRate, false);
  46.     }
  47. }
  48.  
  49. void AAuroraBaseWeapon::OnWeaponFireStop()
  50. {
  51.     bCanFire = true;
  52. }
  53.  
  54. void AAuroraBaseWeapon::Instant_Fire()
  55. {
  56.     const int32 RandomSeed = FMath::Rand();
  57.     FRandomStream weaponRandomStream(RandomSeed);
  58.     const float currentSpread = weaponSpread;
  59.     const float spreadCone = FMath::DegreesToRadians(weaponSpread * 0.5f);
  60.     const FVector aimDir = weaponMesh->GetSocketRotation(muzzleSocket).Vector();
  61.     const FVector startTrace = weaponMesh->GetSocketLocation(muzzleSocket);
  62.     const FVector shootDir = weaponRandomStream.VRandCone(aimDir, spreadCone, spreadCone);
  63.     const FVector endTrace = startTrace + shootDir * weaponRange;
  64.     const FHitResult impact = WeaponTrace(startTrace, endTrace);
  65.     ProcessInstantHit(impact, startTrace, shootDir, RandomSeed, currentSpread);
  66. }
  67.  
  68. FHitResult AAuroraBaseWeapon::WeaponTrace(const FVector & TraceFrom, const FVector & TraceTo) const
  69. {
  70.     static FName weaponFireTag = FName(TEXT("WeaponTrace"));
  71.  
  72.     FCollisionQueryParams traceParams(weaponFireTag, true, Instigator);
  73.     traceParams.bTraceAsyncScene = true;
  74.     traceParams.bReturnPhysicalMaterial = true;
  75.     traceParams.AddIgnoredActor(this);
  76.  
  77.     FHitResult hit(ForceInit);
  78.  
  79.     GetWorld()->LineTraceSingleByChannel(hit, TraceFrom, TraceTo, Trace_Weapon, traceParams);
  80.  
  81.     return hit;
  82. }
  83.  
  84. void AAuroraBaseWeapon::ProcessInstantHit(const FHitResult & Impact, const FVector & Origin, const FVector & ShootDir, int32 RandomSeed, float ReticleSpread)
  85. {
  86.     const FVector endTrace = Origin + ShootDir * weaponRange;
  87.     const FVector endPoint = Impact.GetActor() ? Impact.ImpactPoint : endTrace;
  88.     DrawDebugLine(this->GetWorld(), Origin, Impact.TraceEnd, FColor::Red, true, 1000.0f, 10.0f);
  89.  
  90.     FDamageEvent damageEvent;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement