Added ammo drop logic
This commit is contained in:
parent
ef04a66138
commit
f29a53d065
BIN
Content/Legumix/Spawner/BP_StaticResupply.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Legumix/Spawner/BP_StaticResupply.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Legumix/Weapon/BP_Ammo.uasset
(Stored with Git LFS)
BIN
Content/Legumix/Weapon/BP_Ammo.uasset
(Stored with Git LFS)
Binary file not shown.
@ -30,8 +30,10 @@ void ALMAmmo::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor*
|
||||
{
|
||||
if (ALMPlayer* Player = Cast<ALMPlayer>(OtherActor))
|
||||
{
|
||||
Player->PickUpAmmo(this);
|
||||
Destroy();
|
||||
if (Player->PickUpAmmo(this))
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
29
Source/LegumeMix/Private/LMStaticResupply.cpp
Normal file
29
Source/LegumeMix/Private/LMStaticResupply.cpp
Normal file
@ -0,0 +1,29 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "LMStaticResupply.h"
|
||||
|
||||
#include "Ammo/LMAmmo.h"
|
||||
|
||||
|
||||
ULMStaticResupply::ULMStaticResupply()
|
||||
{
|
||||
PrimaryComponentTick.bCanEverTick = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ULMStaticResupply::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ULMStaticResupply::SpawnResupply_Implementation()
|
||||
{
|
||||
FVector SpawnLocation = GetOwner()->GetActorLocation();
|
||||
FRotator SpawnRotation = GetOwner()->GetActorRotation();
|
||||
|
||||
ALMAmmo* Ammo = GetWorld()->SpawnActor<ALMAmmo>(AmmoToSpawn, SpawnLocation, SpawnRotation);
|
||||
}
|
@ -35,15 +35,20 @@ void ALMPlayer::BeginPlay()
|
||||
WeaponManager->WeaponSwitched.AddUniqueDynamic(this, &ALMPlayer::WeaponSwitched);
|
||||
}
|
||||
|
||||
void ALMPlayer::PickUpAmmo(ALMAmmo* Ammo)
|
||||
bool ALMPlayer::PickUpAmmo(ALMAmmo* Ammo)
|
||||
{
|
||||
if (GEngine)
|
||||
{
|
||||
FString AmmoAmount = FString::Printf(TEXT("Quantité de munition : %i"), Ammo->GetAmmoAmount());
|
||||
const FString AmmoAmount = FString::Printf(TEXT("Quantité de munition : %i"), Ammo->GetAmmoAmount());
|
||||
GEngine->AddOnScreenDebugMessage(INDEX_NONE, 30.f, FColor::Red, AmmoAmount);
|
||||
}
|
||||
WeaponManager->AddAmmoType(Ammo->GetAmmoType(), Ammo->GetAmmoAmount());
|
||||
OnAmmoPickup();
|
||||
|
||||
if (WeaponManager->AddAmmoType(Ammo->GetAmmoType(), Ammo->GetAmmoAmount()))
|
||||
{
|
||||
OnAmmoPickup();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int ALMPlayer::GetAmmoCount(const EAmmoType AmmoType) const
|
||||
|
@ -108,13 +108,17 @@ void ULMWeaponManager::Initialize(USkeletalMeshComponent* Mesh)
|
||||
}
|
||||
}
|
||||
|
||||
void ULMWeaponManager::AddAmmoType(EAmmoType AmmoType, int AmmoCount)
|
||||
bool ULMWeaponManager::AddAmmoType(EAmmoType AmmoType, int AmmoCount)
|
||||
{
|
||||
FString Debug = FString::Printf(TEXT("Adding %i ammo of type %i"), AmmoCount, AmmoType);
|
||||
GEngine->AddOnScreenDebugMessage(1, 1.f, FColor::Cyan, Debug);
|
||||
|
||||
if (AmmoData.Contains(AmmoType))
|
||||
{
|
||||
FLMAmmoData Data = AmmoData[AmmoType];
|
||||
if (Data.AmmoCount >= Data.MaxAmmo)
|
||||
return false;
|
||||
|
||||
AmmoData[AmmoType].AddAmmo(AmmoCount);
|
||||
}
|
||||
else
|
||||
@ -127,6 +131,8 @@ void ULMWeaponManager::AddAmmoType(EAmmoType AmmoType, int AmmoCount)
|
||||
Data.AmmoCount = AmmoCount;
|
||||
AmmoData[AmmoType] = Data;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int ULMWeaponManager::GetAmmoCount(const EAmmoType AmmoType)
|
||||
|
@ -25,6 +25,9 @@ public:
|
||||
UFUNCTION(BlueprintCallable)
|
||||
inline EAmmoType GetAmmoType() { return AmmoType; }
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetAmmoCount(const int Count) { AmmoAmount = Count; }
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
@ -37,7 +40,7 @@ protected:
|
||||
UPROPERTY(EditAnywhere)
|
||||
EAmmoType AmmoType;
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ExposeOnSpawn))
|
||||
int AmmoAmount;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
|
29
Source/LegumeMix/Public/LMStaticResupply.h
Normal file
29
Source/LegumeMix/Public/LMStaticResupply.h
Normal file
@ -0,0 +1,29 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Components/ActorComponent.h"
|
||||
#include "LMStaticResupply.generated.h"
|
||||
|
||||
|
||||
class ALMAmmo;
|
||||
|
||||
UCLASS(Blueprintable, ClassGroup=Legumix, meta=(BlueprintSpawnableComponent))
|
||||
class LEGUMEMIX_API ULMStaticResupply : public UActorComponent
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
ULMStaticResupply();
|
||||
|
||||
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category=Legumix)
|
||||
void SpawnResupply();
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
private:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Legumix, meta = (AllowPrivateAccess = true))
|
||||
TSubclassOf<ALMAmmo> AmmoToSpawn;
|
||||
};
|
@ -23,7 +23,7 @@ public:
|
||||
ALMPlayer();
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void PickUpAmmo(ALMAmmo* Ammo);
|
||||
bool PickUpAmmo(ALMAmmo* Ammo);
|
||||
|
||||
/**
|
||||
* Gets the number of ammo from the given type.
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
void SetWeapon(int Index);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category=Legumix)
|
||||
void AddAmmoType(EAmmoType AmmoType, int AmmoCount);
|
||||
bool AddAmmoType(EAmmoType AmmoType, int AmmoCount);
|
||||
UFUNCTION(BlueprintCallable, Category=Legumix)
|
||||
int GetAmmoCount(EAmmoType AmmoType);
|
||||
|
||||
|
Reference in New Issue
Block a user