Esempio n. 1
0
        public void CreateContainingBoxSquareTest()
        {
            var width  = 10f;
            var height = 10f;
            var aspect = width / height;
            var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect);

            Assert.AreEqual(new Box2D(0, 0, width, height), fitBox);
        }
Esempio n. 2
0
        private static void LandscapeTest(float width, float height, float aspect)
        {
            var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect);
            var delta  = .0001f;

            Assert.AreEqual(0f, fitBox.MinX, delta);
            Assert.AreEqual(-.5f * (aspect * width - height), fitBox.MinY, delta);
            Assert.AreEqual(width, fitBox.SizeX, delta);
            Assert.AreEqual(width / aspect, fitBox.SizeY, delta);
        }
Esempio n. 3
0
        private static void PortraitTest(float width, float height, float aspect)
        {
            var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect);
            var delta  = .0001f;

            Assert.AreEqual(-.5f * (aspect * height - width), fitBox.MinX, delta);
            Assert.AreEqual(0f, fitBox.MinY, delta);
            Assert.AreEqual(height * aspect, fitBox.SizeX, delta);
            Assert.AreEqual(height, fitBox.SizeY, delta);
        }
Esempio n. 4
0
        /// <summary>
        /// Transforms elements coordinates relative to given canvas system into [0,1]² with y-axis heading upwards
        /// </summary>
        /// <param name="element">Input UIElement to transform relative to canvas</param>
        /// <param name="canvas">Input canvas for realative transformation</param>
        public static Box2D ConvertBounds(this UIElement element, Canvas canvas)
        {
            var p00         = new Point(0, 0);
            var p11         = p00 + (Vector)element.RenderSize;
            var leftTop     = (Vector)element.TranslatePoint(p00, canvas);
            var rightBottom = (Vector)element.TranslatePoint(p11, canvas);

            //flip y coordinate
            return(Box2DExtensions.CreateFromMinMax(
                       (float)leftTop.X, (float)(canvas.ActualHeight - rightBottom.Y),
                       (float)rightBottom.X, (float)(canvas.ActualHeight - leftTop.Y)));
        }
Esempio n. 5
0
        public void Render(IReadOnlyBox2D bounds)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            var fitBox = Box2DExtensions.CreateContainingBox(bounds.SizeX, bounds.SizeY, aspect);

            GL.Ortho(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0, 1);
            GL.MatrixMode(MatrixMode.Modelview);
            foreach (var layer in layers)
            {
                layer.Value.Draw();
            }
        }
Esempio n. 6
0
        internal void DrawLevelState(ILevelGrid levelState, Color tint)
        {
            UpdateLevelGeometry(levelState);
            shdTexColor.Activate();
            texArray.Activate();
            var fitBox = Box2DExtensions.CreateContainingBox(levelState.Width, levelState.Height, windowAspect);
            var camera = Matrix4x4.CreateOrthographicOffCenter(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0, 1);

            shdTexColor.Uniform(nameof(tint), tint.ToVector4());
            shdTexColor.Uniform(nameof(camera), camera, true);

            vaoLevelGeometry.Draw(levelState.Width * levelState.Height);

            texArray.Deactivate();
            shdTexColor.Deactivate();
        }
        public void Render()
        {
            var newStick  = RotateLine(stick, Angle);
            var stickAABB = Box2DExtensions.CreateFromPoints(new Vector2[] { newStick.Item1, newStick.Item2 });

            GL.Clear(ClearBufferMask.ColorBufferBit);

            GL.Color3(Color.CornflowerBlue);
            DrawLine(newStick);

            GL.Color3(Color.YellowGreen);
            DrawAABB(stickAABB);

            GL.Color3(Color.Black);
            DrawAABB(Box2DExtensions.CreateFromCenterSize(0, 0, 0.02f, 0.02f));
        }
Esempio n. 8
0
        public IEnumerable <IReadOnlyBox2D> GetPlanets()
        {
            var planets = new List <Box2D>();

            Foreach(root, (node) =>
            {
                if (node.GetInstance <CreateGeometryTag>() is null)
                {
                    return;
                }
                var xForm     = node.GlobalTransformation;
                var newCenter = xForm.Transform(Vector2.Zero);
                var size      = xForm.Transform(new Vector4(1f, 0f, 0f, 0f)).XY().Length();
                var bounds    = Box2DExtensions.CreateFromCenterSize(newCenter.X, newCenter.Y, size, size);
                planets.Add(bounds);
            });
            return(planets);
        }
Esempio n. 9
0
        public void DrawLevelState(ILevelGrid level, Color tint)
        {
            GL.Color3(tint);
            GL.LoadIdentity();
            var fitBox = Box2DExtensions.CreateContainingBox(level.Width, level.Height, windowAspect);

            GL.Ortho(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0.0, 1.0);
            for (int x = 0; x < level.Width; ++x)
            {
                for (int y = 0; y < level.Height; ++y)
                {
                    var tile    = new Box2D(x, y, 1.0f, 1.0f);
                    var element = level.GetElement(x, y);
                    var tex     = tileSet[element];
                    tex.Activate();
                    tile.DrawTexturedRect(Box2D.BOX01);
                    tex.Deactivate();
                }
            }
        }
Esempio n. 10
0
        public void Render(IReadOnlyList <Vector2> points, int selectedPoint, float truckPos)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.LoadIdentity();
            GL.Ortho(-windowAspect, windowAspect, -1, 1, 0, 1);

            shaderRoad.Activate();
            texSand.Activate();

            DrawLineStrip(points);

            texSand.Deactivate();
            shaderRoad.Deactivate();

            GL.Color3(Color.Red);
            GL.PointSize(15.0f);
            DrawPoints(points);

            if (-1 != selectedPoint)
            {
                GL.Color3(Color.Blue);
                GL.PointSize(25.0f);
                DrawPoint(points[selectedPoint]);
            }
            var pos = CubicHermiteSpline.CatmullRomSpline(points, truckPos);

            GL.Color3(Color.White);
            //GL.Color3(Color.Green);
            //GL.PointSize(25.0f);
            shaderTruck.Activate();
            texTruck.Activate();
            DrawTools.DrawTexturedRect(Box2DExtensions.CreateFromCenterSize(pos.X, pos.Y, 0.1f, 0.1f), Box2D.BOX01);
            texTruck.Deactivate();
            shaderTruck.Deactivate();
            //DrawPoint(pos);
        }
Esempio n. 11
0
 public Model(Vector2 start, Grid <bool> walkable)
 {
     this.walkable = walkable ?? throw new ArgumentNullException(nameof(walkable));
     player        = Box2DExtensions.CreateFromCenterSize(start.X, start.Y, 1f, 1f);
 }
Esempio n. 12
0
        public void Resize(IGameState gameState, int width, int height)
        {
            var fitBox = Box2DExtensions.CreateContainingBox(gameState.GridWidth, gameState.GridHeight, width / (float)height);

            toClipSpace = Matrix4.CreateOrthographicOffCenter(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0f, 1f);
        }
Esempio n. 13
0
 public TransformedShape(float x, float y, float size)
 {
     this.bounds       = Box2DExtensions.CreateFromCircle(new Circle(x, y, size / 2));
     transformedBounds = new Box2D(bounds);
     SetTransformation(Matrix3x2.Identity);
 }