feat: add collecting HP and ammo
Player automatically collect HP and ammo when standing on crates. Ammo is collected only for owned gun.
This commit is contained in:
parent
c4320db5e0
commit
b7263615c0
Binary file not shown.
BIN
Content/Blueprints/Items/BP_HealthBox.uasset
Normal file
BIN
Content/Blueprints/Items/BP_HealthBox.uasset
Normal file
Binary file not shown.
BIN
Content/Blueprints/Items/RevolverAmmoBox.uasset
Normal file
BIN
Content/Blueprints/Items/RevolverAmmoBox.uasset
Normal file
Binary file not shown.
Binary file not shown.
BIN
Content/Blueprints/Items/RifleAmmoBox.uasset
Normal file
BIN
Content/Blueprints/Items/RifleAmmoBox.uasset
Normal file
Binary file not shown.
Binary file not shown.
BIN
Content/Blueprints/Items/ShotgunAmmoBox.uasset
Normal file
BIN
Content/Blueprints/Items/ShotgunAmmoBox.uasset
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -101,6 +101,26 @@ void UShootingComponent::Reload()
|
|||
UE_LOG(LogTemp, Display, TEXT("Reloaded. Ammo: %d/%d"), CurrentGun->CurrentAmmo, CurrentGun->MaxAmmo); // Docelowo tutaj wywo<77>anie UI aktualizuj<75>ce stan ammo
|
||||
}
|
||||
|
||||
bool UShootingComponent::AddAmmo(EAmmoType CheckingAmmo, int AddValue)
|
||||
{
|
||||
if (IsValid(CurrentGun))
|
||||
{
|
||||
// Adding ammo only if type is compatible
|
||||
if (CurrentGun->AmmoType == CheckingAmmo)
|
||||
{
|
||||
CurrentGun->AddAmmo(AddValue);
|
||||
return true;
|
||||
}
|
||||
if (SecondaryGun->AmmoType == CheckingAmmo)
|
||||
{
|
||||
SecondaryGun->AddAmmo(AddValue);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void UShootingComponent::PickUpGun(AGunBase* gunItem)
|
||||
{
|
||||
if (IsValid(CurrentGun) && IsValid(SecondaryGun))
|
||||
|
|
@ -113,6 +133,7 @@ void UShootingComponent::PickUpGun(AGunBase* gunItem)
|
|||
NewGun->FireRateCooldown = gunItem->FireRateCooldown;
|
||||
NewGun->RecoilForceMultiplier = gunItem->RecoilForceMultiplier;
|
||||
NewGun->ReloadTime = gunItem->ReloadTime;
|
||||
NewGun->AmmoType = gunItem->AmmoType;
|
||||
NewGun->CurrentAmmo = gunItem->CurrentAmmo;
|
||||
NewGun->MaxAmmo = gunItem->MaxAmmo;
|
||||
NewGun->SceneItemClass = gunItem->GetClass();
|
||||
|
|
@ -177,6 +198,7 @@ void UShootingComponent::DropGun()
|
|||
DroppedGun->FireRateCooldown = CurrentGun->FireRateCooldown;
|
||||
DroppedGun->RecoilForceMultiplier = CurrentGun->RecoilForceMultiplier;
|
||||
DroppedGun->ReloadTime = CurrentGun->ReloadTime;
|
||||
DroppedGun->AmmoType = CurrentGun->AmmoType;
|
||||
DroppedGun->CurrentAmmo = CurrentGun->CurrentAmmo;
|
||||
DroppedGun->MaxAmmo = CurrentGun->MaxAmmo;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
#include "Characters/ExoPlayerCharacter.h"
|
||||
#include "Characters/Components/ShootingComponent.h"
|
||||
#include "GameFramework/CharacterMovementComponent.h"
|
||||
#include "Items/AmmoBoxBase.h"
|
||||
#include "Items/HealthBoxBase.h"
|
||||
#include "Player/InteractionComponent.h"
|
||||
|
||||
AExoPlayerCharacter::AExoPlayerCharacter()
|
||||
|
|
@ -23,4 +25,45 @@ void AExoPlayerCharacter::BeginPlay()
|
|||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
GetCapsuleComponent()->OnComponentBeginOverlap.AddDynamic(this, &AExoPlayerCharacter::OnActorBeginOverlap);
|
||||
}
|
||||
|
||||
void AExoPlayerCharacter::OnActorBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
|
||||
{
|
||||
if (OtherActor && OtherActor != this)
|
||||
{
|
||||
if (OtherActor->IsA(AHealthBoxBase::StaticClass()))
|
||||
{
|
||||
AHealthBoxBase* HealthBox = Cast<AHealthBoxBase>(OtherActor);
|
||||
if (HealthBox)
|
||||
{
|
||||
AddHealthPoints(HealthBox->HealthValue);
|
||||
HealthBox->Destroy();
|
||||
|
||||
UE_LOG(LogTemp, Warning, TEXT("Zebrano apteczkę"));
|
||||
}
|
||||
}
|
||||
else if (OtherActor->IsA(AAmmoBoxBase::StaticClass()))
|
||||
{
|
||||
AAmmoBoxBase* AmmoBox = Cast<AAmmoBoxBase>(OtherActor);
|
||||
if (AmmoBox)
|
||||
{
|
||||
if (ShootingComponent->AddAmmo(AmmoBox->AmmoType, AmmoBox->AmmoValue))
|
||||
{
|
||||
AmmoBox->Destroy();
|
||||
|
||||
UE_LOG(LogTemp, Warning, TEXT("Zebrano amunicję"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AExoPlayerCharacter::AddHealthPoints(float addValue)
|
||||
{
|
||||
CurrentHealth += addValue;
|
||||
|
||||
if (CurrentHealth > MaxHealth)
|
||||
CurrentHealth = MaxHealth;
|
||||
}
|
||||
23
Source/Exo/Private/Items/AmmoBoxBase.cpp
Normal file
23
Source/Exo/Private/Items/AmmoBoxBase.cpp
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Items/AmmoBoxBase.h"
|
||||
|
||||
AAmmoBoxBase::AAmmoBoxBase()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
}
|
||||
|
||||
void AAmmoBoxBase::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
}
|
||||
|
||||
void AAmmoBoxBase::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -33,3 +33,10 @@ void AGunBase::Interact_Implementation(AExoPlayerCharacter* playerCharacter)
|
|||
|
||||
Destroy();
|
||||
}
|
||||
|
||||
void AGunBase::AddAmmo(int AddValue)
|
||||
{
|
||||
CurrentAmmo += AddValue;
|
||||
if (CurrentAmmo > MaxAmmo)
|
||||
CurrentAmmo = MaxAmmo;
|
||||
}
|
||||
24
Source/Exo/Private/Items/HealthBoxBase.cpp
Normal file
24
Source/Exo/Private/Items/HealthBoxBase.cpp
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Items/HealthBoxBase.h"
|
||||
|
||||
// Sets default values
|
||||
AHealthBoxBase::AHealthBoxBase()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
}
|
||||
|
||||
void AHealthBoxBase::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
}
|
||||
|
||||
void AHealthBoxBase::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -45,9 +45,12 @@ public:
|
|||
UFUNCTION(Category = "Mele Attack")
|
||||
void MeleAttack();
|
||||
|
||||
UFUNCTION(Category = "Shooting")
|
||||
UFUNCTION(Category = "Ammo")
|
||||
void Reload();
|
||||
|
||||
UFUNCTION(Category = "Ammo")
|
||||
bool AddAmmo(EAmmoType CheckingAmmo, int AddValue);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Shooting")
|
||||
void PickUpGun(AGunBase* gunItem);
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Characters/ExoCharacterBase.h"
|
||||
#include "Components/CapsuleComponent.h"
|
||||
#include "ExoPlayerCharacter.generated.h"
|
||||
|
||||
class UInteractionComponent;
|
||||
|
|
@ -38,8 +39,19 @@ public:
|
|||
UPROPERTY(EditAnywhere, Category = "Aiming")
|
||||
float bIsAimingMode = false;
|
||||
|
||||
UPROPERTY(EditAnywhere, Category = "Health")
|
||||
float CurrentHealth = 50.0f;
|
||||
|
||||
UFUNCTION()
|
||||
void OnActorBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult
|
||||
);
|
||||
|
||||
UFUNCTION()
|
||||
void AddHealthPoints(float addValue);
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
||||
float MaxHealth = 100.0f;
|
||||
};
|
||||
|
|
|
|||
37
Source/Exo/Public/Items/AmmoBoxBase.h
Normal file
37
Source/Exo/Public/Items/AmmoBoxBase.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "AmmoBoxBase.generated.h"
|
||||
|
||||
UENUM()
|
||||
enum class EAmmoType : uint8
|
||||
{
|
||||
Revolver UMETA(DisplayName = "Revolver"),
|
||||
Shotgun UMETA(DisplayName = "Shotgun"),
|
||||
Rifle UMETA(DisplayName = "Rifle")
|
||||
};
|
||||
|
||||
UCLASS()
|
||||
class EXO_API AAmmoBoxBase : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
AAmmoBoxBase();
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite)
|
||||
EAmmoType AmmoType = EAmmoType::Revolver;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite)
|
||||
int AmmoValue = 30;
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
};
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "AmmoBoxBase.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "Interfaces/Interactable.h"
|
||||
#include "GunBase.generated.h"
|
||||
|
|
@ -40,8 +41,14 @@ public:
|
|||
UPROPERTY(EditAnywhere, Category = "Ammo")
|
||||
int32 MaxAmmo = 10;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
|
||||
EAmmoType AmmoType = EAmmoType::Revolver;
|
||||
|
||||
TSubclassOf<AActor> SceneItemClass;
|
||||
|
||||
UFUNCTION(Category = "Ammo")
|
||||
void AddAmmo(int AddValue);
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
|
|
|||
26
Source/Exo/Public/Items/HealthBoxBase.h
Normal file
26
Source/Exo/Public/Items/HealthBoxBase.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "HealthBoxBase.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class EXO_API AHealthBoxBase : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
AHealthBoxBase();
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite)
|
||||
float HealthValue = 75.0f;
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user