Esempio n. 1
0
        // Author: Alex Schertler
        public LineShape(Block anchor, ShapeRenderer.Orientation orientation = ShapeRenderer.Orientation.ORIENT_0) : base(anchor, orientation)
        {
            // Check ShapeRenderer.draw___ which will tell you the color of the shape
            this.color = ShapeRenderer.GetLineColor();
            anchor.SetColor(this.color);

            this.blocks.Add(anchor);

            switch (orientation)
            {
            case ShapeRenderer.Orientation.ORIENT_0:              // 0 - anchor is second to left
            case ShapeRenderer.Orientation.ORIENT_2:
                this.blocks.Add(anchor.Copy(new Vector2(-1, 0))); // 1 (block to left)
                this.blocks.Add(anchor.Copy(new Vector2(1, 0)));  // 3 (block to close right)
                this.blocks.Add(anchor.Copy(new Vector2(2, 0)));  // 4 (block to far right)
                break;

            case ShapeRenderer.Orientation.ORIENT_1:              // 90 - anchor is second from top
            case ShapeRenderer.Orientation.ORIENT_3:
                this.blocks.Add(anchor.Copy(new Vector2(0, 1)));  // 1 (block above)
                this.blocks.Add(anchor.Copy(new Vector2(0, -1))); // 3 (block to close below)
                this.blocks.Add(anchor.Copy(new Vector2(0, -2))); // 4 (block to far below)
                break;

            default:
                throw new ArgumentException("Unexpected ShapeRenderer::Orientation in LineShape constructor: " + orientation);
            }

            anchor.SetColor(ShapeRenderer.GetLineAnchorColor());

            //rotation offset dictionary
            this.nextOriToOffsets = new Dictionary <ShapeRenderer.Orientation, List <Vector2> >();

            var vectorSetOne = new[] { new Vector2(0, 0), new Vector2(-1, -1), new Vector2(1, 1), new Vector2(2, 2) };
            var vectorSetTwo = new[] { new Vector2(0, 0), new Vector2(1, 1), new Vector2(-1, -1), new Vector2(-2, -2) };

            // 270 -> 0
            nextOriToOffsets.Add(ShapeRenderer.Orientation.ORIENT_0, vectorSetOne.ToList());
            // 0 -> 90
            nextOriToOffsets.Add(ShapeRenderer.Orientation.ORIENT_1, vectorSetTwo.ToList());
            // 90 -> 180 (same as 270 -> 0)
            nextOriToOffsets.Add(ShapeRenderer.Orientation.ORIENT_2, vectorSetOne.ToList());
            // 180 -> 270 (same as 0 -> 90)
            nextOriToOffsets.Add(ShapeRenderer.Orientation.ORIENT_3, vectorSetTwo.ToList());
        }