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; |