void ABolter::BeginPlay()
{
Super::BeginPlay();
CurrentAmmoWithYou = FMath::DivideAndRoundUp(MaxAmmoCarry, 2);
CurrentAmmoInMagazine = MaxAmmoMagazine;
CurrentAmmoWithYou -= CurrentAmmoInMagazine;
}
void ABolter::Fire()
{
if (CurrentAmmoInMagazine <= 0)
{
UGameplayStatics::PlaySoundAtLocation(SkeletalMesh, EmptyMagazineSound,
this->GetActorLocation(),
this->GetActorRotation());
return;
}
--CurrentAmmoInMagazine;
}
void ABolter::StopFireRate()
{
if (!GetWorldTimerManager().IsTimerActive(FireRateTimerHandle)) { return; }
GetWorldTimerManager().ClearTimer(FireRateTimerHandle);
}
bool ABolter::IsShooting()
{
return GetWorldTimerManager().IsTimerActive(FireRateTimerHandle);
}
void ABolter::Reload()
{
OwnerCharacterSpaceMarine = Cast<ASpaceMarineCharacter>(GetOwner());
if (CurrentAmmoWithYou > 0 && CurrentAmmoInMagazine != MaxAmmoMagazine && !IsShooting())
{
if (!OwnerCharacterSpaceMarine) { return; }
OwnerCharacterSpaceMarine->SetIsReloading(true);
OwnerCharacterSpaceMarine->GetCharacterMovement()->MaxWalkSpeed = 300.f;
UGameplayStatics::PlaySoundAtLocation(SkeletalMesh, ReloadSound, this->GetActorLocation(), this->GetActorRotation());
GetWorldTimerManager().SetTimer(ReloadTimer, this, &ABolter::CalculateBulletsAmountToReload, ReloadTime);
}
}
void ABolter::CalculateBulletsAmountToReload()
{
OwnerCharacterSpaceMarine->SetIsReloading(false);
OwnerCharacterSpaceMarine->GetCharacterMovement()->MaxWalkSpeed = 600.f;
int32 AmmoToReload = MaxAmmoMagazine - CurrentAmmoInMagazine;
if (CurrentAmmoWithYou < AmmoToReload)
{
CurrentAmmoInMagazine += CurrentAmmoWithYou;
CurrentAmmoWithYou = 0;
}
else
{
CurrentAmmoInMagazine += AmmoToReload;
CurrentAmmoWithYou -= AmmoToReload;
if (CurrentAmmoWithYou < 0)
{
CurrentAmmoWithYou = 0;
}
}
}
int32 ABolter::GetAmmoInMagazineValue()
{
return CurrentAmmoInMagazine;
}
int32 ABolter::GetAmmoWithYouValue()
{
return CurrentAmmoWithYou;
}
void ABolter::ReplenishAmmo()
{
if (CurrentAmmoWithYou < MaxAmmoCarry)
{
UGameplayStatics::PlaySoundAtLocation(SkeletalMesh, TakeAmmo, this->GetActorLocation(), this->GetActorRotation());
CurrentAmmoWithYou = MaxAmmoCarry;
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter