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)); }
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); }
public LineVisibilityBlocker(MMath.LineSegment line, Visibility.OcclusionLevel occlusionLevel = Visibility.OcclusionLevel.Obscured) : base(occlusionLevel) { this.Line = line; }
public abstract bool Intersects(MMath.LineSegment sightLine);