diff --git a/Source/LegumeMix/Private/Player/LMPlayer.cpp b/Source/LegumeMix/Private/Player/LMPlayer.cpp index 375ea0e..0526e8e 100644 --- a/Source/LegumeMix/Private/Player/LMPlayer.cpp +++ b/Source/LegumeMix/Private/Player/LMPlayer.cpp @@ -4,9 +4,9 @@ #include "Player/LMPlayer.h" #include "KismetTraceUtils.h" -#include "LMBulletInfo.h" #include "Camera/CameraComponent.h" #include "Ammo/LMAmmo.h" +#include "Player/LMBulletInfo.h" #include "Weapon/LMWeaponManager.h" ALMPlayer::ALMPlayer() @@ -21,6 +21,8 @@ ALMPlayer::ALMPlayer() ArmsMesh = CreateDefaultSubobject(TEXT("Arms Mesh")); ArmsMesh->SetupAttachment(Camera); + + SpreadStream = FRandomStream(FMath::Rand()); } // Called when the game starts or when spawned @@ -59,10 +61,20 @@ void ALMPlayer::PlayAnimation(UAnimMontage* Animation) void ALMPlayer::FireBullets(const FLMBulletInfo Settings) { - FVector EndLocation = Settings.Origin + (Settings.Direction * Settings.MaxDistance); - TArray Hits = TArray(); - GetWorld()->LineTraceMultiByChannel(Hits, Settings.Origin, EndLocation, ECC_Camera); - DrawDebugLineTraceMulti(GetWorld(), Settings.Origin, EndLocation, EDrawDebugTrace::ForDuration, Hits.Num() > 0, Hits, FColor::Green, FColor::Red, 10.f); + FVector EndLocation; + FVector ShotVector; + FHitResult OutHit = FHitResult(); + + DrawDebugLine(GetWorld(), Settings.Origin, Settings.Origin + (Settings.Direction * Settings.MaxDistance), FColor::Blue, false, 2.f); + + for (int Shots = 0; Shots < Settings.BulletCount; Shots++) + { + ShotVector = UKismetMathLibrary::RandomUnitVectorInConeInDegreesFromStream(SpreadStream, Settings.Direction, Settings.Spread); + EndLocation = Settings.Origin + (ShotVector * Settings.MaxDistance); + + const bool HasHit = GetWorld()->LineTraceSingleByChannel(OutHit, Settings.Origin, EndLocation, ECC_Camera); + DrawDebugLineTraceSingle(GetWorld(), Settings.Origin, EndLocation, EDrawDebugTrace::ForDuration, HasHit, OutHit, FColor::Green, FColor::Red, 2.f); + } } FVector ALMPlayer::GetWeaponFiringOrigin() const diff --git a/Source/LegumeMix/Private/Weapon/LMShotgun.cpp b/Source/LegumeMix/Private/Weapon/LMShotgun.cpp index 1382d63..539b657 100644 --- a/Source/LegumeMix/Private/Weapon/LMShotgun.cpp +++ b/Source/LegumeMix/Private/Weapon/LMShotgun.cpp @@ -18,7 +18,7 @@ void ALMShotgun::PrimaryFire() if (!Player) return; - PlaySound(Data.FireSound); + PlaySound(FireSound); PlayAnimation(PrimaryFireAnimation); FVector Origin = Player->GetWeaponFiringOrigin(); diff --git a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp index 3c5e78b..a01d32b 100644 --- a/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp +++ b/Source/LegumeMix/Private/Weapon/LMWeaponManager.cpp @@ -68,7 +68,20 @@ void 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)) + { + AmmoData[AmmoType].AddAmmo(AmmoCount); + } + else + { + const FString Warning = FString::Printf(TEXT("Ammo type %i not found"), AmmoType); + GEngine->AddOnScreenDebugMessage(1, 2.f, FColor::Orange, Warning); + + FLMAmmoData Data = FLMAmmoData(); + Data.AmmoType = AmmoType; + Data.AmmoCount = AmmoCount; + AmmoData[AmmoType] = Data; + } } void ULMWeaponManager::Fire()