diff --git a/Source/Blaster/Components/CombatComponent.cpp b/Source/Blaster/Components/CombatComponent.cpp index 97f315f..5f7bf29 100644 --- a/Source/Blaster/Components/CombatComponent.cpp +++ b/Source/Blaster/Components/CombatComponent.cpp @@ -70,7 +70,9 @@ void UCombatComponent::FireButtonPressed(bool bPressed) if (bFireButtonPressed) { - ServerFire(); + FHitResult HitResult; + TraceUnderCrosshairs(HitResult); + ServerFire(HitResult.ImpactPoint); } } @@ -103,46 +105,27 @@ void UCombatComponent::TraceUnderCrosshairs(FHitResult& TraceHitResult) End, ECollisionChannel::ECC_Visibility ); - if (!TraceHitResult.bBlockingHit) - { - TraceHitResult.ImpactPoint = End; - HitTarget = End; - } - else - { - HitTarget = TraceHitResult.ImpactPoint; - DrawDebugSphere( - GetWorld(), - TraceHitResult.ImpactPoint, - 12.f, - 12, - FColor::Red - ); - } } } -void UCombatComponent::ServerFire_Implementation() +void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& TraceHitTarget) { - MulticastFire(); + MulticastFire(TraceHitTarget); } -void UCombatComponent::MulticastFire_Implementation() +void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget) { if (EquippedWeapon == nullptr) return; if (Character) { Character->PlayFireMontage(bAiming); - EquippedWeapon->Fire(HitTarget); + EquippedWeapon->Fire(TraceHitTarget); } } void UCombatComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); - - FHitResult HitResult; - TraceUnderCrosshairs(HitResult); } void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip) diff --git a/Source/Blaster/Components/CombatComponent.h b/Source/Blaster/Components/CombatComponent.h index f667313..a2a2a70 100644 --- a/Source/Blaster/Components/CombatComponent.h +++ b/Source/Blaster/Components/CombatComponent.h @@ -35,10 +35,10 @@ protected: void FireButtonPressed(bool bPressed); UFUNCTION(Server, Reliable) - void ServerFire(); + void ServerFire(const FVector_NetQuantize& TraceHitTarget); UFUNCTION(NetMulticast, Reliable) - void MulticastFire(); + void MulticastFire(const FVector_NetQuantize& TraceHitTarget); void TraceUnderCrosshairs(FHitResult& TraceHitResult); @@ -58,6 +58,4 @@ private: float AimWalkSpeed; bool bFireButtonPressed; - - FVector HitTarget; };