diff --git a/Source/LegumeMix/Private/Weapon/LMAmmo.cpp b/Source/LegumeMix/Private/Ammo/LMAmmo.cpp similarity index 94% rename from Source/LegumeMix/Private/Weapon/LMAmmo.cpp rename to Source/LegumeMix/Private/Ammo/LMAmmo.cpp index 2fee821..e5bd484 100644 --- a/Source/LegumeMix/Private/Weapon/LMAmmo.cpp +++ b/Source/LegumeMix/Private/Ammo/LMAmmo.cpp @@ -1,9 +1,8 @@ // Fill out your copyright notice in the Description page of Project Settings. -#include "Weapon/LMAmmo.h" +#include "Ammo/LMAmmo.h" -#include "Components/BoxComponent.h" #include "Components/SphereComponent.h" #include "Player/LMPlayer.h" diff --git a/Source/LegumeMix/Private/Player/LMBulletInfo.h b/Source/LegumeMix/Private/Player/LMBulletInfo.h index 2cac23d..855621c 100644 --- a/Source/LegumeMix/Private/Player/LMBulletInfo.h +++ b/Source/LegumeMix/Private/Player/LMBulletInfo.h @@ -1,5 +1,5 @@ #pragma once -#include "Weapon/LMAmmoType.h" +#include "Ammo/LMAmmoType.h" #include "LMBulletInfo.generated.h" USTRUCT(BlueprintType) diff --git a/Source/LegumeMix/Private/Player/LMPlayer.cpp b/Source/LegumeMix/Private/Player/LMPlayer.cpp index 834c8a3..375ea0e 100644 --- a/Source/LegumeMix/Private/Player/LMPlayer.cpp +++ b/Source/LegumeMix/Private/Player/LMPlayer.cpp @@ -6,7 +6,7 @@ #include "KismetTraceUtils.h" #include "LMBulletInfo.h" #include "Camera/CameraComponent.h" -#include "Weapon/LMAmmo.h" +#include "Ammo/LMAmmo.h" #include "Weapon/LMWeaponManager.h" ALMPlayer::ALMPlayer() diff --git a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp index 043998e..3c5e78b 100644 --- a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp +++ b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp @@ -14,6 +14,32 @@ ULMWeaponManager::ULMWeaponManager() void ULMWeaponManager::BeginPlay() { Super::BeginPlay(); + + if (AmmoData.IsEmpty()) + SetupAmmoData(); +} + +void ULMWeaponManager::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) +{ + Super::PostEditChangeProperty(PropertyChangedEvent); + + if (AmmoDataTable) + SetupAmmoData(); +} + +void ULMWeaponManager::SetupAmmoData() +{ + TArray Rows; + AmmoData.Empty(); + + AmmoDataTable->GetAllRows(TEXT(""), Rows); + for (const auto Data : Rows) + { + if (AmmoData.Contains(Data->AmmoType)) + continue; + + AmmoData.Add(Data->AmmoType, *Data); + } } void ULMWeaponManager::Initialize(USkeletalMeshComponent* Mesh) @@ -48,8 +74,6 @@ void ULMWeaponManager::AddAmmoType(EAmmoType AmmoType, int AmmoCount) void ULMWeaponManager::Fire() { ALMWeaponBase* Weapon = GetCurrentWeapon(); - - GEngine->AddOnScreenDebugMessage(2, 1.f, FColor::Cyan, "Fire"); Weapon->PrimaryFire(); } diff --git a/Source/LegumeMix/Public/Weapon/LMAmmo.h b/Source/LegumeMix/Public/Ammo/LMAmmo.h similarity index 100% rename from Source/LegumeMix/Public/Weapon/LMAmmo.h rename to Source/LegumeMix/Public/Ammo/LMAmmo.h diff --git a/Source/LegumeMix/Public/Ammo/LMAmmoData.h b/Source/LegumeMix/Public/Ammo/LMAmmoData.h new file mode 100644 index 0000000..89e13f1 --- /dev/null +++ b/Source/LegumeMix/Public/Ammo/LMAmmoData.h @@ -0,0 +1,26 @@ +#pragma once + +#include "LMAmmoType.h" +#include "Kismet/KismetMathLibrary.h" +#include "LMAmmoData.generated.h" + + +USTRUCT(BlueprintType) +struct FLMAmmoData : public FTableRowBase +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + EAmmoType AmmoType; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin=1, ClampMax=1000, Uimin=1, Uimax=1000)) + int MaxAmmo; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(ClampMin=0, Uimin=0)) + int AmmoCount; + + void AddAmmo(const int Quantity) + { + AmmoCount += UKismetMathLibrary::Clamp(Quantity, 0, MaxAmmo); + } +}; diff --git a/Source/LegumeMix/Public/Weapon/LMAmmoType.h b/Source/LegumeMix/Public/Ammo/LMAmmoType.h similarity index 100% rename from Source/LegumeMix/Public/Weapon/LMAmmoType.h rename to Source/LegumeMix/Public/Ammo/LMAmmoType.h diff --git a/Source/LegumeMix/Public/Weapon/LMWeaponBase.h b/Source/LegumeMix/Public/Weapon/LMWeaponBase.h index 1cbeece..da9f54a 100644 --- a/Source/LegumeMix/Public/Weapon/LMWeaponBase.h +++ b/Source/LegumeMix/Public/Weapon/LMWeaponBase.h @@ -3,7 +3,7 @@ #pragma once #include "CoreMinimal.h" -#include "LMAmmo.h" +#include "Ammo/LMAmmo.h" #include "LMWeaponDataStructure.h" #include "GameFramework/Actor.h" #include "LMWeaponBase.generated.h" diff --git a/Source/LegumeMix/Public/Weapon/LMWeaponManager.h b/Source/LegumeMix/Public/Weapon/LMWeaponManager.h index b38b175..411e287 100644 --- a/Source/LegumeMix/Public/Weapon/LMWeaponManager.h +++ b/Source/LegumeMix/Public/Weapon/LMWeaponManager.h @@ -3,7 +3,7 @@ #pragma once #include "CoreMinimal.h" -#include "LMAmmo.h" +#include "Ammo/LMAmmoData.h" #include "Components/ActorComponent.h" #include "LMWeaponManager.generated.h" @@ -43,12 +43,20 @@ public: void Initialize(USkeletalMeshComponent* Mesh); + UFUNCTION(BlueprintCallable, Category="Legumix|Ammo") + void SetupAmmoData(); + protected: virtual void BeginPlay() override; + virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Legumix, meta = (AllowPrivateAccess = "true")) TObjectPtr ArmsMesh; + +private: + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Legumix|Ammo", meta=(AllowPrivateAccess=true)) + TObjectPtr AmmoDataTable; /** The weapons the player starts with. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Legumix, meta=(AllowPrivateAccess=true)) @@ -59,4 +67,9 @@ private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Legumix, meta=(AllowPrivateAccess=true)) int CurrentWeaponIndex = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Legumix|Ammo", meta=(AllowPrivateAccess=true)) + TMap AmmoData; + + };