// Called every frame void ABaseWeapon::Tick(float DeltaTime) { Super::Tick(DeltaTime); if (MyPawn != nullptr) { fireTargetingRaycasts(); if (ProjectileType != EWeaponProjectile::EProjectile) { setInstantTarget(); } else { setProjectileTarget(); } } if (StartFiring) { HandleFiring(); } if (ProjectileType == NULL) { ProjectileType = EWeaponProjectile::EBullet; } }
void ABaseWeapon::OnStartFire() { if (!StartFiring) { StartFiring = true; HandleFiring(); } }
void ASWeapon::ServerHandleFiring_Implementation() { const bool bShouldUpdateAmmo = CanFire(); HandleFiring(); if (bShouldUpdateAmmo) { // Update firing FX on remote clients BurstCounter++; } }
void AAWeapon::OnBurstStarted() { // Start firing, can be delayed to satisfy TimeBetweenShots const float GameTime = GetWorld()->GetTimeSeconds(); if (LastFireTime > 0 && TimeBetweenShots > 0.0f && LastFireTime + TimeBetweenShots > GameTime) { GetWorldTimerManager().SetTimer(TimerHandle_HandleFiring, this, &AAWeapon::HandleFiring, LastFireTime + TimeBetweenShots - GameTime, false); } else { HandleFiring(); } }
void AAWeapon::ServerHandleFiring_Implementation() { const bool bShouldUpdateAmmo = (CurrentAmmoInClip > 0 && CanFire()); HandleFiring(); if (bShouldUpdateAmmo) { UseAmmo(); BurstCounter++; } }
void ASWeapon::OnBurstStarted() { const float GameTime = GetWorld()->GetTimeSeconds(); if ((LastFireTime > 0.0f) && (TimeBetweenShots > 0.0f) && (LastFireTime + TimeBetweenShots > GameTime)) { GetWorldTimerManager().SetTimer(HandleFiringTimerHandle, this, &ASWeapon::HandleFiring, LastFireTime + TimeBetweenShots - GameTime, false); } else { HandleFiring(); } }
void AShooterWeapon::ServerHandleFiring_Implementation() { const bool bShouldUpdateAmmo = (CurrentAmmoInClip > 0 && CanFire()); HandleFiring(); if (bShouldUpdateAmmo) { // update ammo UseAmmo(); // update firing FX on remote clients BurstCounter++; } }
void AMagicBattleSoccerWeapon::ServerHandleFiring_Implementation() { HandleFiring(); }