예제 #1
0
        public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition)
        {
            if (distanceSnapGrid == null)
            {
                return(base.SnapScreenSpacePositionToValidTime(screenSpacePosition));
            }

            (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));

            return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
        }
예제 #2
0
        public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition)
        {
            if (distanceSnapGrid == null)
            {
                return(new SnapResult(screenSpacePosition, null));
            }

            // TODO: move distance snap grid to OsuHitObjectComposer.
            (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));

            return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time));
        }
예제 #3
0
        public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition)
        {
            if (snapToVisibleBlueprints(screenSpacePosition, out var snapResult))
            {
                return(snapResult);
            }

            // will be null if distance snap is disabled or not feasible for the current time value.
            if (distanceSnapGrid == null)
            {
                return(base.SnapScreenSpacePositionToValidTime(screenSpacePosition));
            }

            (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));

            return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
        }
예제 #4
0
        public override SnapResult SnapScreenSpacePositionToValidTime(Vector2 screenSpacePosition)
        {
            var positionSnap = SnapScreenSpacePositionToValidPosition(screenSpacePosition);

            if (positionSnap.ScreenSpacePosition != screenSpacePosition)
            {
                return(positionSnap);
            }

            if (distanceSnapToggle.Value == TernaryState.True && distanceSnapGrid != null)
            {
                (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));
                return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
            }

            if (rectangularGridSnapToggle.Value == TernaryState.True)
            {
                Vector2 pos = rectangularPositionSnapGrid.GetSnappedPosition(rectangularPositionSnapGrid.ToLocalSpace(screenSpacePosition));
                return(new SnapResult(rectangularPositionSnapGrid.ToScreenSpace(pos), null, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
            }

            return(base.SnapScreenSpacePositionToValidTime(screenSpacePosition));
        }
예제 #5
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            if (snapType.HasFlagFast(SnapType.NearbyObjects) && snapToVisibleBlueprints(screenSpacePosition, out var snapResult))
            {
                return(snapResult);
            }

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (distanceSnapToggle.Value == TernaryState.True && distanceSnapGrid != null)
                {
                    (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }

                if (rectangularGridSnapToggle.Value == TernaryState.True)
                {
                    Vector2 pos = rectangularPositionSnapGrid.GetSnappedPosition(rectangularPositionSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(rectangularPositionSnapGrid.ToScreenSpace(pos), null, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }
            }

            return(base.FindSnappedPositionAndTime(screenSpacePosition, snapType));
        }