Shooting the player

Now that we have added player detection to our AI, it is ready to shoot at the player now. To accomplish this, we will need to use a method that gets called every n seconds so as to prevent shooting rapidly during every frame. Luckily, for the purposes of this book, I've created a lightweight callback timer that doesjust this. So let's get started.

Open the CPlayer.cpp file and navigate to the PostInit() method. Add a callback method to the timer that shoots the player. It should look similar to the following:

//We Are AI
if( !m_bClient )
{
  //Add Callback To Timer.  Try To Shoot The Player Every 2 Seconds.
  m_CallBackTimer += [ this ] ( double dDelta )
  {
    //Get The Player
    auto pPlayer = gEnv->pGame->GetIGameFramework()->GetClientActor();

    //Get The Distance The We Are From The Player/
    auto Len = GetEntity()->GetWorldPos().GetDistance( pPlayer->GetEntity()->GetWorldPos() );

    //If We Are Less Than 15 Meters, Then Shoot The Player.
    if( Len < 15 )
    {
      //Unlimited Ammo For AI.
      m_pWeapon->AddAmmo( 1 );

      //Shoot At The Target, With A Bullet Speed Multiplier Of 10.
      m_pWeapon->Shoot( 10 );
    }
  };
}

Notice how we first check to see if we are an AI. We then proceed to add a callback method in the form of a C++11 Lambda, which will get called every time the timer reaches its interval (which is currently set at 2 seconds). In the callback, we simply add ammo to the AI to give it unlimited ammunition and shoot the weapon.