Example #1
0
 public TileShape(byte flags, TileEdge top, TileEdge right, TileEdge bottom, TileEdge left)
 {
     Flags = flags;
     Clip = ExpandClip(top, right, bottom, left);
     Top = top;
     Right = right;
     Bottom = bottom;
     Left = left;
 }
Example #2
0
 private static Point[] ExpandClip(TileEdge top, TileEdge right, TileEdge bottom, TileEdge left)
 {
     var ret = new List<Point>();
     if (top != null) {
         ret.Add(new Point(top.X1, top.Y1));
         ret.Add(new Point(top.X2, top.Y2));
     }
     if (right != null) {
         if (ret.Count == 0)
             ret.Add(new Point(right.X1, right.Y1));
         else
             Debug.Assert(ret[ret.Count - 1] == new Point(right.X1, right.Y1));
         ret.Add(new Point(right.X2, right.Y2));
     }
     if (bottom != null) {
         Debug.Assert(ret[ret.Count - 1] == new Point(bottom.X1, bottom.Y1));
         ret.Add(new Point(bottom.X2, bottom.Y2));
     }
     if (left != null) {
         Debug.Assert(ret[ret.Count - 1] == new Point(left.X1, left.Y1));
         ret.Add(new Point(left.X2, left.Y2));
     }
     Debug.Assert(ret[0] == ret[ret.Count - 1]);
     return ret.Take(ret.Count - 1).ToArray();
 }
Example #3
0
        private void DrawFilth(Graphics canvas, Tile tile, TileEdge edge, int center, int caps)
        {
            if (center == 0 || edge == null)
                return;

            var transform = new Matrix();
            transform.Translate(tile.X * App.PixelsPerTile + edge.X1 + sliceOverdraw, tile.Y * App.PixelsPerTile + edge.Y1 + sliceOverdraw);
            transform.Rotate(edge.Angle);
            canvas.Transform = transform;
            var length = edge.Length;

            if (center != 0) {
                var sprite = sprites.LoadFilth(center & 7, (center & 8) != 0, 2 + (tile.X + tile.Y) % 5);
                canvas.DrawImage(sprite.Image, new Rectangle(sprite.Hitbox.Left, sprite.Hitbox.Top, length, sprite.Hitbox.Height));
            }

            if ((caps & 1) != 0) {
                var sprite = sprites.LoadFilth(center & 7, (center & 8) != 0, 1);
                canvas.DrawImage(sprite.Image, sprite.Hitbox);
            }

            if ((caps & 2) != 0) {
                var sprite = sprites.LoadFilth(center & 7, (center & 8) != 0, 7);
                canvas.DrawImage(sprite.Image, new Rectangle(sprite.Hitbox.Left + length, sprite.Hitbox.Top, sprite.Hitbox.Width, sprite.Hitbox.Height));
            }

            canvas.ResetTransform();
        }