public void TestReusedWithHitObjectsSpacedFarApart() { ManualClock clock = null; createTest(new Beatmap { HitObjects = { new HitObject(), new HitObject { StartTime = time_between_objects } } }, 1, () => new FramedClock(clock = new ManualClock())); DrawableTestHitObject firstObject = null; AddUntilStep("first object shown", () => this.ChildrenOfType <DrawableTestHitObject>().SingleOrDefault()?.HitObject == drawableRuleset.Beatmap.HitObjects[0]); AddStep("get DHO", () => firstObject = this.ChildrenOfType <DrawableTestHitObject>().Single()); AddStep("fast forward to second object", () => clock.CurrentTime = drawableRuleset.Beatmap.HitObjects[1].StartTime); AddUntilStep("second object shown", () => this.ChildrenOfType <DrawableTestHitObject>().SingleOrDefault()?.HitObject == drawableRuleset.Beatmap.HitObjects[1]); AddAssert("DHO reused", () => this.ChildrenOfType <DrawableTestHitObject>().Single() == firstObject); }
public void TestCustomTransformsClearedBetweenReuses() { ManualClock clock = null; createTest(new Beatmap { HitObjects = { new HitObject(), new HitObject { StartTime = 2000 } } }, 1, () => new FramedClock(clock = new ManualClock())); DrawableTestHitObject firstObject = null; Vector2 position = default; AddUntilStep("first object shown", () => this.ChildrenOfType <DrawableTestHitObject>().SingleOrDefault()?.HitObject == drawableRuleset.Beatmap.HitObjects[0]); AddStep("get DHO", () => firstObject = this.ChildrenOfType <DrawableTestHitObject>().Single()); AddStep("store position", () => position = firstObject.Position); AddStep("add custom transform", () => firstObject.ApplyCustomUpdateState += onStateUpdate); AddStep("fast forward past first object", () => clock.CurrentTime = 1500); AddStep("unapply custom transform", () => firstObject.ApplyCustomUpdateState -= onStateUpdate); AddStep("fast forward to second object", () => clock.CurrentTime = drawableRuleset.Beatmap.HitObjects[1].StartTime); AddUntilStep("second object shown", () => this.ChildrenOfType <DrawableTestHitObject>().SingleOrDefault()?.HitObject == drawableRuleset.Beatmap.HitObjects[1]); AddAssert("DHO reused", () => this.ChildrenOfType <DrawableTestHitObject>().Single() == firstObject); AddAssert("object in new position", () => firstObject.Position != position); void onStateUpdate(DrawableHitObject hitObject, ArmedState state) { using (hitObject.BeginAbsoluteSequence(hitObject.StateUpdateTime)) hitObject.MoveToOffset(new Vector2(-100, 0)); } }