Example #1
0
        public static List<Room> MakeRooms(Model m)
        {
            var rooms = new List<Room>();
            foreach (var b in m.Brushes)
            {
                var rr = rooms.Where(r => r.IntersectsWith(b.Bounds)).ToList();
                switch (rr.Count)
                {
                    case 0:
                        rooms.Add(new Room(m, b));
                        break;
                    case 1:
                        rr[0].brushes.Add(b);
                        break;
                    default:
                        rr[0].brushes.Add(b);
                        var toRemove = rr.Skip(1);
                        rr[0].brushes.AddRange(toRemove.SelectMany(a => a.brushes));
                        rooms.Remove(toRemove);
                        break;
                }
            }

            return rooms;
        }
Example #2
0
        public override bool OnMouseDown(Surface s, Model m, Point square, Point offset, MouseButtons mb)
        {
            if (mb == MouseButtons.Left)
                selected = m.ActorsAt(square).Where(a => a is IOrderTarget).FirstOrDefault();

            if (mb == MouseButtons.Right && selected != null)
                ((IOrderTarget)selected).AcceptOrder( square );

            return true;
        }
Example #3
0
        public static IEnumerable<Pair<Point, Point>> WallsUnderRay(Point a, Point b, Model m)
        {
            var tiles = TilesUnderRay(a, b);
            var prev = a.ToSquare();

            foreach (var t in tiles)
            {
                var i = MakeDirMask(Math.Sign(t.X - prev.X), Math.Sign(t.Y - prev.Y));
                var mask = m.Cache.Value.GetWallMask(prev.X, prev.Y);
                if (i != 0 && mask != null)
                    if ((mask.Value & i) != ((mask.Value >> 2) & i))
                        yield return new Pair<Point, Point>(t, prev);
                prev = t;
            }
        }
Example #4
0
        public ModelCache(Model m)
        {
            var mx = m.Brushes.Select(b => b.Bounds.Right + 1).DefaultIfEmpty(0).Max();
            var my = m.Brushes.Select(b => b.Bounds.Bottom + 1).DefaultIfEmpty(0).Max();

            cce = new CellCacheEntry[mx, my];

            for (var x = 0; x < mx; x++)
                for (var y = 0; y < my; y++)
                {
                    cce[x, y].content = m.GetFloorContent(x, y);
                    cce[x, y].brushes = m.GetBrushesAt(new Point(x, y)).Count();
                    cce[x, y].doors = m.GetDoorsEndFrom(new Point(x, y)).Count();

                    if (m.HasWall(x, y, x + 1, y)) cce[x, y].wallMask |= 0x1;
                    if (m.HasWall(x, y, x, y + 1)) cce[x, y].wallMask |= 0x2;
                    if (m.HasDoor(x, y, x + 1, y) != null) cce[x, y].wallMask |= 0x4;
                    if (m.HasDoor(x, y, x, y + 1) != null) cce[x, y].wallMask |= 0x8;
                    if (m.HasWall(x - 1, y, x, y)) cce[x, y].wallMask |= 0x10;
                    if (m.HasWall(x, y - 1, x, y)) cce[x, y].wallMask |= 0x20;
                    if (m.HasDoor(x - 1, y, x, y) != null) cce[x, y].wallMask |= 0x40;
                    if (m.HasDoor(x, y - 1, x, y) != null) cce[x, y].wallMask |= 0x80;
                }
        }
Example #5
0
 public override void DrawToolOverlay(Surface s, Graphics g, Model m)
 {
     if (selected != null)
         g.DrawRectangle(Pens.White, selected.Position.X - 20, selected.Position.Y - 20, 40, 40);
 }
Example #6
0
 public Room(Model m, Brush firstBrush)
 {
     brushes.Add(firstBrush); model = m;
 }
Example #7
0
 public virtual bool OnMouseUp(Surface s, Model m, Point square, Point offset, MouseButtons mb)
 {
     return false;
 }
Example #8
0
 public virtual void DrawToolOverlay(Surface s, Graphics g, Model m)
 {
 }