protected override void LoadScene() { Game.Window.AllowUserResizing = false; var backBufferSize = new Vector2(GraphicsDevice.Presenter.BackBuffer.Width, GraphicsDevice.Presenter.BackBuffer.Height); centerPoint = new Vector2(backBufferSize.X / 2, backBufferSize.Y / 2); var longButton = (SpriteFromTexture) SplashScreenImages["button_long"]; var longSize = new Vector3(SplashScreenImages["button_long"].SizeInPixels.X, SplashScreenImages["button_long"].SizeInPixels.Y, 0); // This button will be followed followedButton = new Button { PressedImage = longButton, NotPressedImage = longButton, MouseOverImage = longButton, Size = longSize, // This element will be followed, because we have specified the same name in the FollowingEntity's UI Element Link Name = "ElementName", }; // Load the next scene when the user clicks the button followedButton.Click += delegate { LoadNextScene(); }; // Corner buttons var boxButton = (SpriteFromTexture)SplashScreenImages["button_box"]; var boxSize = new Vector3(SplashScreenImages["button_box"].SizeInPixels.X, SplashScreenImages["button_box"].SizeInPixels.Y, 0); var cornerTL = new Button { PressedImage = boxButton, NotPressedImage = boxButton, MouseOverImage = boxButton, Size = boxSize }; cornerTL.SetCanvasAbsolutePosition(new Vector3(0, 0, 0)); var cornerTR = new Button { PressedImage = boxButton, NotPressedImage = boxButton, MouseOverImage = boxButton, Size = boxSize }; cornerTR.SetCanvasAbsolutePosition(new Vector3(backBufferSize.X - boxSize.X, 0, 0)); var cornerBL = new Button { PressedImage = boxButton, NotPressedImage = boxButton, MouseOverImage = boxButton, Size = boxSize }; cornerBL.SetCanvasAbsolutePosition(new Vector3(0, backBufferSize.Y - boxSize.Y, 0)); var cornerBR = new Button { PressedImage = boxButton, NotPressedImage = boxButton, MouseOverImage = boxButton, Size = boxSize }; cornerBR.SetCanvasAbsolutePosition(new Vector3(backBufferSize.X - boxSize.X, backBufferSize.Y - boxSize.Y, 0)); var rootElement = new Canvas() { Children = { followedButton, cornerTL, cornerTR, cornerBL, cornerBR }, MaximumWidth = backBufferSize.X, MaximumHeight = backBufferSize.Y }; Entity.Get<UIComponent>().RootElement = rootElement; }
public void TestComputeAvailableSize() { var child = new Button(); child.SetCanvasPinOrigin(new Vector3(0, 0.5f, 1)); // tests in the cases position is absolute var availableSize = new Vector3(100, 150, 200); child.SetCanvasAbsolutePosition(new Vector3(-1, -2, -3)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasAbsolutePosition(new Vector3(0, 0, 0)); Utilities.AreExactlyEqual(new Vector3(100, 0, 0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasAbsolutePosition(new Vector3(1, 2, 3)); Utilities.AreExactlyEqual(new Vector3(99, 4, 3), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasAbsolutePosition(availableSize); Utilities.AreExactlyEqual(new Vector3(0, 0, 200), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasAbsolutePosition(availableSize + new Vector3(1, 2, 3)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); // tests in the cases position is relative child.SetCanvasRelativePosition(new Vector3(-1, -2, -3)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(0, 0, 0)); Utilities.AreExactlyEqual(new Vector3(100, 0, 0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(0.1f, 0.2f, 0.4f)); Utilities.AreExactlyEqual(new Vector3(90, 60, 80), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(1f)); Utilities.AreExactlyEqual(new Vector3(0, 0, 200), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(1.1f, 2f, 3f)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); // tests in the case available size are infinite availableSize = new Vector3(float.PositiveInfinity); child.SetCanvasAbsolutePosition(new Vector3(-1, -2, -3)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasAbsolutePosition(new Vector3(1, 2, 3)); Utilities.AreExactlyEqual(new Vector3(float.PositiveInfinity, 4, 3), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(-1f, -2f, -3f)); Utilities.AreExactlyEqual(new Vector3(0), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativePosition(new Vector3(1f, 2f, 3f)); Utilities.AreExactlyEqual(new Vector3(float.PositiveInfinity), ComputeAvailableSize(child, availableSize, false)); child.SetCanvasRelativeSize(new Vector3(0, 0.5f, 1.5f)); Utilities.AreExactlyEqual(new Vector3(0, float.PositiveInfinity, float.PositiveInfinity), ComputeAvailableSize(child, availableSize, false)); }
public void TestComputeAbsolutePinPosition() { var child = new Button(); // directly set the values var parentSize = new Vector3(2); child.SetCanvasRelativePosition(new Vector3(float.NaN)); child.SetCanvasAbsolutePosition(new Vector3(-1.5f, 0, 1.5f)); Assert.AreEqual(child.GetCanvasAbsolutePosition(), ComputeAbsolutePinPosition(child, ref parentSize)); child.SetCanvasAbsolutePosition(new Vector3(float.NaN)); child.SetCanvasRelativePosition(new Vector3(-1.5f, 0, 1.5f)); Assert.AreEqual(2*child.GetCanvasRelativePosition(), ComputeAbsolutePinPosition(child, ref parentSize)); // indirectly set the value child.SetCanvasAbsolutePosition(new Vector3(-1.5f, 0, 1.5f)); child.SetCanvasRelativePosition(new Vector3(float.NaN)); Assert.AreEqual(child.GetCanvasAbsolutePosition(), ComputeAbsolutePinPosition(child, ref parentSize)); child.SetCanvasRelativePosition(new Vector3(-1.5f, 0, 1.5f)); child.SetCanvasAbsolutePosition(new Vector3(float.NaN)); Assert.AreEqual(2*child.GetCanvasRelativePosition(), ComputeAbsolutePinPosition(child, ref parentSize)); // indirect/direct mix child.SetCanvasAbsolutePosition(new Vector3(-1.5f, float.NaN, 1.5f)); child.SetCanvasRelativePosition(new Vector3(float.NaN, 1, float.NaN)); Assert.AreEqual(new Vector3(-1.5f, 2, 1.5f), ComputeAbsolutePinPosition(child, ref parentSize)); child.SetCanvasRelativePosition(new Vector3(-1.5f, float.NaN, 1.5f)); child.SetCanvasAbsolutePosition(new Vector3(float.NaN, 1, float.NaN)); Assert.AreEqual(new Vector3(-3f, 1, 3f), ComputeAbsolutePinPosition(child, ref parentSize)); // infinite values parentSize = new Vector3(float.PositiveInfinity); child.SetCanvasRelativePosition(new Vector3(-1.5f, 0, 1.5f)); Utilities.AreExactlyEqual(new Vector3(float.NegativeInfinity, 0f, float.PositiveInfinity), ComputeAbsolutePinPosition(child, ref parentSize)); }