internal override bool MouseMoved(IGameViewport viewport, MessageMouseArgs args)
    {
        ClearResults();

        if (WallState == WallState.StartPoint || WallState == WallState.CenterPoint)
        {
            // get startpoint location from mouse
            SetResultLocationFromMouse(args);
            return(true);
        }

        var mouseLoc = GameViews.Primary.ScreenToTile(args.X, args.Y);

        Trace.Assert(Result.HasLocation);

        var maxRange = (float)(Picker.range * locXY.INCH_PER_FEET);
        var dist     = Result.location.DistanceTo(mouseLoc);

        if (maxRange > dist)
        {
            maxRange = dist;
        }

        if (WallState == WallState.EndPoint)
        {
            // get radius and range up to mouse (trimmed by walls and such)
            var radiusInch = Picker.radiusTarget * locXY.INCH_PER_FEET / 2.0f;
            Picker.GetTrimmedRange(Result.location, mouseLoc, radiusInch, maxRange, locXY.INCH_PER_FEET * 5.0f);
            // TODO: the 2.35 might be unneeded
            Picker.degreesTarget =
                2.3561945f -
                Result.location.RotationTo(mouseLoc); // putting this in radians, unlike the usual usage
            Picker.GetTargetsInPath(Result.location, mouseLoc, radiusInch);
            Picker.DoExclusions();
            return(true);
        }
        else if (WallState == WallState.Radius)
        {
            // todo
        }

        return(false);
    }