A game framework written with osu! in mind.
at master 3.7 kB view raw
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2// See the LICENCE file in the repository root for full licence text. 3 4using osu.Framework.Graphics; 5using osu.Framework.Graphics.Containers; 6using osu.Framework.Graphics.Cursor; 7using osu.Framework.Graphics.Shapes; 8using osu.Framework.Utils; 9using osu.Framework.Testing; 10using osuTK; 11using osuTK.Graphics; 12 13namespace osu.Framework.Tests.Visual.Containers 14{ 15 public class TestSceneCursorContainer : ManualInputManagerTestScene 16 { 17 public TestSceneCursorContainer() 18 { 19 Container container; 20 TestCursorContainer cursorContainer; 21 22 void createContent() 23 { 24 Child = container = new Container 25 { 26 Masking = true, 27 RelativeSizeAxes = Axes.Both, 28 Anchor = Anchor.Centre, 29 Origin = Anchor.Centre, 30 Size = new Vector2(0.5f), 31 Children = new Drawable[] 32 { 33 new Box 34 { 35 Colour = Color4.Yellow, 36 RelativeSizeAxes = Axes.Both, 37 }, 38 cursorContainer = new TestCursorContainer 39 { 40 Name = "test", 41 RelativeSizeAxes = Axes.Both 42 } 43 } 44 }; 45 } 46 47 bool cursorCenteredInContainer() => 48 Precision.AlmostEquals( 49 cursorContainer.ActiveCursor.ScreenSpaceDrawQuad.Centre, 50 container.ScreenSpaceDrawQuad.Centre); 51 52 bool cursorAtMouseScreenSpace() => 53 Precision.AlmostEquals( 54 cursorContainer.ActiveCursor.ScreenSpaceDrawQuad.Centre, 55 InputManager.CurrentState.Mouse.Position); 56 57 createContent(); 58 AddStep("Move cursor to centre", () => InputManager.MoveMouseTo(container.ScreenSpaceDrawQuad.Centre)); 59 AddAssert("cursor is centered", () => cursorCenteredInContainer()); 60 AddStep("Move container", () => container.Y += 50); 61 AddAssert("cursor no longer centered", () => !cursorCenteredInContainer()); 62 AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); 63 AddStep("Resize container", () => container.Size *= new Vector2(1.4f, 1)); 64 AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); 65 66 // ensure positional updates work 67 AddStep("Move cursor to centre", () => InputManager.MoveMouseTo(container.ScreenSpaceDrawQuad.Centre)); 68 AddAssert("cursor is not centered", () => cursorCenteredInContainer()); 69 AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); 70 71 // ensure we received the mouse position update from IRequireHighFrequencyMousePosition 72 AddStep("Move cursor to test centre", () => InputManager.MoveMouseTo(Content.ScreenSpaceDrawQuad.Centre)); 73 AddStep("Recreate container with mouse already in place", createContent); 74 AddAssert("cursor is centered", () => cursorCenteredInContainer()); 75 AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); 76 } 77 78 private class TestCursorContainer : CursorContainer 79 { 80 protected override Drawable CreateCursor() => new Circle 81 { 82 Size = new Vector2(50), 83 Colour = Color4.Red, 84 Origin = Anchor.Centre, 85 }; 86 } 87 } 88}