示例#1
0
 public void OnPress_LongerNoteHalfwayHold_HasHalfScore()
 {
     AddStep("Add notes", () => Story.AddNote(new GameHoldNote {
         HitTime = 0, EndTime = 1000
     }));
     AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
     PressAndRelease(500, 500);
     AddAssert("Has half score", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 500);
 }
示例#2
0
 public void OnPress_LongerNoteNoHold_HasFullScore()
 {
     AddStep("Add notes", () => Story.AddNote(new GameHoldNote {
         HitTime = 0, EndTime = 1000
     }));
     AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
     AddStep("Seek after EndTime", () => Stopwatch.Seek(1000));
     AddAssert("Has full score", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 1000);
 }
示例#3
0
 public void Undo()
 {
     Story.AddNote(Note);
     if (Editor.ToolState is SelectToolState selectTool)
     {
         selectTool.ClearNoteSelection();
         selectTool.AddNoteSelection(Note);
     }
 }
示例#4
0
 public void OnPress_2ReleasesInDuringState_Plays2MissSounds()
 {
     AddStep("Add note", () => Story.AddNote(new GameHoldNote {
         HitTime = 0, EndTime = 1000
     }));
     AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
     PressAndRelease(50, 200);
     PressAndRelease(600, 100);
     AddAssert("Plays 2 miss sounds", () => PlayScreen.ScoreProcessor.Miss.PlayCount == 2);
 }
示例#5
0
 public void SetUpSteps()
 {
     AddStep("Pause editor", () => Editor.Play(false));
     AddStep("Restart editor", () => Editor.Restart());
     AddStep("Reset story", () => Story.Reset());
     AddStep("Add note", () => Story.AddNote(NoteToTest = new EditorHoldNote {
         HitTime = Story.Notes.ShowTime + Story.Notes.FadeInTime + NoteAppearTime,
         EndTime = Story.Notes.ShowTime + Story.Notes.FadeInTime + NoteAppearTime + HoldDuration
     }));
 }
示例#6
0
        public void GetState_NotVisible()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Seek before note is visible", () => Stopwatch.Seek(25));
            AddAssert("Note is in NotVisible state", () => note.State == HoldNoteState.NotVisible);
        }
示例#7
0
        public void GetState_VisibleBefore()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Seek before MissThreshold", () => Stopwatch.Seek(note.HitTime - Notes.MissThreshold - 50));
            AddAssert("Note is in VisibleBefore state", () => note.State == HoldNoteState.VisibleBefore);
        }
示例#8
0
        public void GetState_HitWindow()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Seek within MissThreshold", () => Stopwatch.Seek(note.HitTime - Notes.MissThreshold / 2));
            AddAssert("Note is in HitWindow state", () => note.State == HoldNoteState.HitWindow);
        }
示例#9
0
        public void GetState_VisibleAfter()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Seek after EndTime", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime / 2));
            AddAssert("Note is in VisibleAfter state", () => note.State == HoldNoteState.VisibleAfter);
        }
示例#10
0
        public void GetState_During()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Seek between HitTime and EndTime", () => Stopwatch.Seek((note.HitTime + note.EndTime) / 2));
            AddAssert("Note is in During state", () => note.State == HoldNoteState.During);
        }
示例#11
0
 public void OnPress_OutsideMissThreshold_DoesNothing()
 {
     AddStep("Add note", () => Story.AddNote(new GameNote {
         HitTime = Notes.MissThreshold + 50
     }));
     AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
     AddStep("Hold key", () => InputManager.PressKey(Key.Z));
     AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
     AddStep("Seek after post-threshold", () => Stopwatch.Seek(Notes.MissThreshold * 2 + 60));
     AddAssert("Note was missed", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == Notes.MissThreshold);
 }
示例#12
0
        [TestCase(1260, 40)] // Press and Release entirely within VisibleAfter state
        public void Score_PressIgnored_IsFullDurationPlusEndPenalty(int timeToPress, int holdDuration)
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            PressAndRelease(timeToPress, holdDuration);
            AddStep("Seek after note is deleted", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime));
            AddAssert("Score is note duration (full miss)", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 100.0 + Notes.MissThreshold);
        }
