public void AddSpan(Span span) { if (span.Min > span.Max) { int tmp = span.Min; span.Min = span.Max; span.Max = tmp; } MathHelper.Clamp(span.Min, 0, Height); MathHelper.Clamp(span.Max, 0, Height); for (int i = 0; i < Spans.Count; ++i) { Span cur = Spans[i]; if (cur.Min > span.Max) { Spans.Insert(i, span); return; } else if (cur.Max >= span.Min) { if (cur.Min < span.Min) { span.Min = cur.Min; } if (cur.Max > span.Max) { span.Max = cur.Max; } Spans.RemoveAt(i); i--; } } Spans.Add(span); }
public void Combin(int walkableHeight) { for (int i = 1; i < Spans.Count; ++i) { Span pre = Spans[i - 1]; Span cur = Spans[i]; if (cur.Min - pre.Max < walkableHeight) { pre.Max = cur.Max; Spans[i - 1] = pre; Spans.RemoveAt(i); --i; } } }
public void Normalize() { if (Spans.Count == 0) { Spans.Add(AmFactory.Create <RtPureSpan>()); } else { for (var i = Spans.Count - 1; i > 0; i--) { if (Spans[i].IsEmpty) { Spans.RemoveAt(i); } } } // todo: merge spans }