hedgewars/uLand.pas
changeset 51 b6e3ae05857f
parent 37 2b7f2a43b999
child 53 0e27949850e3
equal deleted inserted replaced
50:9ab4067dabec 51:b6e3ae05857f
    54               end;
    54               end;
    55 
    55 
    56 var HHPoints: record
    56 var HHPoints: record
    57               First, Last: word;
    57               First, Last: word;
    58               ar: array[1..Pred(cMaxSpawnPoints)] of TPoint
    58               ar: array[1..Pred(cMaxSpawnPoints)] of TPoint
    59               end = (First: 1);
    59               end;
    60 
    60 
    61 procedure LogLandDigest;
    61 procedure LogLandDigest;
    62 var ctx: TSHA1Context;
    62 var ctx: TSHA1Context;
    63     dig: TSHA1Digest;
    63     dig: TSHA1Digest;
    64 begin
    64 begin
   125           r3:= (          3*tsq - 3*tcb) * cy2;
   125           r3:= (          3*tsq - 3*tcb) * cy2;
   126           r4:= (                    tcb) * y2;
   126           r4:= (                    tcb) * y2;
   127           Y:= round(r1 + r2 + r3 + r4);
   127           Y:= round(r1 + r2 + r3 + r4);
   128           t:= t + 0.001;
   128           t:= t + 0.001;
   129           if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then
   129           if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then
   130                 Land[y, x]:= $FFFFFF;
   130                 Land[y, x]:= 0;
   131           end;
   131           end;
   132     end;
   132     end;
   133 end;
   133 end;
   134 
   134 
   135 procedure BezierizeEdge(var pa: TPixAr; Delta: real);
   135 procedure BezierizeEdge(var pa: TPixAr; Delta: real);
   242 Push(xl, xr, y, -1);
   242 Push(xl, xr, y, -1);
   243 Push(xl, xr, y,  1);
   243 Push(xl, xr, y,  1);
   244 while Stack.Count > 0 do
   244 while Stack.Count > 0 do
   245       begin
   245       begin
   246       Pop(xl, xr, y, dir);
   246       Pop(xl, xr, y, dir);
   247       while (xl > 0) and (Land[y, xl] = 0) do dec(xl);
   247       while (xl > 0) and (Land[y, xl] <> 0) do dec(xl);
   248       while (xr < 2047) and (Land[y, xr] = 0) do inc(xr);
   248       while (xr < 2047) and (Land[y, xr] <> 0) do inc(xr);
   249       while (xl < xr) do
   249       while (xl < xr) do
   250             begin
   250             begin
   251             while (xl <= xr) and (Land[y, xl] <> 0) do inc(xl);
   251             while (xl <= xr) and (Land[y, xl] = 0) do inc(xl);
   252             x:= xl;
   252             x:= xl;
   253             while (xl <= xr) and (Land[y, xl] = 0) do
   253             while (xl <= xr) and (Land[y, xl] <> 0) do
   254                   begin
   254                   begin
   255                   Land[y, xl]:= $FFFFFF;
   255                   Land[y, xl]:= 0;
   256                   inc(xl)
   256                   inc(xl)
   257                   end;
   257                   end;
   258             if x < xl then
   258             if x < xl then
   259                begin
   259                begin
   260                Push(x, Pred(xl), y, dir);
   260                Push(x, Pred(xl), y, dir);
   460      end;
   460      end;
   461 end;
   461 end;
   462 
   462 
   463 procedure GenLandSurface;
   463 procedure GenLandSurface;
   464 var tmpsurf: PSDL_Surface;
   464 var tmpsurf: PSDL_Surface;
   465 begin
   465     i: Longword;
   466 GenBlank(EdgeTemplates[getrandom(Succ(High(EdgeTemplates)))]);
   466 begin
       
   467 for i:= 0 to sizeof(Land) div 4 do
       
   468     PLongword(Longword(@Land) + i * 4)^:= $FFFFFF;
       
   469 GenBlank(EdgeTemplates[8{getrandom(Succ(High(EdgeTemplates)))}]);
   467 
   470 
   468 AddProgress;
   471 AddProgress;
   469 with PixelFormat^ do
   472 with PixelFormat^ do
   470      tmpsurf:= SDL_CreateRGBSurface(SDL_HWSURFACE, 2048, 1024, BitsPerPixel, RMask, GMask, BMask, 0);
   473      tmpsurf:= SDL_CreateRGBSurface(SDL_HWSURFACE, 2048, 1024, BitsPerPixel, RMask, GMask, BMask, 0);
   471 ColorizeLand(tmpsurf);
   474 ColorizeLand(tmpsurf);
   562             end
   565             end
   563          end
   566          end
   564      end
   567      end
   565 end;
   568 end;
   566 
   569 
       
   570 initialization
       
   571 
       
   572 HHPoints.First:= 1
       
   573 
   567 end.
   574 end.