hedgewars/uLand.pas
changeset 24 79c411363184
parent 23 16322d14f068
child 27 c374fe590272
--- a/hedgewars/uLand.pas	Sun Dec 04 19:06:56 2005 +0000
+++ b/hedgewars/uLand.pas	Mon Dec 05 21:46:15 2005 +0000
@@ -47,7 +47,7 @@
 procedure RandomizeHHPoints;
 
 implementation
-uses uConsole, uStore, uMisc, uConsts, uRandom, uTeams, uIO, uLandTemplates;
+uses uConsole, uStore, uMisc, uConsts, uRandom, uTeams, uIO, uLandTemplates, uLandObjects;
 
 type TPixAr = record
               Count: Longword;
@@ -59,57 +59,6 @@
               ar: array[1..Pred(cMaxSpawnPoints)] of TPoint
               end = (First: 1);
 
-procedure BlitImageAndGenerateCollisionInfo(cpX, cpY: Longword; Image, Surface: PSDL_Surface);
-var i, p: LongWord;
-    x, y: Longword;
-    bpp: integer;
-    r: TSDL_Rect;
-begin
-r.x:= cpX;
-r.y:= cpY;
-SDL_UpperBlit(Image, nil, Surface, @r);
-WriteToConsole('Generating collision info... ');
-
-if SDL_MustLock(Image) then
-   SDLTry(SDL_LockSurface(Image) >= 0, true);
-
-bpp:= Image.format.BytesPerPixel;
-WriteToConsole('('+inttostr(bpp)+') ');
-p:= LongWord(Image.pixels);
-case bpp of
-     1: OutError('We don''t work with 8 bit surfaces', true);
-     2: for y:= 0 to Pred(Image.h) do
-            begin
-            i:= Longword(@Land[cpY + y, cpX]);
-            for x:= 0 to Pred(Image.w) do
-                if PWord(p + x * 2)^ = 0 then PLongWord(i + x * 4)^:= 0
-                                         else PLongWord(i + x * 4)^:= 1;
-            inc(p, Image.pitch);
-            end;
-     3: for y:= 0 to Pred(Image.h) do
-            begin
-            i:= Longword(@Land[cpY + y, cpX]);
-            for x:= 0 to Pred(Image.w) do
-                if  (PByte(p + x * 3 + 0)^ = 0)
-                and (PByte(p + x * 3 + 1)^ = 0)
-                and (PByte(p + x * 3 + 2)^ = 0) then PLongWord(i + x * 4)^:= 0
-                                                else PLongWord(i + x * 4)^:= 1;
-            inc(p, Image.pitch);
-            end;
-     4: for y:= 0 to Pred(Image.h) do
-            begin
-            i:= Longword(@Land[cpY + y, cpX]);
-            for x:= 0 to Pred(Image.w) do
-                if PLongword(p + x * 4)^ = 0 then PLongWord(i + x * 4)^:= 0
-                                             else PLongWord(i + x * 4)^:= 1;
-            inc(p, Image.pitch);
-            end;
-     end;
-if SDL_MustLock(Image) then
-   SDL_UnlockSurface(Image);
-WriteLnToConsole(msgOK)
-end;
-
 procedure DrawBezierEdge(var pa: TPixAr);
 var x, y, i: integer;
     tx, ty, vx, vy, vlen, t: real;
@@ -371,65 +320,6 @@
     end;
 end;
 
-procedure AddGirders(Surface: PSDL_Surface);
-var tmpsurf: PSDL_Surface;
-    x1, x2, y, k, i: integer;
-    r, rr: TSDL_Rect;
-
-    function CountNonZeroz(x, y: integer): Longword;
-    var i: integer;
-    begin
-    Result:= 0;
-    for i:= y to y + 15 do
-        if Land[i, x] <> 0 then inc(Result)
-    end;
-
-begin
-y:= 256;
-repeat
-  inc(y, 24);
-  x1:= 1024;
-  x2:= 1024;
-  while (x1 > 100) and (CountNonZeroz(x1, y) = 0) do dec(x1, 2);
-  i:= x1 - 12;
-  repeat
-    k:= CountNonZeroz(x1, y);
-    dec(x1, 2)
-  until (x1 < 100) or (k = 0) or (k = 16) or (x1 < i);
-  inc(x1, 2);
-  if k = 16 then
-     begin
-     while (x2 < 1900) and (CountNonZeroz(x2, y) = 0) do inc(x2, 2);
-     i:= x2 + 12;
-     repeat
-       k:= CountNonZeroz(x2, y);
-       inc(x2, 2)
-     until (x2 > 1900) or (k = 0) or (k = 16) or (x2 > i);
-     if (x2 < 1900) and (k = 16) and (x2 - x1 > 250) then break;
-     end;
-x1:= 0;
-until y > 900;
-if x1 > 0 then
-   begin
-   tmpsurf:= LoadImage(Pathz[ptGraphics] + 'Girder.png');
-   rr.x:= x1;
-   rr.y:= y;
-   while rr.x + 100 < x2 do
-         begin
-         SDL_UpperBlit(tmpsurf, nil, Surface, @rr);
-         inc(rr.x, 100);
-         end;
-   r.x:= 0;
-   r.y:= 0;
-   r.w:= x2 - rr.x;
-   r.h:= 16;
-   SDL_UpperBlit(tmpsurf, @r, Surface, @rr);
-   SDL_FreeSurface(tmpsurf);
-   for k:= y to y + 15 do
-       for i:= x1 to x2 do Land[k, i]:= $FFFFFF
-   end
-end;
-
 procedure AddHHPoints;
 var x, y, t: integer;
 
@@ -482,7 +372,7 @@
 
 procedure PointWave(var Template: TEdgeTemplate; var pa: TPixAr);
 const MAXPASSES = 16;
-var ar: array[0..MAXPASSES, 0..5] of real;
+var ar: array[1..MAXPASSES, 0..5] of real;
     i, k: integer;
     rx, ry, oy: real;
     PassesNum: Longword;
@@ -506,15 +396,15 @@
     begin
     rx:= pa.ar[k].x;
     ry:= pa.ar[k].y;
-    for i:= 0 to PassesNum do
+    for i:= 1 to PassesNum do
         begin
         oy:= ry;
         ry:= ry + ar[i, 0] * sin(ar[i, 1] * rx + ar[i, 2]);
         rx:= rx + ar[i, 3] * sin(ar[i, 4] * oy + ar[i, 5]);
         end;
-        pa.ar[k].x:= round(rx);
-        pa.ar[k].y:= round(ry);
-        end;
+    pa.ar[k].x:= round(rx);
+    pa.ar[k].y:= round(ry);
+    end;
 end;
 
 procedure GenBlank(var Template: TEdgeTemplate);
@@ -553,7 +443,9 @@
 with PixelFormat^ do
      LandSurface:= SDL_CreateRGBSurface(SDL_HWSURFACE, 2048, 1024, BitsPerPixel, RMask, GMask, BMask, 0);
 SDL_FillRect(LandSurface, nil, 0);
-AddGirders(LandSurface);
+
+AddObjects(LandSurface);
+
 SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, 0);
 SDL_UpperBlit(tmpsurf, nil, LandSurface, nil);
 SDL_FreeSurface(tmpsurf);