diff --git a/Content/Legumix/Weapon/Revolver/BP_Revolver.uasset b/Content/Legumix/Weapon/Revolver/BP_Revolver.uasset index 22cc9d5..67a53f2 100644 --- a/Content/Legumix/Weapon/Revolver/BP_Revolver.uasset +++ b/Content/Legumix/Weapon/Revolver/BP_Revolver.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:542c2d39cbd9cd6b8087b4f7b30adb3c381396c0ab7ffad58e464938ff52da97 -size 56876 +oid sha256:8ccb1fda36ba3ed2ceb7fe3b95800d4eead6da3f1aedc8e62955dabfed97b4fa +size 30152 diff --git a/Content/Legumix/Weapon/Shotgun/BP_Shotgun.uasset b/Content/Legumix/Weapon/Shotgun/BP_Shotgun.uasset index d86218c..456d6e1 100644 --- a/Content/Legumix/Weapon/Shotgun/BP_Shotgun.uasset +++ b/Content/Legumix/Weapon/Shotgun/BP_Shotgun.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08f9c257020e37e11f8018da3f36f1dea3b9f82d06c24f577f06085cecbb1be9 -size 56518 +oid sha256:a7a58b5c7dab95516d2666029887e1563c3234442e2d2f4b71ccd2e9bb870788 +size 29766 diff --git a/Source/LegumeMix/Private/Weapon/LMRevolver.cpp b/Source/LegumeMix/Private/Weapon/LMRevolver.cpp index f7d379a..03e9c8f 100644 --- a/Source/LegumeMix/Private/Weapon/LMRevolver.cpp +++ b/Source/LegumeMix/Private/Weapon/LMRevolver.cpp @@ -3,6 +3,7 @@ #include "Weapon/LMRevolver.h" +#include "LMUtils.h" #include "Player/LMBulletInfo.h" #include "Player/LMPlayer.h" @@ -35,8 +36,12 @@ void ALMRevolver::PrimaryFire() const FVector Origin = Player->GetWeaponFiringOrigin(); const FVector Direction = Player->GetAimVector(); - - ClipAmmo--; + + const int InfiniteClip = LMCheats::CVarInfiniteClip.GetValueOnGameThread(); + if (InfiniteClip == 0) + ClipAmmo--; + else if (InfiniteClip == 1 and ClipAmmo > 1) + ClipAmmo--; FLMBulletInfo ShotInfo = FLMBulletInfo(1, Origin, Direction, WeaponSpread, MaxDistance, DamageFalloff, AmmoType, Damage); diff --git a/Source/LegumeMix/Private/Weapon/LMShotgun.cpp b/Source/LegumeMix/Private/Weapon/LMShotgun.cpp index d6557ff..e7d9e67 100644 --- a/Source/LegumeMix/Private/Weapon/LMShotgun.cpp +++ b/Source/LegumeMix/Private/Weapon/LMShotgun.cpp @@ -3,6 +3,7 @@ #include "Weapon/LMShotgun.h" +#include "LMUtils.h" #include "Player/LMBulletInfo.h" #include "Player/LMPlayer.h" @@ -35,7 +36,11 @@ void ALMShotgun::PrimaryFire() const FVector Origin = Player->GetWeaponFiringOrigin(); const FVector Direction = Player->GetAimVector(); - ClipAmmo--; + const int InfiniteClip = LMCheats::CVarInfiniteClip.GetValueOnGameThread(); + if (InfiniteClip == 0) + ClipAmmo--; + else if (InfiniteClip == 1 and ClipAmmo > 1) + ClipAmmo--; FLMBulletInfo ShotInfo = FLMBulletInfo(PelletCount, Origin, Direction, WeaponSpread, MaxDistance, DamageFalloff, AmmoType, Damage); diff --git a/Source/LegumeMix/Private/Weapon/LMWeaponBase.cpp b/Source/LegumeMix/Private/Weapon/LMWeaponBase.cpp index 3194799..73b0ed1 100644 --- a/Source/LegumeMix/Private/Weapon/LMWeaponBase.cpp +++ b/Source/LegumeMix/Private/Weapon/LMWeaponBase.cpp @@ -3,6 +3,7 @@ #include "Weapon/LMWeaponBase.h" +#include "LMUtils.h" #include "Components/AudioComponent.h" #include "Player/LMPlayer.h" @@ -81,10 +82,14 @@ bool ALMWeaponBase::DefaultReload() { if (State != EWeaponState::EWS_Idle) return false; - - const int AmmoCount = Player->GetAmmoCount(AmmoType); - if (AmmoCount <= 0) - return false; + + int InfiniteAmmo = LMCheats::CVarInfiniteAmmo.GetValueOnGameThread(); + if (InfiniteAmmo <= 0) + { + const int AmmoCount = Player->GetAmmoCount(AmmoType); + if (AmmoCount <= 0) + return false; + } if (ClipAmmo >= MaxClip) return false; @@ -102,6 +107,13 @@ bool ALMWeaponBase::DefaultReload() return true; } +void ALMWeaponBase::OnDefaultReload_Implementation() +{ + const int RequestedAmmo = MaxClip - ClipAmmo; + const int ReceivedAmmo = Player->RemoveAmmo(AmmoType, RequestedAmmo); + ClipAmmo += ReceivedAmmo; +} + void ALMWeaponBase::AllowRefire() { // TODO : improve this diff --git a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp index 025aec2..0e1b330 100644 --- a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp +++ b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp @@ -3,6 +3,7 @@ #include "Weapon/LMWeaponManager.h" +#include "LMUtils.h" #include "Weapon/LMWeaponBase.h" @@ -48,6 +49,10 @@ int ULMWeaponManager::RemoveAmmo(const EAmmoType Ammo, const int Count) { if (AmmoData.Contains(Ammo)) { + const int InfiniteAmmo = LMCheats::CVarInfiniteAmmo.GetValueOnGameThread(); + if (InfiniteAmmo == 2) + return Count; + FLMAmmoData &Data = AmmoData[Ammo]; int Difference = Data.AmmoCount - Count; @@ -55,7 +60,7 @@ int ULMWeaponManager::RemoveAmmo(const EAmmoType Ammo, const int Count) if (Difference < 0) { UE_LOG(LogTemp, Error, TEXT("%i - %i = %i"), Data.AmmoCount, Count, Data.AmmoCount - Count); - Data.AmmoCount = FMath::Clamp(Data.AmmoCount - Count, 0, Data.MaxAmmo); + Data.AmmoCount = FMath::Clamp(Data.AmmoCount - Count, InfiniteAmmo == 1 ? 1 : 0, Data.MaxAmmo); UE_LOG(LogTemp, Warning, TEXT("Difference < 0 | Munition to add: %i | Removed: %i | New Munition: %i"), Count + Difference, Count, Data.AmmoCount) return Count + Difference; } diff --git a/Source/LegumeMix/Public/LMUtils.h b/Source/LegumeMix/Public/LMUtils.h index ea4c804..b984b8d 100644 --- a/Source/LegumeMix/Public/LMUtils.h +++ b/Source/LegumeMix/Public/LMUtils.h @@ -2,3 +2,23 @@ /** The Trace Channel for Bullets. */ #define TRACE_BULLET ECC_GameTraceChannel1 + +namespace LMCheats +{ + static TAutoConsoleVariable CVarInfiniteAmmo( + TEXT("l.InfiniteAmmo"), + 0, + TEXT("Defines if an ammo type stockage is infinite or not.\n") + TEXT("0 = off\n") + TEXT("1 = decrease until 1 ammo\n") + TEXT("2 = infinite ammo")); + + + static TAutoConsoleVariable CVarInfiniteClip( + TEXT("l.InfiniteClip"), + 0, + TEXT("Defines if a clip is infinite or not.\n") + TEXT("0 = off\n") + TEXT("1 = decrease until 1 bullet left in clip\n") + TEXT("2 = infinite clip")); +} diff --git a/Source/LegumeMix/Public/Weapon/LMWeaponBase.h b/Source/LegumeMix/Public/Weapon/LMWeaponBase.h index 693d83c..d23ab71 100644 --- a/Source/LegumeMix/Public/Weapon/LMWeaponBase.h +++ b/Source/LegumeMix/Public/Weapon/LMWeaponBase.h @@ -44,7 +44,7 @@ public: UFUNCTION(BlueprintCallable) FName GetAttachmentSocketName() const { return WeaponSocket; } - UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) + UFUNCTION(BlueprintCallable, BlueprintNativeEvent) void OnDefaultReload(); protected: