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); }
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); }