97 - Damage
This commit is contained in:
parent
26e44a4b4e
commit
835069d362
Binary file not shown.
Binary file not shown.
|
@ -53,10 +53,10 @@ void ABlasterCharacter::BeginPlay()
|
||||||
{
|
{
|
||||||
Super::BeginPlay();
|
Super::BeginPlay();
|
||||||
|
|
||||||
BlasterPlayerController = Cast<ABlasterPlayerController>(Controller);
|
UpdateHUDHealth();
|
||||||
if (BlasterPlayerController)
|
if (HasAuthority())
|
||||||
{
|
{
|
||||||
BlasterPlayerController->SetHUDHealth(Health, MaxHealth);
|
OnTakeAnyDamage.AddDynamic(this, &ABlasterCharacter::ReceiveDamage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +112,15 @@ void ABlasterCharacter::PlayHitReactMontage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* InstigatorController,
|
||||||
|
AActor* DamageCauser)
|
||||||
|
{
|
||||||
|
Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth);
|
||||||
|
|
||||||
|
UpdateHUDHealth();
|
||||||
|
PlayHitReactMontage();
|
||||||
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::Tick(float DeltaTime)
|
void ABlasterCharacter::Tick(float DeltaTime)
|
||||||
{
|
{
|
||||||
Super::Tick(DeltaTime);
|
Super::Tick(DeltaTime);
|
||||||
|
@ -376,11 +385,6 @@ void ABlasterCharacter::TurnInPlace(float DeltaTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::MulticastHit_Implementation()
|
|
||||||
{
|
|
||||||
PlayHitReactMontage();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ABlasterCharacter::HideCameraIfCharacterClose()
|
void ABlasterCharacter::HideCameraIfCharacterClose()
|
||||||
{
|
{
|
||||||
if (!IsLocallyControlled()) return;
|
if (!IsLocallyControlled()) return;
|
||||||
|
@ -411,7 +415,17 @@ float ABlasterCharacter::CalculateSpeed()
|
||||||
|
|
||||||
void ABlasterCharacter::OnRep_Health()
|
void ABlasterCharacter::OnRep_Health()
|
||||||
{
|
{
|
||||||
|
UpdateHUDHealth();
|
||||||
|
PlayHitReactMontage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ABlasterCharacter::UpdateHUDHealth()
|
||||||
|
{
|
||||||
|
BlasterPlayerController = BlasterPlayerController == nullptr ?Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
|
||||||
|
if (BlasterPlayerController)
|
||||||
|
{
|
||||||
|
BlasterPlayerController->SetHUDHealth(Health, MaxHealth);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::SetOverlappingWeapon(AWeapon* Weapon)
|
void ABlasterCharacter::SetOverlappingWeapon(AWeapon* Weapon)
|
||||||
|
|
|
@ -22,9 +22,6 @@ public:
|
||||||
virtual void OnRep_ReplicatedMovement() override;
|
virtual void OnRep_ReplicatedMovement() override;
|
||||||
void PlayFireMontage(bool bAiming);
|
void PlayFireMontage(bool bAiming);
|
||||||
|
|
||||||
UFUNCTION(NetMulticast, Unreliable)
|
|
||||||
void MulticastHit();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
@ -44,6 +41,10 @@ protected:
|
||||||
void FireButtonReleased();
|
void FireButtonReleased();
|
||||||
void PlayHitReactMontage();
|
void PlayHitReactMontage();
|
||||||
|
|
||||||
|
UFUNCTION()
|
||||||
|
void ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, class AController* InstigatorController, AActor* DamageCauser);
|
||||||
|
void UpdateHUDHealth();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UPROPERTY(VisibleAnywhere, Category="Camera")
|
UPROPERTY(VisibleAnywhere, Category="Camera")
|
||||||
class USpringArmComponent* CameraBoom;
|
class USpringArmComponent* CameraBoom;
|
||||||
|
|
|
@ -52,10 +52,6 @@ void AProjectile::BeginPlay()
|
||||||
|
|
||||||
void AProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
|
void AProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
|
||||||
{
|
{
|
||||||
if (ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(OtherActor))
|
|
||||||
{
|
|
||||||
BlasterCharacter->MulticastHit();
|
|
||||||
}
|
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,9 @@ protected:
|
||||||
virtual void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
|
virtual void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
|
||||||
virtual void Destroyed() override;
|
virtual void Destroyed() override;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float Damage = 20.f;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere)
|
UPROPERTY(EditAnywhere)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "ProjectileBullet.h"
|
||||||
|
|
||||||
|
#include "GameFramework/Character.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
|
||||||
|
void AProjectileBullet::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
|
||||||
|
{
|
||||||
|
ACharacter* OwnerCharacter = Cast<ACharacter>(GetOwner());
|
||||||
|
if (OwnerCharacter)
|
||||||
|
{
|
||||||
|
AController* OwnerController = OwnerCharacter->Controller;
|
||||||
|
if (OwnerController)
|
||||||
|
{
|
||||||
|
UGameplayStatics::ApplyDamage(OtherActor, Damage, OwnerController, this, UDamageType::StaticClass());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Super::OnHit(HitComp, OtherActor, OtherComp, NormalImpulse, Hit);
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Projectile.h"
|
||||||
|
#include "ProjectileBullet.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class BLASTER_API AProjectileBullet : public AProjectile
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) override;
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in New Issue