コード例 #1
0
        public async Task <bool> ApproachAsync(string verb, IObject obj)
        {
            ApproachHotspots approachStyle = getApproachStyle(verb);
            var faceDirection = _faceDirection;
            var walk          = _walk;
            var hotspot       = obj.GetComponent <IHotspotComponent>();
            var walkPt        = hotspot?.WalkPoint;

            switch (approachStyle)
            {
            case ApproachHotspots.NeverWalk:
                break;

            case ApproachHotspots.FaceOnly:
                if (faceDirection != null)
                {
                    await faceDirection.FaceDirectionAsync(obj);
                }
                break;

            case ApproachHotspots.WalkIfHaveWalkPoint:
                if (walkPt == null && faceDirection != null)
                {
                    await faceDirection.FaceDirectionAsync(obj);
                }
                else
                {
                    if (walk != null && !await walk.WalkAsync(new Position(walkPt.Value)))
                    {
                        return(false);
                    }
                    if (faceDirection != null)
                    {
                        await faceDirection.FaceDirectionAsync(obj);
                    }
                }
                break;

            case ApproachHotspots.AlwaysWalk:
                PointF?walkPoint = walkPt ?? obj.CenterPoint ?? obj.Position.XY;
                if (walk != null && !await walk.WalkAsync(new Position(walkPoint.Value)))
                {
                    return(false);
                }
                if (faceDirection != null)
                {
                    await _faceDirection.FaceDirectionAsync(obj);
                }
                break;

            default:
                throw new NotSupportedException("Approach style is not supported: " + approachStyle.ToString());
            }
            return(true);
        }
コード例 #2
0
        public async Task <bool> ApproachAsync(string verb, IObject obj)
        {
            ApproachHotspots approachStyle = getApproachStyle(verb);

            switch (approachStyle)
            {
            case ApproachHotspots.NeverWalk:
                break;

            case ApproachHotspots.FaceOnly:
                await _faceDirection.FaceDirectionAsync(obj);

                break;

            case ApproachHotspots.WalkIfHaveWalkPoint:
                if (obj.WalkPoint == null)
                {
                    await _faceDirection.FaceDirectionAsync(obj);
                }
                else
                {
                    if (!await _walk.WalkAsync(new AGSLocation(obj.WalkPoint.Value)))
                    {
                        return(false);
                    }
                    await _faceDirection.FaceDirectionAsync(obj);
                }
                break;

            case ApproachHotspots.AlwaysWalk:
                PointF?walkPoint = obj.WalkPoint ?? obj.CenterPoint ?? obj.Location.XY;
                if (!await _walk.WalkAsync(new AGSLocation(walkPoint.Value)))
                {
                    return(false);
                }
                await _faceDirection.FaceDirectionAsync(obj);

                break;

            default:
                throw new NotSupportedException("Approach style is not supported: " + approachStyle.ToString());
            }
            return(true);
        }