示例#13
0
        public void UpdateColor_NotesAlphaCommand_IsHalf()
        {
            GameNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new GameNote {
                HitTime = Story.Notes.ShowTime - 100
            }));
            AddStep("Apply half NotesAlphaCommand", () => Story.AddCommand(new NotesAlphaCommand {
                StartValue = 0.5f,
                EndValue   = 0.5f
            }));
            AddAssert("Note is half alpha", () => Precision.AlmostEquals(note.Alpha, 0.5f));
        }
示例#14
0
        public void UpdateColor_ApproachesColorCommand_IsGreen()
        {
            GameNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new GameNote {
                HitTime = 1000
            }));
            AddStep("Apply Green ApproachesColorCommand", () => Story.AddCommand(new ApproachesColorCommand {
                StartValue = Color4.Green,
                EndValue   = Color4.Green
            }));
            AddAssert("Approach is green", () => note.Approach.Colour == Color4.Green);
        }
示例#15
0
        public void UpdateColor_NotesOutlineThicknessCommand_IsTwoHundredths()
        {
            GameNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new GameNote {
                HitTime = Story.Notes.ShowTime - 100
            }));
            AddStep("Apply 0.02 NotesOutlineThicknessCommand", () => Story.AddCommand(new NotesOutlineThicknessCommand {
                StartValue = 0.02f,
                EndValue   = 0.02f
            }));
            AddAssert("Note outline is 0.02 thick", () => Precision.AlmostEquals(note.OutlineThickness, 0.02f));
        }
示例#16
0
        public void UpdateColor_NotesOutlineColorCommand_IsGreen()
        {
            GameNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new GameNote {
                HitTime = Story.Notes.ShowTime - 100
            }));
            AddStep("Apply green NotesOutlineColorCommand", () => Story.AddCommand(new NotesOutlineColorCommand {
                StartValue = Color4.Green,
                EndValue   = Color4.Green
            }));
            AddAssert("Note outline is green", () => note.OutlineColor == Color4.Green);
        }
示例#17
0
        public void OnPress_WithinMissThreshold_RegistersHit()
        {
            GameNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameNote {
                HitTime = Notes.MissThreshold + 50
            }));
            AddStep("Seek between pre-threshold and HitTime", () => Stopwatch.Seek(note.HitTime - Notes.MissThreshold / 2));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Hold key", () => InputManager.PressKey(Key.Z));
            AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Seek after post-threshold", () => Stopwatch.Seek(Notes.MissThreshold * 2 + 60));
            AddAssert("Note was hit", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == Notes.MissThreshold / 2);
        }
示例#18
0
        public void UpdateColor_HoldNotesColorCommand_IsGreen()
        {
            GameHoldNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.ShowTime - 100,
                EndTime = Story.Notes.ShowTime + 100
            }));
            AddStep("Apply green HoldNotesColorCommand", () => Story.AddCommand(new HoldNotesColorCommand {
                StartValue = Color4.Green,
                EndValue   = Color4.Green
            }));
            AddAssert("Hold note is green", () => note.InnerColor == Color4.Green);
        }
示例#19
0
        public void UpdateColor_HoldApproachesColorCommand_IsGreen()
        {
            EditorHoldNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new EditorHoldNote {
                HitTime = Story.Notes.ShowTime - 100,
                EndTime = Story.Notes.ShowTime + 100
            }));
            AddStep("Apply green HoldApproachesColorCommand", () => Story.AddCommand(new HoldApproachesColorCommand {
                StartValue = Color4.Green,
                EndValue   = Color4.Green
            }));
            AddAssert("Hold approach is green", () => note.Approach.Colour == Color4.Green);
        }
