Dear experts,
I set up a fire function when I click the left mouse button. I have a delay of 2 seconds. But when I click the first time the delay already kicks in. But I don’t want that:
void ATurret::StartFire()
{
FTimerDelegate TimeDelegate;
TimeDelegate.BindUFunction(this, FName("FireProjectile"), Fire1MissileClass);
GetWorldTimerManager().SetTimer(FiringTimerHandle, TimeDelegate, 2.0f, false);
}
What am I missing? How can I avoid the delay on the first click?
Thank you, Peter
Missing another parameter (float InFirstDelay) https://docs.unrealengine.com/en-US/…ger/index.html :
GetWorldTimerManager().SetTimer(FiringTimerHandle, TimeDelegate, 2.0f, false, **0.0f**);
or you can call the function after setting the timer.
Hi EvilCleric,
I could not get this to work with the timer. I made my own method finally.
In the .h file
/* time between shots **/
UPROPERTY(EditAnywhere, BlueprintReadWrite,Category = "Projectile")
float FirePause;
/* last time fired **/
float LastFireTime;
In the .cpp file
void ATurret::StartFire(float DeltaTime)
{
float CurrentSeconds = DeltaTime;
/* if we want to fire quickly again and the current time is smaller
than last fire time + fire pause time we just return **/
if (CurrentSeconds < LastFireTime) { return; }
else
{
LastFireTime = CurrentSeconds;
FireProjectile(Fire1MissileClass);
/* we add the fire pause to the time fired **/
LastFireTime += FirePause;
}
}
best regards, Peter