Weird right?
Here is a temporary fix, using angle and position tresholds :

public function hover(jumpTo:Boolean = false):Boolean
{

        var angleTreshold:Number = 0.1;
        var positionTreshold:Number = 0.1;

        var camUpdated = false;

        if (tiltAngle != _currentTiltAngle || panAngle != _currentPanAngle) {

                tiltAngle = Math.max(minTiltAngle, Math.min(maxTiltAngle,
tiltAngle));

                panAngle = Math.max(minPanAngle, Math.min(maxPanAngle, 
panAngle));

                if (wrapPanAngle) {
                        if (panAngle < 0)
                                panAngle = (panAngle % 360) + 360;
                        else
                                panAngle = panAngle % 360;

                        if (panAngle - _currentPanAngle < -180)
                                panAngle += 360;
                        else if (panAngle - _currentPanAngle > 180)
                                panAngle -= 360;
                }

                if (jumpTo) {
                        _currentTiltAngle = tiltAngle;
                        _currentPanAngle = panAngle;
                } else {
                        _currentTiltAngle += (tiltAngle - 
_currentTiltAngle)/(steps + 1);
                        _currentPanAngle += (panAngle - 
_currentPanAngle)/(steps + 1);
                }

                //snap coords if angle differences are close
                if ((Math.abs(tiltAngle - _currentTiltAngle) < angleTreshold) &&
(Math.abs(panAngle - _currentPanAngle) < angleTreshold)) {
                        _currentTiltAngle = tiltAngle;
                        _currentPanAngle = panAngle;
                }

                camUpdated = true;
        }

        var gx:Number = target.x +
distance*Math.sin(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*toRADIANS);
        var gz:Number = target.z +
distance*Math.cos(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*toRADIANS);
        var gy:Number = target.y +
distance*Math.sin(_currentTiltAngle*toRADIANS)*yfactor;

        if ((Math.abs(x - gx) >= positionTreshold) || (Math.abs(y - gy) >=
positionTreshold) || (Math.abs(z - gz) >= positionTreshold)) {
                x = gx;
                y = gy;
                z = gz;
                camUpdated = true;
        }

        return camUpdated;
}

Not perfect but hey it works.
Waiting for an opinion... thanks.

Nicolas


On 7 jan, 20:23, nlorut <[email protected]> wrote:
> Hi,
> Congrats for your amazing work.
> I have recently updated the trunk, and it seems HoverCamera3D.hover()
> doesn't return 'false' anymore.
> In order to figure this out, here are a few test lines i wrote in
> HoverCamera3D.as :
>
> "[...]
> var gx:Number = target.x +
> distance*Math.sin(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*toRADIANS);
> var gz:Number = target.z +
> distance*Math.cos(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*toRADIANS);
> var gy:Number = target.y +
> distance*Math.sin(_currentTiltAngle*toRADIANS)*yfactor;
>
> //test//  trace ("x (" + x + ") == gx (" + gx + ") ?");
> //test//  trace ("y (" + y + ") == gy (" + gy + ") ?");
> //test//  trace ("z (" + z + ") == gz (" + gz + ") ?");
>
> if ((x == gx) && (y == gy) && (z == gz))
>         return false;
>
> x = gx;
> y = gy;
> z = gz;
>
> //test//  trace ("x final = " + x);
> //test//  trace ("y final = " + y);
> //test//  trace ("z final = " + z);
>
> return true;
> [...]"
>
> And here is what i get in the output, as the camera is no longer
> updated :
>
> "[...]
> x (7852.2958984375) == gx (7852.296056215698) ?
> y (6446.26171875) == gy (6446.2618632336935) ?
> z (9358.001953125) == gz (9358.002035108404) ?
> x final = 7852.2958984375
> y final = 6446.26171875
> z final = 9358.001953125
> camHasMoved ? true
> x (7852.2958984375) == gx (7852.296056215698) ?
> y (6446.26171875) == gy (6446.2618632336935) ?
> z (9358.001953125) == gz (9358.002035108404) ?
> x final = 7852.2958984375
> y final = 6446.26171875
> z final = 9358.001953125
> camHasMoved ? true
> ..."
>
> It seems there is a decimal precision problem between gx/gy/gz Numbers
> (12) and x/y/z cam properties (10).
>
> What do you think?
> Thanks in advance for your help.
> Nicolas

Reply via email to