示例#20
0
        public void UpdateSliderPath_HoldNotesOutlineColorCommand_IsGreen()
        {
            EditorHoldNote note = null;

            AddStep("Add a note", () => Story.AddNote(note = new EditorHoldNote {
                HitTime = Story.Notes.ShowTime - 100,
                EndTime = Story.Notes.ShowTime + 100
            }));
            AddStep("Apply green HoldNotesOutlineColorCommand", () => Story.AddCommand(new HoldNotesOutlineColorCommand {
                StartValue = Color4.Green,
                EndValue   = Color4.Green
            }));
            AddAssert("Hold note path is green", () => note.SliderPath.OutlineColor == Color4.Green);
        }
示例#21
0
 public void SetUpSteps()
 {
     AddStep("Pause editor", () => Editor.Play(false));
     AddStep("Restart editor", () => Editor.Restart());
     AddStep("Reset story", () => Story.Reset());
     AddStep("Add note", () => Story.AddNote(NoteToTest = new EditorHoldNote {
         HitTime = Story.Notes.ShowTime + Story.Notes.FadeInTime + NoteAppearTime,
         EndTime = Story.Notes.ShowTime + Story.Notes.FadeInTime + NoteAppearTime + HoldDuration
     }));
     AddStep("Set max note alpha to 1", () => Story.AddCommand(new HoldNotesAlphaCommand {
         StartValue = 1.0f,
         EndValue   = 1.0f
     }));
 }
示例#22
0
        [TestCase(1150, 200)]  // Press exactly at HitTime, Release when note disappears
        public void Score_PressInHitWindowReleaseInVisibleAfter_IsOffsetFromHitTime(int timeToPress, int holdDuration)
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            PressAndRelease(timeToPress, holdDuration);
            AddStep("Seek after note is deleted", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime));
            AddAssert("Score is offset from HitTime", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score ==
                      Story.Notes.FadeInTime + Story.Notes.ShowTime + 50 // Expected HitTime
                      - timeToPress);                                    // Actual HitTime
        }
