protected override void OnShow(object userData)
        {
            base.OnShow(userData);

            enemy = entityDataProjectile.EntityTargetable;

            Vector3 startingPoint = entityDataProjectile.FiringPoint.position;
            Vector3 targetPoint   = Ballistics.CalculateLinearLeadingTargetPoint(
                startingPoint, enemy.transform.position,
                enemy.Velocity, startSpeed,
                acceleration);


            Vector3 direction = entityDataProjectile.FiringPoint.forward;

            Vector3    binormal = Vector3.Cross(direction, Vector3.up);
            Quaternion rotation = Quaternion.AngleAxis(fireVectorXRotationAdjustment, binormal);

            Vector3 adjustedFireVector = rotation * direction;

            FireInDirection(startingPoint, adjustedFireVector);
        }
        protected Vector3 GetHeading()
        {
            if (enemy == null)
            {
                return(Vector3.zero);
            }
            Vector3 heading;

            if (leadTarget)
            {
                heading = Ballistics.CalculateLinearLeadingTargetPoint(transform.position, enemy.transform.position,
                                                                       m_TargetVelocity, m_Rigidbody.velocity.magnitude,
                                                                       acceleration,
                                                                       leadingPrecision) - transform.position;
            }
            else
            {
                heading = enemy.transform.position - transform.position;
            }

            return(heading.normalized);
        }