if(local_info.WeaponHasHighDrop()) return GetAimVector(output); if(!got_dir_dist) GetDistanceToTarget(); *output = direction_to_target; return TRUE; } float TargetInformation::GetDistanceToTarget(void) { assert(player && good); if(got_dir_dist) return distance_to_target; D3DXVECTOR3 dir_vector; D3DXVec3Subtract(&dir_vector, &base_aim, local_info.GetAimPos()); distance_to_target = D3DXVec3Length(&dir_vector); D3DXVec3Normalize(&direction_to_target, &dir_vector); got_dir_dist = TRUE; return distance_to_target; } BOOL TargetInformation::IsGoodDistance(void) { assert(player && good); CObject_Soldier* local_soldier = local_info.GetSoldier(); CTemplate_GenericFireArm* weapon_template = (CTemplate_GenericFireArm*) local_info.GetWeapon()->object_template; CTComponent_Fire* fire = (CTComponent_Fire*) weapon_template->GetComponent(COMPONENT_FIRE_ID); if(!fire) return FALSE; if(!got_dir_dist) GetDistanceToTarget(); float max_bullet_dist = D3DXVec3Dot(local_info.GetMovementSpeed(), local_info.GetAimDir()) + weapon_template->fire_velocity * local_info.GetAmmoTemplate()->timeToLive_1; if(distance_to_target > max_bullet_dist ) return FALSE;