Ejemplo n.º 1
0
        void CheckHorizontal()
        {
            var moveX     = movementDelta.x;
            var rayLength = Mathf.Abs(moveX) + SKIN_WIDTH;

            var directionX = Mathf.Sign(moveX);
            var rayDir     = directionX * Vector2.right;

            var collisionFlag = directionX == 1 ? CollisionInfo.Right : CollisionInfo.Left;
            var rayOrigin     = directionX == 1 ? actorBounds.BottomRight() : actorBounds.BottomLeft();

            rayOrigin.y += StepHeight;
            for (var i = 0; i < horizontalRayCount; i++)
            {
#if DEBUG
                Debug.DrawRay(rayOrigin, rayDir * rayLength, Color.yellow);
#endif
                var rayHit = Physics2D.Raycast(rayOrigin, rayDir, rayLength, CollisionMask);
                rayOrigin.y += horizontalRaySpacing;

                if (!rayHit)
                {
                    continue;
                }

                // Propbably implement some slopstuff here?

                rayLength   = rayHit.distance;
                moveX       = (rayLength - SKIN_WIDTH) * directionX;
                collisions |= collisionFlag;
            }
            movementDelta.x = moveX;
        }
Ejemplo n.º 2
0
        private void DrawChatLine(GuiSpriteBatch graphics, string text, float alpha, ref Vector2 offset)
        {
            var size = Font.MeasureString(text);

            var renderPos = Bounds.BottomLeft() + offset;

            graphics.FillRectangle(new Rectangle(renderPos.ToPoint(), new Point(Width, (int)Math.Ceiling(size.Y + 2))),
                                   new Color(Color.Black, alpha * 0.5f));

            Font.DrawString(graphics.SpriteBatch, text, renderPos + new Vector2(0, 2), TextColor.White, opacity: alpha);
            offset.Y -= (size.Y + 2);
        }
Ejemplo n.º 3
0
        public void TestBounds()
        {
            Bounds b = new Bounds(new Vector3(-2, 2, -2), new Vector3(4, 6, 8));

            Assert.That(b.TopLeft(), Is.EqualTo(new Vector3(-4, 5, -2)));
            Assert.That(b.TopCenter(), Is.EqualTo(new Vector3(-2, 5, -2)));
            Assert.That(b.TopRight(), Is.EqualTo(new Vector3(0, 5, -2)));
            Assert.That(b.MiddleLeft(), Is.EqualTo(new Vector3(-4, 2, -2)));
            Assert.That(b.MiddleCenter(), Is.EqualTo(new Vector3(-2, 2, -2)));
            Assert.That(b.MiddleRight(), Is.EqualTo(new Vector3(0, 2, -2)));
            Assert.That(b.BottomLeft(), Is.EqualTo(new Vector3(-4, -1, -2)));
            Assert.That(b.BottomCenter(), Is.EqualTo(new Vector3(-2, -1, -2)));
            Assert.That(b.BottomRight(), Is.EqualTo(new Vector3(0, -1, -2)));
            Assert.That(b.TopLeft(2), Is.EqualTo(new Vector3(-6, 7, -2)));
            Assert.That(b.TopCenter(2), Is.EqualTo(new Vector3(-2, 7, -2)));
            Assert.That(b.TopRight(2), Is.EqualTo(new Vector3(2, 7, -2)));
            Assert.That(b.MiddleLeft(2), Is.EqualTo(new Vector3(-6, 2, -2)));
            Assert.That(b.MiddleCenter(2), Is.EqualTo(new Vector3(-2, 2, -2)));
            Assert.That(b.MiddleRight(2), Is.EqualTo(new Vector3(2, 2, -2)));
            Assert.That(b.BottomLeft(2), Is.EqualTo(new Vector3(-6, -3, -2)));
            Assert.That(b.BottomCenter(2), Is.EqualTo(new Vector3(-2, -3, -2)));
            Assert.That(b.BottomRight(2), Is.EqualTo(new Vector3(2, -3, -2)));
        }
