Exemple #1
0
        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);
        }
Exemple #2
0
 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;
         }
     }
 }
Exemple #3
0
 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
 }