Example #1
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 #2
0
        public static IEnumerable<Point> TilesUnderRay(Point a, Point b)
        {
            if (a == b)
            {
                yield return a;
                yield break;
            }

            var dist = Math.Sqrt(a.DistanceSqTo(b));
            var frac = 1.0f / (float)dist;

            var p = a.ToSquare();
            yield return p;
            for (var f = 0.0f; f <= 1.0f; f += frac)
            {
                var q = Lerp(f, a, b).ToSquare();
                if (p != q) yield return p = q;
            }
        }