예제 #1
0
        public override bool Intersects(MMath.LineSegment sightLine)
        {
            //if (MMath.Rectangle.RectContainsPoint(this.Rect, sightLine.Start))
            if (this.Rect.X != sightLine.Start.X && this.Rect.Y != sightLine.Start.Y && this.Rect.Contains(sightLine.Start))
            {
                return(false);
            }

            // If end point is inside this rectangle then we know based on the type what it is
            if (MMath.Rectangle.RectContainsPoint(this.Rect, sightLine.End))
            {
                return((this.Type == BlockerType.BlocksLookingInto) ? true : false);
            }

            return(sightLine.Intersects(this.Rect));
        }
예제 #2
0
        public OcclusionLevel GetOcclusion(PointF fromPoint, PointF targetPoint)
        {
            MMath.LineSegment l      = new MMath.LineSegment(fromPoint, targetPoint);
            OcclusionLevel    result = OcclusionLevel.Visible;

            foreach (var blocker in Blockers)
            {
                if (blocker.Intersects(l))
                {
                    result = (OcclusionLevel)Math.Max((int)result, (int)blocker.OcclusionLevel);
                    if (result == OcclusionLevel.Obscured)
                    {
                        return(result);
                    }
                }
            }
            return(result);
        }
예제 #3
0
 public LineVisibilityBlocker(MMath.LineSegment line, Visibility.OcclusionLevel occlusionLevel = Visibility.OcclusionLevel.Obscured) : base(occlusionLevel)
 {
     this.Line = line;
 }
예제 #4
0
 public abstract bool Intersects(MMath.LineSegment sightLine);