diff -r 165a040e4cfa -r 236bbd12d4d9 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Mon Jan 22 18:32:00 2007 +0000 +++ b/hedgewars/uLand.pas Tue Jan 23 16:59:05 2007 +0000 @@ -55,8 +55,61 @@ SendIPC('M' + s) end; +procedure DrawLine(X1, Y1, X2, Y2: integer; Color: Longword); +var + eX, eY, dX, dY: integer; + i, sX, sY, x, y, d: integer; +begin +eX:= 0; +eY:= 0; +dX:= X2 - X1; +dY:= Y2 - Y1; + +if (dX > 0) then sX:= 1 +else + if (dX < 0) then + begin + sX:= -1; + dX:= -dX + end else sX:= dX; + +if (dY > 0) then sY:= 1 + else + if (dY < 0) then + begin + sY:= -1; + dY:= -dY + end else sY:= dY; + +if (dX > dY) then d:= dX + else d:= dY; + +x:= X1; +y:= Y1; + +for i:= 0 to d do + begin + inc(eX, dX); + inc(eY, dY); + if (eX > d) then + begin + dec(eX, d); + inc(x, sX); + end; + if (eY > d) then + begin + dec(eY, d); + inc(y, sY); + end; + + if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then + Land[y, x]:= Color; + end +end; + procedure DrawBezierEdge(var pa: TPixAr; Color: Longword); -var x, y, i: integer; +const dT: hwFloat = (isNegative: false; QWordValue: 85899346); +var x, y, i, px, py: integer; tx, ty, vx, vy, vlen, t: hwFloat; r1, r2, r3, r4: hwFloat; x1, y1, x2, y2, cx1, cy1, cx2, cy2, tsq, tcb: hwFloat; @@ -96,7 +149,9 @@ cy2:= ar[i+1].y + hwRound(ty); vx:= -tx; vy:= -ty; - t:= 0; + px:= hwRound(x1); + py:= hwRound(y1); + t:= dT; while t.Round = 0 do begin tsq:= t * t; @@ -111,79 +166,10 @@ r3:= ( 3*tsq - 3*tcb) * cy2; r4:= ( tcb) * y2; Y:= hwRound(r1 + r2 + r3 + r4); - t:= t + _1div1024; - if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then - Land[y, x]:= Color; - end; - end; -end; - -procedure BezierizeEdge(var pa: TPixAr; Delta: hwFloat); -var x, y, i: integer; - tx, ty, vx, vy, vlen, t: hwFloat; - r1, r2, r3, r4: hwFloat; - x1, y1, x2, y2, cx1, cy1, cx2, cy2, tsq, tcb: hwFloat; - opa: TPixAr; -begin -opa:= pa; -pa.Count:= 0; -vx:= 0; -vy:= 0; -with opa do -for i:= 0 to Count-2 do - begin -addfilelog('50'); - vlen:= Distance(ar[i + 1].x - ar[i].X, ar[i + 1].y - ar[i].y); - t:= Distance(ar[i + 1].x - ar[i + 2].X,ar[i + 1].y - ar[i + 2].y); -addfilelog('51'); - if t