hedgewars/uWorld.pas
changeset 3248 8d4c61f6f30c
parent 3240 e3b52d10b4c2
child 3249 74a506c9d71b
equal deleted inserted replaced
3247:045a76b9f32f 3248:8d4c61f6f30c
    30     bShowFinger: boolean;
    30     bShowFinger: boolean;
    31     Frames: Longword;
    31     Frames: Longword;
    32     WaterColor, DeepWaterColor: TSDL_Color;
    32     WaterColor, DeepWaterColor: TSDL_Color;
    33     WorldDx: LongInt;
    33     WorldDx: LongInt;
    34     WorldDy: LongInt;
    34     WorldDy: LongInt;
       
    35     SkyOffset: LongInt;
       
    36     HorizontOffset: LongInt;
    35 {$IFDEF COUNTTICKS}
    37 {$IFDEF COUNTTICKS}
    36     cntTicks: LongWord;
    38     cntTicks: LongWord;
    37 {$ENDIF}
    39 {$ENDIF}
    38 
    40 
    39 procedure initModule;
    41 procedure initModule;
   162 prevPoint.X:= 0;
   164 prevPoint.X:= 0;
   163 prevPoint.Y:= cScreenHeight div 2;
   165 prevPoint.Y:= cScreenHeight div 2;
   164 WorldDx:=  - (LAND_WIDTH div 2) + cScreenWidth div 2;
   166 WorldDx:=  - (LAND_WIDTH div 2) + cScreenWidth div 2;
   165 WorldDy:=  - (LAND_HEIGHT - (playHeight div 2)) + (cScreenHeight div 2);
   167 WorldDy:=  - (LAND_HEIGHT - (playHeight div 2)) + (cScreenHeight div 2);
   166 AMxShift:= 210;
   168 AMxShift:= 210;
       
   169 SkyOffset:= (10 * min(0, -145 - (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine))) div 35;
       
   170 HorizontOffset:= (10 * min(0, -145 - (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine))) div 55;
   167 end;
   171 end;
   168 
   172 
   169 procedure ShowAmmoMenu;
   173 procedure ShowAmmoMenu;
   170 const MENUSPEED = 15;
   174 const MENUSPEED = 15;
   171 var x, y, i, t, l, g: LongInt;
   175 var x, y, i, t, l, g: LongInt;
   395     w:= SpritesData[spr].Width;
   399     w:= SpritesData[spr].Width;
   396     i:= Shift mod w;
   400     i:= Shift mod w;
   397     if i > 0 then dec(i, w);
   401     if i > 0 then dec(i, w);
   398     dec(i, w * (sw div w + 1));
   402     dec(i, w * (sw div w + 1));
   399     repeat
   403     repeat
   400         DrawSprite(spr, i, WorldDy + LAND_HEIGHT - SpritesData[spr].Height - OffsetY, 0);
   404         DrawSprite(spr, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
   401         inc(i, w)
   405         inc(i, w)
   402     until i > sw
   406     until i > sw
   403     end else
   407     end else
   404     begin
   408     begin
   405     w:= SpritesData[spr].Width;
   409     w:= SpritesData[spr].Width;
   406     dec(Shift, w div 2);
   410     dec(Shift, w div 2);
   407     DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT - SpritesData[spr].Height - OffsetY, 0);
   411     DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
   408 
   412 
   409     sw:= round(cScreenWidth / cScaleFactor);
   413     sw:= round(cScreenWidth / cScaleFactor);
   410     
   414     
   411     i:= Shift - SpritesData[sprL].Width;
   415     i:= Shift - SpritesData[sprL].Width;
   412     while i >= -sw - SpritesData[sprL].Width do
   416     while i >= -sw - SpritesData[sprL].Width do
   413         begin
   417         begin
   414         DrawSprite(sprL, i, WorldDy + LAND_HEIGHT - SpritesData[sprL].Height - OffsetY, 0);
   418         DrawSprite(sprL, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprL].Height, 0);
   415         dec(i, SpritesData[sprL].Width);
   419         dec(i, SpritesData[sprL].Width);
   416         end;
   420         end;
   417         
   421         
   418     i:= Shift + w;
   422     i:= Shift + w;
   419     while i <= sw do
   423     while i <= sw do
   420         begin
   424         begin
   421         DrawSprite(sprR, i, WorldDy + LAND_HEIGHT - SpritesData[sprR].Height - OffsetY, 0);
   425         DrawSprite(sprR, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprR].Height, 0);
   422         inc(i, SpritesData[sprR].Width)
   426         inc(i, SpritesData[sprR].Width)
   423         end
   427         end
   424     end
   428     end
   425 end;
   429 end;
   426 
   430 
   430     r: TSDL_Rect;
   434     r: TSDL_Rect;
   431     tdx, tdy: Double;
   435     tdx, tdy: Double;
   432     grp: TCapGroup;
   436     grp: TCapGroup;
   433     s: string[15];
   437     s: string[15];
   434     highlight: Boolean;
   438     highlight: Boolean;
   435     offset, offsetX, offsetY, screenBottom: LongInt;
   439     offset, offsetX, offsetY: LongInt;
   436     scale: GLfloat;
   440     scale: GLfloat;
   437     VertexBuffer: array [0..3] of TVertex2f;
   441     VertexBuffer: array [0..3] of TVertex2f;
   438 begin
   442 begin
   439 if ZoomValue < zoom then
   443 if ZoomValue < zoom then
   440     begin
   444     begin
   445     begin
   449     begin
   446     zoom:= zoom + 0.002 * Lag;
   450     zoom:= zoom + 0.002 * Lag;
   447     if ZoomValue < zoom then zoom:= ZoomValue
   451     if ZoomValue < zoom then zoom:= ZoomValue
   448     end;
   452     end;
   449 
   453 
   450 screenBottom:= WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine;
   454 offsetY:= 10 * min(0, -145 - (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine));
       
   455 
       
   456 SkyOffset:= offsetY div 35;
       
   457 HorizontOffset:= offsetY div 55;
   451 
   458 
   452 // Sky
   459 // Sky
   453 glClear(GL_COLOR_BUFFER_BIT);
   460 glClear(GL_COLOR_BUFFER_BIT);
   454 glEnable(GL_BLEND);
   461 glEnable(GL_BLEND);
   455 glEnable(GL_TEXTURE_2D);
   462 glEnable(GL_TEXTURE_2D);
   459 if not isPaused then MoveCamera;
   466 if not isPaused then MoveCamera;
   460 
   467 
   461 if not cReducedQuality then
   468 if not cReducedQuality then
   462     begin
   469     begin
   463     // background
   470     // background
   464     DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8, 0);
   471     DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8, SkyOffset);
   465     DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5,  - cWaveHeight - screenBottom div 10);
   472     DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5, HorizontOffset);
   466 
   473 
   467     DrawVisualGears(0);
   474     DrawVisualGears(0);
   468     end;
   475     end;
   469 
   476 
   470 // Waves
   477 // Waves
   471 offsetY:= 10 * min(0, -145 - screenBottom);
   478 DrawWater(255, SkyOffset); 
   472 DrawWater(255, offsetY div 35);
       
   473 DrawWaves( 1,  0 - WorldDx div 32, - cWaveHeight + offsetY div 35, 0.25);
   479 DrawWaves( 1,  0 - WorldDx div 32, - cWaveHeight + offsetY div 35, 0.25);
   474 DrawWaves( -1,  25 + WorldDx div 25, - cWaveHeight + offsetY div 38, 0.19);
   480 DrawWaves( -1,  25 + WorldDx div 25, - cWaveHeight + offsetY div 38, 0.19);
   475 DrawWaves( 1,  75 - WorldDx div 19, - cWaveHeight + offsetY div 45, 0.14);
   481 DrawWaves( 1,  75 - WorldDx div 19, - cWaveHeight + offsetY div 45, 0.14);
   476 DrawWaves(-1, 100 + WorldDx div 14, - cWaveHeight + offsetY div 70, 0.09);
   482 DrawWaves(-1, 100 + WorldDx div 14, - cWaveHeight + offsetY div 70, 0.09);
   477 
   483