hedgewars/uLand.pas
changeset 430 57d05fb13ea7
parent 429 7f69c7ac2e97
child 431 79ac59673df3
equal deleted inserted replaced
429:7f69c7ac2e97 430:57d05fb13ea7
   161 
   161 
   162 procedure AddLoopPoints(var pa, opa: TPixAr; StartI, EndI: LongInt; Delta: hwFloat);
   162 procedure AddLoopPoints(var pa, opa: TPixAr; StartI, EndI: LongInt; Delta: hwFloat);
   163 var i, pi, ni: LongInt;
   163 var i, pi, ni: LongInt;
   164     NVx, NVy, PVx, PVy: hwFloat;
   164     NVx, NVy, PVx, PVy: hwFloat;
   165     x1, x2, y1, y2, cx1, cx2, cy1, cy2: hwFloat;
   165     x1, x2, y1, y2, cx1, cx2, cy1, cy2: hwFloat;
   166     tsq, tcb, t, r1, r2, r3, r4: hwFloat;
   166     tsq, tcb, t, r1, r2, r3: hwFloat;
   167     X, Y: LongInt;
   167     X, Y: LongInt;
   168 begin
   168 begin
   169 pi:= EndI;
   169 pi:= EndI;
   170 i:= StartI;
   170 i:= StartI;
   171 ni:= Succ(StartI);
   171 ni:= Succ(StartI);
   192     t:= 0;
   192     t:= 0;
   193     while t.Round = 0 do
   193     while t.Round = 0 do
   194           begin
   194           begin
   195           tsq:= t * t;
   195           tsq:= t * t;
   196           tcb:= tsq * t;
   196           tcb:= tsq * t;
   197           r1:= (1 - 3*t + 3*tsq -   tcb) * x1;
   197           r1:= (1 - 3*t + 3*tsq -   tcb);
   198           r2:= (    3*t - 6*tsq + 3*tcb) * cx1;
   198           r2:= (    3*t - 6*tsq + 3*tcb);
   199           r3:= (          3*tsq - 3*tcb) * cx2;
   199           r3:= (          3*tsq - 3*tcb);
   200           r4:= (                    tcb) * x2;
   200           X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2);
   201           X:= hwRound(r1 + r2 + r3 + r4);
   201           Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2);
   202           r1:= (1 - 3*t + 3*tsq -   tcb) * y1;
       
   203           r2:= (    3*t - 6*tsq + 3*tcb) * cy1;
       
   204           r3:= (          3*tsq - 3*tcb) * cy2;
       
   205           r4:= (                    tcb) * y2;
       
   206           Y:= hwRound(r1 + r2 + r3 + r4);
       
   207           t:= t + Delta;
   202           t:= t + Delta;
   208           pa.ar[pa.Count].x:= X;
   203           pa.ar[pa.Count].x:= X;
   209           pa.ar[pa.Count].y:= Y;
   204           pa.ar[pa.Count].y:= Y;
   210           inc(pa.Count);
   205           inc(pa.Count);
   211           TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true)
   206           TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true)