Ejemplo n.º 4
0
        public void TestBoundsZero()
        {
            Bounds b = new Bounds();

            Assert.That(b.TopLeft(), Is.EqualTo(Vector3.zero));
            Assert.That(b.TopCenter(), Is.EqualTo(Vector3.zero));
            Assert.That(b.TopRight(), Is.EqualTo(Vector3.zero));
            Assert.That(b.MiddleLeft(), Is.EqualTo(Vector3.zero));
            Assert.That(b.MiddleCenter(), Is.EqualTo(Vector3.zero));
            Assert.That(b.MiddleRight(), Is.EqualTo(Vector3.zero));
            Assert.That(b.BottomLeft(), Is.EqualTo(Vector3.zero));
            Assert.That(b.BottomCenter(), Is.EqualTo(Vector3.zero));
            Assert.That(b.BottomRight(), Is.EqualTo(Vector3.zero));
            Assert.That(b.TopLeft(2), Is.EqualTo(new Vector3(-2, 2, 0)));
            Assert.That(b.TopCenter(2), Is.EqualTo(new Vector3(0, 2, 0)));
            Assert.That(b.TopRight(2), Is.EqualTo(new Vector3(2, 2, 0)));
            Assert.That(b.MiddleLeft(2), Is.EqualTo(new Vector3(-2, 0, 0)));
            Assert.That(b.MiddleCenter(2), Is.EqualTo(new Vector3(0, 0, 0)));
            Assert.That(b.MiddleRight(2), Is.EqualTo(new Vector3(2, 0, 0)));
            Assert.That(b.BottomLeft(2), Is.EqualTo(new Vector3(-2, -2, 0)));
            Assert.That(b.BottomCenter(2), Is.EqualTo(new Vector3(0, -2, 0)));
            Assert.That(b.BottomRight(2), Is.EqualTo(new Vector3(2, -2, 0)));
        }
Ejemplo n.º 5
0
        public static void AddRect(
            Bounds b,
            VertexHelper vh,
            Color vertexColor = default(Color),
            Vector2 uv        = default(Vector2))
        {
            uv = new Vector2(0.5f, 0.5f);
            int vertIdx = vh.currentVertCount;

            vh.AddVert(b.BottomLeft(), vertexColor, uv);
            vh.AddVert(b.TopLeft(), vertexColor, uv);
            vh.AddVert(b.BottomRight(), vertexColor, uv);
            vh.AddVert(b.TopRight(), vertexColor, uv);
            vh.AddTriangle(vertIdx, vertIdx + 1, vertIdx + 2);
            vh.AddTriangle(vertIdx + 2, vertIdx + 1, vertIdx + 3);
        }
Ejemplo n.º 6
0
        public FeaturePosition GetNewFeaturePosition()
        {
            /*  # = possible position to return
             *  F = actual room floor
             *             FFFFFF
             *            F000000F
             *            F000000F
             *            F000000F
             *            F000000F
             *             FFFFFF                 */

            Vector3IntMinMax rand = new Vector3IntMinMax();
            Vector3Int       pos  = Vector3Int.zero;
            Direction        d    = _directions[Random.Range(0, _directions.Count)];

            switch (d)
            {
            case Direction.Top:
                rand.Min    = Bounds.TopLeft();
                rand.Min.y += 1;

                rand.Max    = Bounds.TopRight();
                rand.Max.y += 1;

                pos = rand.GetRandomValue();
                break;

            case Direction.Left:
                rand.Min    = Bounds.BottomLeft();
                rand.Min.x -= 1;

                rand.Max    = Bounds.TopLeft();
                rand.Max.x -= 1;

                pos = rand.GetRandomValue();
                break;

            case Direction.Right:
                rand.Min    = Bounds.BottomRight();
                rand.Min.x += 1;

                rand.Max    = Bounds.TopRight();
                rand.Max.x += 1;

                pos = rand.GetRandomValue();
                break;

            case Direction.Bottom:
                rand.Min    = Bounds.BottomLeft();
                rand.Min.y -= 1;

                rand.Max    = Bounds.BottomRight();
                rand.Max.y -= 1;

                pos = rand.GetRandomValue();
                break;
            }

            _directions.Remove(d);
            return(new FeaturePosition(pos.x, pos.y, d));
        }