public Jumper(PortalActionJumpComponent issuer, Transform unit, PortalCell from, IPositioned to, Action callWhenComplete)
            {
                _unit     = unit;
                _callBack = callWhenComplete;

                var dir = to.position - unit.position.AdjustAxis(0.0f, Axis.Y);

                _distance  = dir.magnitude;
                _direction = dir / _distance;

                float fromHeight;

                if (!GameServices.heightStrategy.heightSampler.TrySampleHeight(_unit.position, out fromHeight))
                {
                    //If we aren't height sampling, just assume that from height is identical to destination height
                    fromHeight = to.position.y;
                }

                _hmax    = issuer.heightFactor * _distance;
                _alpha   = Mathf.PI / _distance;
                _beta    = (to.position.y - fromHeight) / _distance;
                _charlie = _unit.position.y;

                _speed = issuer.groundSpeed;

                _targetRotation = Quaternion.LookRotation(dir, Vector3.up);

                this.repeat = true;
            }
        /// <summary>
        /// Executes the action.
        /// </summary>
        /// <param name="unit">The unit that has entered the portal.</param>
        /// <param name="from">The portal cell that was entered.</param>
        /// <param name="to">The destination at the other side of the portal.</param>
        /// <param name="callWhenComplete">The callback to call when the move is complete.</param>
        public void Execute(Transform unit, PortalCell from, IPositioned to, Action callWhenComplete)
        {
            var j = new Jumper(this, unit, from, to, callWhenComplete);

            LoadBalancer.defaultBalancer.Add(j, 0f);
        }