hedgewars/uWorld.pas
changeset 2292 87af4ad0ec98
parent 2290 bf87ca44782e
child 2302 0f122917d799
equal deleted inserted replaced
2291:353fb9621da0 2292:87af4ad0ec98
    35 	bShowAmmoMenu: boolean = false;
    35 	bShowAmmoMenu: boolean = false;
    36 	bSelected: boolean = false;
    36 	bSelected: boolean = false;
    37 	bShowFinger: boolean = false;
    37 	bShowFinger: boolean = false;
    38 	Frames: Longword = 0;
    38 	Frames: Longword = 0;
    39 	WaterColor, DeepWaterColor: TSDL_Color;
    39 	WaterColor, DeepWaterColor: TSDL_Color;
    40 	cWaterSprCount: LongInt;
       
    41 
    40 
    42 implementation
    41 implementation
    43 uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound,
    42 uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound,
    44 {$IFDEF GLES11}
    43 {$IFDEF GLES11}
    45 	gles11,
    44 	gles11,
    67 procedure InitWorld;
    66 procedure InitWorld;
    68 begin
    67 begin
    69 cWaveWidth:= SpritesData[sprWater].Width;
    68 cWaveWidth:= SpritesData[sprWater].Width;
    70 //cWaveHeight:= SpritesData[sprWater].Height;
    69 //cWaveHeight:= SpritesData[sprWater].Height;
    71 cWaveHeight:= 32;
    70 cWaveHeight:= 32;
    72 cWaterSprCount:= 1 + round(cScreenWidth * 2 / cScaleFactor / SpritesData[sprWater].Width);
    71 
    73 cGearScrEdgesDist:= Min(cScreenWidth div 2 - 100, cScreenHeight div 2 - 50);
    72 cGearScrEdgesDist:= Min(cScreenWidth div 2 - 100, cScreenHeight div 2 - 50);
    74 SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
    73 SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
    75 prevPoint.X:= 0;
    74 prevPoint.X:= 0;
    76 prevPoint.Y:= cScreenHeight div 2;
    75 prevPoint.Y:= cScreenHeight div 2;
    77 WorldDx:=  - (LAND_WIDTH div 2) + cScreenWidth div 2;
    76 WorldDx:=  - (LAND_WIDTH div 2) + cScreenWidth div 2;
   191 WaterColorArray[3].a := Alpha;
   190 WaterColorArray[3].a := Alpha;
   192 
   191 
   193 lw:= cScreenWidth / cScaleFactor;
   192 lw:= cScreenWidth / cScaleFactor;
   194 lh:= cScreenHeight * 2 / cScaleFactor;
   193 lh:= cScreenHeight * 2 / cScaleFactor;
   195 // Water
   194 // Water
   196 r.y:= WorldDy + cWaterLine + 32;
   195 r.y:= WorldDy + cWaterLine + 16;
   197 if r.y < cScreenHeight * 2 / cScaleFactor then
   196 if r.y < cScreenHeight * 2 / cScaleFactor then
   198 	begin
   197 	begin
   199 	if r.y < 0 then r.y:= 0;
   198 	if r.y < 0 then r.y:= 0;
   200 
   199 
   201 	glDisable(GL_TEXTURE_2D);
   200 	glDisable(GL_TEXTURE_2D);
   223 	glEnable(GL_TEXTURE_2D)
   222 	glEnable(GL_TEXTURE_2D)
   224 	end
   223 	end
   225 end;
   224 end;
   226 
   225 
   227 procedure DrawWaves(Dir, dX, dY: LongInt);
   226 procedure DrawWaves(Dir, dX, dY: LongInt);
   228 var i: LongInt;
   227 var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
       
   228 	lw, waves: GLfloat;
   229 begin
   229 begin
   230 for i:= -1 to cWaterSprCount do
   230 lw:= cScreenWidth / cScaleFactor;
       
   231 waves:= lw * 2 / cWaveWidth;
       
   232 
       
   233 glBindTexture(GL_TEXTURE_2D, SpritesData[sprWater].Texture^.id);
       
   234 
       
   235 VertexBuffer[0].X:= -lw;
       
   236 VertexBuffer[0].Y:= cWaterLine + WorldDy + dY;
       
   237 VertexBuffer[1].X:= lw;
       
   238 VertexBuffer[1].Y:= VertexBuffer[0].Y;
       
   239 VertexBuffer[2].X:= lw;
       
   240 VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprWater].Height;
       
   241 VertexBuffer[3].X:= -lw;
       
   242 VertexBuffer[3].Y:= VertexBuffer[2].Y;
       
   243 
       
   244 TextureBuffer[0].X:= (( - WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth - 1);
       
   245 TextureBuffer[0].Y:= 0;
       
   246 TextureBuffer[1].X:= TextureBuffer[0].X + waves;
       
   247 TextureBuffer[1].Y:= 0;
       
   248 TextureBuffer[2].X:= TextureBuffer[0].X + waves;
       
   249 TextureBuffer[2].Y:= 1;
       
   250 TextureBuffer[3].X:= TextureBuffer[0].X;
       
   251 TextureBuffer[3].Y:= 1;
       
   252 
       
   253 glEnableClientState(GL_VERTEX_ARRAY);
       
   254 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
       
   255 
       
   256 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
       
   257 glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]);
       
   258 glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
       
   259 
       
   260 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
       
   261 glDisableClientState(GL_VERTEX_ARRAY);
       
   262 
       
   263 
       
   264 {for i:= -1 to cWaterSprCount do
   231 	DrawSprite(sprWater,
   265 	DrawSprite(sprWater,
   232 		i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth) - (cScreenWidth div 2),
   266 		i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth) - (cScreenWidth div 2),
   233 		cWaterLine + WorldDy + dY,
   267 		cWaterLine + WorldDy + dY,
   234 		0)
   268 		0)}
   235 end;
   269 end;
   236 
   270 
   237 procedure DrawWorld(Lag: LongInt);
   271 procedure DrawWorld(Lag: LongInt);
   238 var i, t: LongInt;
   272 var i, t: LongInt;
   239     r: TSDL_Rect;
   273     r: TSDL_Rect;