diff --git a/Content/Blueprints/Weapon/BP_Pistol.uasset b/Content/Blueprints/Weapon/BP_Pistol.uasset index 006a154..7c5f1b7 100644 Binary files a/Content/Blueprints/Weapon/BP_Pistol.uasset and b/Content/Blueprints/Weapon/BP_Pistol.uasset differ diff --git a/Content/Blueprints/Weapon/BP_SniperRifle.uasset b/Content/Blueprints/Weapon/BP_SniperRifle.uasset index c449dd3..f37c3ad 100644 Binary files a/Content/Blueprints/Weapon/BP_SniperRifle.uasset and b/Content/Blueprints/Weapon/BP_SniperRifle.uasset differ diff --git a/Content/Blueprints/Weapon/BP_SubmachineGun.uasset b/Content/Blueprints/Weapon/BP_SubmachineGun.uasset index 40026f4..aafbbcc 100644 Binary files a/Content/Blueprints/Weapon/BP_SubmachineGun.uasset and b/Content/Blueprints/Weapon/BP_SubmachineGun.uasset differ diff --git a/Content/Maps/BlasterMap.umap b/Content/Maps/BlasterMap.umap index 933d14f..2c8f11d 100644 Binary files a/Content/Maps/BlasterMap.umap and b/Content/Maps/BlasterMap.umap differ diff --git a/Source/Blaster/Character/BlasterAnimInstance.cpp b/Source/Blaster/Character/BlasterAnimInstance.cpp index 19aa63d..ddf2d5a 100644 --- a/Source/Blaster/Character/BlasterAnimInstance.cpp +++ b/Source/Blaster/Character/BlasterAnimInstance.cpp @@ -32,7 +32,7 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime) bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling(); bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false; bWeaponEquipped = BlasterCharacter->IsWeaponEquipped(); - EquippedWeapon = BlasterCharacter->GetPrimaryWeapon(); + EquippedWeapon = BlasterCharacter->GetEquippedWeapon(); bIsCrouched = BlasterCharacter->bIsCrouched; bAiming = BlasterCharacter->IsAiming(); TurningInPlace = BlasterCharacter->GetTurningInPlace(); diff --git a/Source/Blaster/Character/BlasterCharacter.cpp b/Source/Blaster/Character/BlasterCharacter.cpp index 4a0018d..2383837 100644 --- a/Source/Blaster/Character/BlasterCharacter.cpp +++ b/Source/Blaster/Character/BlasterCharacter.cpp @@ -230,7 +230,7 @@ void ABlasterCharacter::MulticastEliminated_Implementation(bool bPlayerLeftGame) GetActorLocation() ); } - if (IsLocallyControlled() && GetPrimaryWeapon() && GetPrimaryWeapon()->IsSniper() && IsAiming()) + if (IsLocallyControlled() && GetEquippedWeapon() && GetEquippedWeapon()->IsSniper() && IsAiming()) { ShowSniperScopeWidget(false); } @@ -517,7 +517,7 @@ void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const if (bEliminated) return; float DamageToHealth = Damage; - if (Shield > 0) + if (Shield > 0.f) { if (Shield >= Damage) { @@ -526,8 +526,8 @@ void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const } else { + DamageToHealth = FMath::Clamp(DamageToHealth - Shield, 0.f, Damage); Shield = 0.f; - DamageToHealth = FMath::Clamp(DamageToHealth - (Damage - Shield), 0.f, Damage); } } @@ -963,7 +963,7 @@ bool ABlasterCharacter::IsAiming() return Combat && Combat->bAiming; } -AWeapon* ABlasterCharacter::GetPrimaryWeapon() +AWeapon* ABlasterCharacter::GetEquippedWeapon() { if (Combat == nullptr) return nullptr; return Combat->EquippedWeapon; diff --git a/Source/Blaster/Character/BlasterCharacter.h b/Source/Blaster/Character/BlasterCharacter.h index f079a3c..18d31f0 100644 --- a/Source/Blaster/Character/BlasterCharacter.h +++ b/Source/Blaster/Character/BlasterCharacter.h @@ -310,7 +310,7 @@ public: bool IsAiming(); FORCEINLINE float GetAO_Yaw() const { return AO_Yaw; } FORCEINLINE float GetAO_Pitch() const { return AO_Pitch; } - AWeapon* GetPrimaryWeapon(); + AWeapon* GetEquippedWeapon(); FORCEINLINE ETurningInPlace GetTurningInPlace() const { return TurningInPlace; } FVector GetHitTarget() const; FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; } diff --git a/Source/Blaster/Components/LagCompensationComponent.cpp b/Source/Blaster/Components/LagCompensationComponent.cpp index 189de11..882dae4 100644 --- a/Source/Blaster/Components/LagCompensationComponent.cpp +++ b/Source/Blaster/Components/LagCompensationComponent.cpp @@ -411,17 +411,19 @@ FFramePackage ULagCompensationComponent::GetFrameToCheck(ABlasterCharacter* HitC return FrameToCheck; } void ULagCompensationComponent::ServerScoreRequest_Implementation(ABlasterCharacter* HitCharacter, const FVector_NetQuantize& TraceStart, - const FVector_NetQuantize& HitLocation, float HitTime, AWeapon* DamageCauser) + const FVector_NetQuantize& HitLocation, float HitTime) { const FServerSideRewindResult Confirm = ServerSideRewind(HitCharacter, TraceStart, HitLocation, HitTime); - if (Character && HitCharacter && DamageCauser && Confirm.bHitConfirmed) + if (Character && HitCharacter && Character->GetEquippedWeapon() && Confirm.bHitConfirmed) { + const float Damage = Confirm.bHeadShot ? Character->GetEquippedWeapon()->GetHeadShotDamage() : Character->GetEquippedWeapon()->GetDamage(); + UGameplayStatics::ApplyDamage( HitCharacter, - DamageCauser->GetDamage(), + Damage, Character->Controller, - DamageCauser, + Character->GetEquippedWeapon(), UDamageType::StaticClass() ); } @@ -432,13 +434,15 @@ void ULagCompensationComponent::ProjectileServerScoreRequest_Implementation(ABla { const FServerSideRewindResult Confirm = ProjectileServerSideRewind(HitCharacter, TraceStart, InitialVelocity, HitTime); - if (Character && HitCharacter && Confirm.bHitConfirmed) + if (Character && HitCharacter && Character->GetEquippedWeapon() && Confirm.bHitConfirmed) { + const float Damage = Confirm.bHeadShot ? Character->GetEquippedWeapon()->GetHeadShotDamage() : Character->GetEquippedWeapon()->GetDamage(); + UGameplayStatics::ApplyDamage( HitCharacter, - Character->GetPrimaryWeapon()->GetDamage(), + Damage, Character->Controller, - Character->GetPrimaryWeapon(), + Character->GetEquippedWeapon(), UDamageType::StaticClass() ); } @@ -451,22 +455,22 @@ void ULagCompensationComponent::ShotgunServerScoreRequest_Implementation(const T for (auto& HitCharacter : HitCharacters) { - if (HitCharacter == nullptr || Character == nullptr || HitCharacter->GetPrimaryWeapon() == nullptr) continue; + if (HitCharacter == nullptr || Character == nullptr || HitCharacter->GetEquippedWeapon() == nullptr) continue; float TotalDamage = 0.f; if (Confirm.Headshots.Contains(HitCharacter)) { - TotalDamage += Confirm.Headshots[HitCharacter] * Character->GetPrimaryWeapon()->GetDamage(); + TotalDamage += Confirm.Headshots[HitCharacter] * Character->GetEquippedWeapon()->GetHeadShotDamage(); } if (Confirm.BodyShots.Contains(HitCharacter)) { - TotalDamage += Confirm.BodyShots[HitCharacter] * Character->GetPrimaryWeapon()->GetDamage(); + TotalDamage += Confirm.BodyShots[HitCharacter] * Character->GetEquippedWeapon()->GetDamage(); } UGameplayStatics::ApplyDamage( HitCharacter, TotalDamage, Character->Controller, - Character->GetPrimaryWeapon(), + Character->GetEquippedWeapon(), UDamageType::StaticClass() ); } diff --git a/Source/Blaster/Components/LagCompensationComponent.h b/Source/Blaster/Components/LagCompensationComponent.h index 4760a5a..231b305 100644 --- a/Source/Blaster/Components/LagCompensationComponent.h +++ b/Source/Blaster/Components/LagCompensationComponent.h @@ -102,8 +102,7 @@ public: ABlasterCharacter* HitCharacter, const FVector_NetQuantize& TraceStart, const FVector_NetQuantize& HitLocation, - float HitTime, - AWeapon* DamageCauser + float HitTime ); UFUNCTION(Server, Reliable) diff --git a/Source/Blaster/Weapon/HitScanWeapon.cpp b/Source/Blaster/Weapon/HitScanWeapon.cpp index 6a41fd7..4d02b50 100644 --- a/Source/Blaster/Weapon/HitScanWeapon.cpp +++ b/Source/Blaster/Weapon/HitScanWeapon.cpp @@ -54,8 +54,7 @@ void AHitScanWeapon::Fire(const FVector& HitTarget) BlasterCharacter, Start, HitTarget, - OwnerController->GetServerTime() - OwnerController->SingleTripTime, - this + OwnerController->GetServerTime() - OwnerController->SingleTripTime ); } } diff --git a/Source/Blaster/Weapon/Weapon.cpp b/Source/Blaster/Weapon/Weapon.cpp index 96e3bc1..220cba0 100644 --- a/Source/Blaster/Weapon/Weapon.cpp +++ b/Source/Blaster/Weapon/Weapon.cpp @@ -161,7 +161,7 @@ void AWeapon::OnRep_Owner() else { OwnerCharacter = OwnerCharacter == nullptr ? Cast(Owner) : OwnerCharacter; - if (OwnerCharacter && OwnerCharacter->GetPrimaryWeapon() && OwnerCharacter->GetPrimaryWeapon() == this) + if (OwnerCharacter && OwnerCharacter->GetEquippedWeapon() && OwnerCharacter->GetEquippedWeapon() == this) { SetHUDAmmo(); }