void UCheatManager::DamageTarget(float DamageAmount) { APlayerController* const MyPC = GetOuterAPlayerController(); if ((MyPC == NULL) || (MyPC->PlayerCameraManager == NULL)) { return; } check(GetWorld() != NULL); FVector const CamLoc = MyPC->PlayerCameraManager->GetCameraLocation(); FRotator const CamRot = MyPC->PlayerCameraManager->GetCameraRotation(); FCollisionQueryParams TraceParams(NAME_None, true, MyPC->GetPawn()); FHitResult Hit; bool bHit = GetWorld()->LineTraceSingle(Hit, CamLoc, CamRot.Vector() * 100000.f + CamLoc, ECC_Pawn, TraceParams); if (bHit) { check(Hit.GetActor() != NULL); FVector ActorForward, ActorSide, ActorUp; FRotationMatrix(Hit.GetActor()->GetActorRotation()).GetScaledAxes(ActorForward, ActorSide, ActorUp); FPointDamageEvent DamageEvent(DamageAmount, Hit, -ActorForward, UDamageType::StaticClass()); Hit.GetActor()->TakeDamage(DamageAmount, DamageEvent, MyPC, MyPC->GetPawn()); } }
void AWeapon::DoDamage(FHitResult& ObjectHit) { FVector ImpactPoint; FVector ImpactNormal; ImpactPoint.X = ObjectHit.ImpactPoint.X; ImpactPoint.Y = ObjectHit.ImpactPoint.Y; ImpactPoint.Z = ObjectHit.ImpactPoint.Z; ImpactNormal.X = ObjectHit.ImpactNormal.X; //Use this data for placing decals if bullets hit walls etc. ImpactNormal.Y = ObjectHit.ImpactNormal.Y; ImpactNormal.Z = ObjectHit.ImpactNormal.Z; const UWorld* World = GetWorld(); if (World) { DrawDebugSphere(World, ImpactPoint, 10.0f, 8, FColor(255, 0, 0), false, 3, 0); APlayerController* PlayerController = Cast<APlayerController>(WeaponOwner->GetController()); if (PlayerController != nullptr) { const AActor* HitActor = ObjectHit.GetActor(); if (HitActor != nullptr) { if (HitActor->IsA(AEnemy::StaticClass())) { AEnemy* Enemy = (AEnemy*)HitActor; TSubclassOf<UDamageType> const ValidDamageTypeClass = TSubclassOf<UDamageType>(UDamageType::StaticClass()); FDamageEvent DamageEvent(ValidDamageTypeClass); Enemy->TakeDamage(Config.Damage, DamageEvent, PlayerController, this); } } } } }
void ARoguelikeChar::ShootABullet() { FHitResult Hit; FCollisionQueryParams ColParams = FCollisionQueryParams(FName("Tsirla"), false, GetOwner()); ColParams.AddIgnoredActor(GetOwner()); ColParams.AddIgnoredActor(this); FVector Origin = LaserSource->GetComponentLocation(); FVector ForwardVector = PlayerCamera->GetForwardVector(); FVector Destination = Origin + (ForwardVector * 5000); PlayerController->ClientPlayCameraShake(OurShake, ShakePower); if (GetWorld()->LineTraceSingleByChannel(Hit, Origin, Destination, ECollisionChannel::ECC_WorldDynamic, ColParams)) { AZombieCharacter* Zombie = Cast<AZombieCharacter>(Hit.GetActor()); if (Zombie) { TSubclassOf<UDamageType> const ValidDamageTypeClass = TSubclassOf<UDamageType>(UPlayerDamageType::StaticClass()); //Determine the effect that will be applied to the zombie based on currently equipped ammo UPlayerDamageType* DamageType = Cast<UPlayerDamageType>(ValidDamageTypeClass.GetDefaultObject()); switch (CurrentBulletEquipped) { case 1: { DamageType->PlayerDamageType = EPlayerDamageType::Dot; break; } case 2: { DamageType->PlayerDamageType = EPlayerDamageType::Slow; break; } default: { DamageType->PlayerDamageType = EPlayerDamageType::Standard; break; } } FDamageEvent DamageEvent(ValidDamageTypeClass); float DamageAmount = CalculateBulletDamage(CurrentBulletEquipped); Zombie->TakeDamage(DamageAmount, DamageEvent, Zombie->GetController(), this); /*if (Zombie->IsDead()) { Kills++; PlayerController->UpdateUI(); }*/ } //if (Hit.Actor != GetOwner()) //{ // if (Hit.Component->ComponentHasTag("Zombie")) // { // TArray<USkeletalMeshComponent*> SkeletalMeshes; // Hit.GetActor()->GetComponents<USkeletalMeshComponent>(SkeletalMeshes); // UZombieAnimInstance* EnemyAnimInstance = Cast<UZombieAnimInstance>(SkeletalMeshes[0]->GetAnimInstance()); // if (!EnemyAnimInstance->bIsDead) // { // float DamageToDo = CalculateBulletDamage(CurrentBulletEquipped); // // TO BE REMOVED AFTER ORFEUS COMPLETES ZOMBIE CRAP. // TestHits++; // if (TestHits > 3) // { // EnemyAnimInstance->bIsDead = true; // Kills++; // PlayerController->UpdateUI(); // } // else // { // EnemyAnimInstance->GetHurt(); // } // } // } //} } switch (CurrentBulletEquipped) { case 0: if (BulletsLeft_A > 0) { BulletsLeft_A--; } break; case 1: if (BulletsLeft_B > 0) { BulletsLeft_B--; } break; case 2: if (BulletsLeft_C > 0) { BulletsLeft_C--; } break; default: break; } if (BulletsLeft_A == 0 && CurrentBulletEquipped == 0) { PlayerAnimationInstance->bCanShoot = false; } else if (BulletsLeft_B == 0 && CurrentBulletEquipped == 1) { PlayerAnimationInstance->bCanShoot = false; } else if (BulletsLeft_C == 0 && CurrentBulletEquipped == 2) { PlayerAnimationInstance->bCanShoot = false; } PlayerController->UpdateUI(); }