示例#23
0
        public void OnPress_MultipleHitsInMissThresholdBeforeHitTime_PlaysHitSoundOnce()
        {
            GameHoldNote note = null;

            AddStep("Add notes", () => Story.AddNote(note = new GameHoldNote {
                HitTime = 0, EndTime = 1000
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Seek before HitTime", () => Stopwatch.Seek(note.HitTime - 1));
            AddStep("Hold key", () => InputManager.PressKey(Key.Z));
            AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Hold key", () => InputManager.PressKey(Key.Z));
            AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
            AddAssert("Plays hit sound once", () => PlayScreen.ScoreProcessor.Hit.PlayCount == 1);
        }
示例#24
0
        public void OnPress_NoteThenNote_HitsLaterNote()
        {
            AddStep("Add notes", () => {
                Story.AddNote(new GameNote {
                    HitTime = 0
                });
                Story.AddNote(new GameNote {
                    HitTime = 10, Coordinates = new Vector2(0, 1)
                });
            });

            AddStep("Seek clock", () => Stopwatch.Seek(10));
            AddStep("Move mouse to second note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Hold key", () => InputManager.PressKey(Key.Z));
            AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Seek clock", () => Stopwatch.Seek(Notes.MissThreshold + 10));
            AddAssert("Hit only top note", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == Notes.MissThreshold);
        }
示例#25
0
        public void OnPress_ConsecutiveHoldNotes_PlaysSecondNoteOutOfOrder()
        {
            GameHoldNote note = null;

            AddStep("Add notes", () => {
                Story.AddNote(new GameHoldNote {
                    HitTime = 0, EndTime = 1000
                });
                Story.AddNote(note = new GameHoldNote {
                    HitTime        = 1001,
                    EndTime        = 2000,
                    Coordinates    = Vector2.One,
                    EndCoordinates = Vector2.One
                });
            });
            AddStep("Move mouse to second note", () => MoveMouseTo(note));
            PressAndRelease(1001, 2000);
            AddAssert("Plays second note out of order", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 1000 + Notes.MissThreshold);
        }
示例#26
0
        public void Score_MultiplePressesInHitWindowOnly_IncludesFirstOffsetFromHitTime()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            PressAndRelease(950, 50);
            PressAndRelease(1000, 50);
            PressAndRelease(1050, 50);
            PressAndRelease(1100, 50);
            AddStep("Seek after note is deleted", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime));
            AddAssert("Score is first Press's offset from HitTime", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score ==
                      Story.Notes.FadeInTime + Story.Notes.ShowTime + 50 // HitTime
                      - 950                                              // First HitTime
                      + 100.0);                                          // Hold note duration
        }
示例#27
0
        public void Score_InvalidKeySwitch_IsFullDuration()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Seek to 100", () => Stopwatch.Seek(100));
            AddStep("Press Z", () => InputManager.PressKey(Key.Z));
            AddStep("Seek to HitTime", () => Stopwatch.Seek(Story.Notes.FadeInTime + Story.Notes.ShowTime + 50));
            AddStep("Press X", () => InputManager.PressKey(Key.X));
            AddStep("Release X", () => InputManager.ReleaseKey(Key.X));
            AddStep("Seek to EndTime", () => Stopwatch.Seek(note.EndTime));
            AddStep("Release Z", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Seek after note is deleted", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime));
            AddAssert("Score is 100", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 100);
        }
示例#28
0
        public void Score_OverlappingPresses_HaveNoEffect()
        {
            GameHoldNote note = null;

            AddStep("Add note", () => Story.AddNote(note = new GameHoldNote {
                HitTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 50,
                EndTime = Story.Notes.FadeInTime + Story.Notes.ShowTime + 150
            }));
            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Seek to HitTime", () => Stopwatch.Seek(Story.Notes.FadeInTime + Story.Notes.ShowTime + 50));
            AddStep("Press Z", () => InputManager.PressKey(Key.Z));
            AddStep("Seek to HitTime + 5", () => Stopwatch.Seek(note.HitTime + 5));
            AddStep("Press X", () => InputManager.PressKey(Key.X));
            AddStep("Seek to HitTime + 10", () => Stopwatch.Seek(note.HitTime + 10));
            AddStep("Release X", () => InputManager.ReleaseKey(Key.X));
            AddStep("Seek to EndTime", () => Stopwatch.Seek(note.EndTime));
            AddStep("Release Z", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Seek after note is deleted", () => Stopwatch.Seek(note.EndTime + Story.Notes.FadeOutTime));
            AddAssert("Score is 0", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == 0);
        }
示例#29
0
        public void OnPress_HoldNoteOnTopOfNote_HitsHoldNote()
        {
            var      holdNoteHitTime = 0;
            var      holdNoteEndTime = 10;
            GameNote note            = null;

            AddStep("Add notes", () => {
                Story.AddNote(new GameHoldNote {
                    HitTime = holdNoteHitTime, EndTime = holdNoteEndTime
                });
                Story.AddNote(note = new GameNote {
                    HitTime = 100
                });
            });

            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            PressAndRelease(holdNoteHitTime, holdNoteEndTime - holdNoteHitTime);
            AddStep("Seek after last note is deleted", () => Stopwatch.Seek(note.HitTime + Notes.MissThreshold));
            AddAssert("Hits only hold note", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == Notes.MissThreshold);
        }
示例#30
0
        public void OnPress_NoteOnTopOfHoldNote_HitsNote()
        {
            var holdNoteHitTime = 1;
            var holdNoteEndTime = 101;

            AddStep("Add notes", () => {
                Story.AddNote(new GameNote {
                    HitTime = 0
                });
                Story.AddNote(new GameHoldNote {
                    HitTime = holdNoteHitTime, EndTime = holdNoteEndTime
                });
            });

            AddStep("Move mouse to note", () => MoveMouseTo(Story.Notes.Children.First()));
            AddStep("Hold key", () => InputManager.PressKey(Key.Z));
            AddStep("Release key", () => InputManager.ReleaseKey(Key.Z));
            AddStep("Seek after last note is deleted", () => Stopwatch.Seek(holdNoteEndTime + Story.Notes.FadeOutTime));
            AddAssert("Hits only top note", () => PlayScreen.ScoreProcessor.ScoreStatistics.Score == holdNoteEndTime - holdNoteHitTime);
        }