author  koda 
Tue, 20 Oct 2009 17:55:11 +0000  
changeset 2567  02ff5f9510b5 
parent 2553  7d8d62a5566e 
child 2569  6f77dd38294a 
permissions  rwrr 
4  1 
(* 
1066  2 
* Hedgewars, a free turn based strategy game 
1689  3 
* Copyright (c) 20042009 Andrey Korotaev <unC0Rr@gmail.com> 
4  4 
* 
183  5 
* This program is free software; you can redistribute it and/or modify 
6 
* it under the terms of the GNU General Public License as published by 

7 
* the Free Software Foundation; version 2 of the License 

4  8 
* 
183  9 
* This program is distributed in the hope that it will be useful, 
10 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 

11 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

12 
* GNU General Public License for more details. 

4  13 
* 
183  14 
* You should have received a copy of the GNU General Public License 
15 
* along with this program; if not, write to the Free Software 

16 
* Foundation, Inc., 59 Temple Place  Suite 330, Boston, MA 021111307, USA 

4  17 
*) 
18 

19 
unit uWorld; 

20 
interface 

351  21 
uses SDLh, uGears, uConsts, uFloat; 
4  22 
{$INCLUDE options.inc} 
371  23 
const WorldDx: LongInt = 512; 
24 
WorldDy: LongInt = 256; 

4  25 

26 
procedure InitWorld; 

956  27 
procedure DrawWorld(Lag: LongInt); 
108  28 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  29 

30 
{$IFDEF COUNTTICKS} 

31 
var cntTicks: LongWord; 

32 
{$ENDIF} 

33 
var FollowGear: PGear = nil; 

1256  34 
WindBarWidth: LongInt = 0; 
2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2407
diff
changeset

35 
bShowAmmoMenu: boolean = false; 
1256  36 
bSelected: boolean = false; 
37 
bShowFinger: boolean = false; 

38 
Frames: Longword = 0; 

39 
WaterColor, DeepWaterColor: TSDL_Color; 

4  40 

41 
implementation 

1906  42 
uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound, 
2152  43 
{$IFDEF GLES11} 
1906  44 
gles11, 
45 
{$ELSE} 

46 
GL, 

47 
{$ENDIF} 

1870  48 
uAmmos, uVisualGears, uChat, uLandTexture, uLand; 
1807  49 

564  50 
const FPS: Longword = 0; 
4  51 
CountTicks: Longword = 0; 
174  52 
SoundTimerTicks: Longword = 0; 
4  53 
prevPoint: TPoint = (X: 0; Y: 0); 
161  54 

4  55 
type TCaptionStr = record 
762  56 
Tex: PTexture; 
4  57 
EndTime: LongWord; 
58 
end; 

59 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

60 
var cWaveWidth, cWaveHeight: LongInt; 
1256  61 
Captions: array[TCapGroup] of TCaptionStr; 
62 
AMxShift, SlotsNum: LongInt; 

63 
tmpSurface: PSDL_Surface; 

64 
fpsTexture: PTexture = nil; 

4  65 

66 
procedure InitWorld; 

67 
begin 

1825  68 
cWaveWidth:= SpritesData[sprWater].Width; 
2268
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile  of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset

69 
//cWaveHeight:= SpritesData[sprWater].Height; 
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile  of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset

70 
cWaveHeight:= 32; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

71 

284  72 
cGearScrEdgesDist:= Min(cScreenWidth div 2  100, cScreenHeight div 2  50); 
74  73 
SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2); 
2197  74 
prevPoint.X:= 0; 
74  75 
prevPoint.Y:= cScreenHeight div 2; 
1760  76 
WorldDx:=  (LAND_WIDTH div 2) + cScreenWidth div 2; 
2139
5a083e71a71d
Properly decrement sniper rifle if timed out. Try to get camera position straight for once.
nemo
parents:
2119
diff
changeset

77 
WorldDy:=  (LAND_HEIGHT  (playHeight div 2)) + (cScreenHeight div 2); 
1120  78 
AMxShift:= 210 
161  79 
end; 
80 

956  81 
procedure ShowAmmoMenu; 
161  82 
const MENUSPEED = 15; 
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset

83 
var x, y, i, t, l, g: LongInt; 
371  84 
Slot, Pos: LongInt; 
161  85 
begin 
2428  86 
if (TurnTimeLeft = 0) or (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu) then bShowAmmoMenu:= false; 
165  87 
if bShowAmmoMenu then 
88 
begin 

2226
e35b62cb7a1c
Try turning off follow gear while ammo menu is open  needs testing w/ rope/parachute/jetpack
nemo
parents:
2224
diff
changeset

89 
FollowGear:= nil; 
1120  90 
if AMxShift = 210 then prevPoint.X:= 0; 
1812  91 
if cReducedQuality then 
92 
AMxShift:= 0 

93 
else 

94 
if AMxShift > 0 then dec(AMxShift, MENUSPEED); 

165  95 
end else 
96 
begin 

1120  97 
if AMxShift = 0 then 
165  98 
begin 
99 
CursorPoint.X:= cScreenWidth div 2; 

100 
CursorPoint.Y:= cScreenHeight div 2; 

101 
prevPoint:= CursorPoint; 

2197  102 
SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y) 
165  103 
end; 
1812  104 
if cReducedQuality then 
105 
AMxShift:= 210 

106 
else 

107 
if AMxShift < 210 then inc(AMxShift, MENUSPEED); 

165  108 
end; 
161  109 

110 
if CurrentTeam = nil then exit; 

162  111 
Slot:= 0; 
112 
Pos:= 1; 

602  113 
with CurrentHedgehog^ do 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

114 
begin 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

115 
if Ammo = nil then exit; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

116 
SlotsNum:= 0; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

117 
x:= cScreenWidth div 2  210 + AMxShift; 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

118 
y:= cScreenHeight  40; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

119 
dec(y); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

120 
DrawSprite(sprAMBorders, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

121 
dec(y); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

122 
DrawSprite(sprAMBorders, x, y, 1); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

123 
dec(y, 33); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

124 
DrawSprite(sprAMSlotName, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

125 
for i:= cMaxSlotIndex downto 0 do 
2361  126 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

127 
begin 
2197  128 
if (cScreenHeight  CursorPoint.Y >= y  33) and (cScreenHeight  CursorPoint.Y < y) then Slot:= i; 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

129 
dec(y, 33); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

130 
inc(SlotsNum); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

131 
DrawSprite(sprAMSlot, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

132 
DrawSprite(sprAMSlotKeys, x + 2, y + 1, i); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

133 
t:= 0; 
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset

134 
g:= 0; 
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset

135 
while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

136 
begin 
2379  137 
if (Ammo^[i, t].AmmoType <> amNothing) then 
138 
begin 

139 
l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 

1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

140 

2379  141 
if l >= 0 then 
142 
begin 

143 
DrawSprite(sprAMAmmosBW, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

144 
DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l); 

145 
end else 

146 
DrawSprite(sprAMAmmos, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

147 

2379  148 
if (Slot = i) 
149 
and (CursorPoint.X >= x + g * 33 + 35) 

150 
and (CursorPoint.X < x + g * 33 + 68) then 

151 
begin 

152 
if (l < 0) then DrawSprite(sprAMSelection, x + g * 33 + 35, y + 1, 0); 

153 
Pos:= t; 

154 
end; 

155 
inc(g) 

156 
end; 

157 
inc(t) 

1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

158 
end 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

159 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

160 
dec(y, 1); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

161 
DrawSprite(sprAMBorders, x, y, 0); 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

162 

1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

163 
if (Pos >= 0) then 
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2330
diff
changeset

164 
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

165 
begin 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

166 
DrawTexture(cScreenWidth div 2  200 + AMxShift, cScreenHeight  68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
2376  167 

1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

168 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
2198  169 
DrawTexture(cScreenWidth div 2 + AMxShift  35, cScreenHeight  68, CountTexz[Ammo^[Slot, Pos].Count]); 
2376  170 

2434  171 
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber < 0) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

172 
begin 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

173 
bShowAmmoMenu:= false; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

174 
SetWeapon(Ammo^[Slot, Pos].AmmoType); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

175 
bSelected:= false; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

176 
exit 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

177 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

178 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

179 
end; 
162  180 

181 
bSelected:= false; 

2197  182 
if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8) 
4  183 
end; 
184 

162  185 
procedure MoveCamera; forward; 
186 

2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

187 
procedure DrawWater(Alpha: byte); 
1915  188 
var VertexBuffer: array [0..3] of TVertex2f; 
189 
r: TSDL_Rect; 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

190 
lw, lh: GLfloat; 
1915  191 
begin 
2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

192 
WaterColorArray[0].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

193 
WaterColorArray[1].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

194 
WaterColorArray[2].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

195 
WaterColorArray[3].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

196 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

197 
lw:= cScreenWidth / cScaleFactor; 
2378  198 
lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; 
1915  199 
// Water 
2378  200 
r.y:= WorldDy + cWaterLine; 
201 
if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine then 

1915  202 
begin 
203 
if r.y < 0 then r.y:= 0; 

204 

205 
glDisable(GL_TEXTURE_2D); 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

206 
VertexBuffer[0].X:= lw; 
1915  207 
VertexBuffer[0].Y:= r.y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

208 
VertexBuffer[1].X:= lw; 
1915  209 
VertexBuffer[1].Y:= r.y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

210 
VertexBuffer[2].X:= lw; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

211 
VertexBuffer[2].Y:= lh; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

212 
VertexBuffer[3].X:= lw; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

213 
VertexBuffer[3].Y:= lh; 
1915  214 

215 
glEnableClientState (GL_COLOR_ARRAY); 

2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

216 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 
1915  217 

218 
glEnableClientState(GL_VERTEX_ARRAY); 

219 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 

2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

220 

1915  221 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
222 

2330  223 
glDisableClientState(GL_VERTEX_ARRAY); 
1915  224 
glDisableClientState(GL_COLOR_ARRAY); 
225 

226 
glColor4f(1, 1, 1, 1); // disable coloring 

227 
glEnable(GL_TEXTURE_2D) 

228 
end 

229 
end; 

230 

2288  231 
procedure DrawWaves(Dir, dX, dY: LongInt); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

232 
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; 
2374  233 
lw, waves, shift: GLfloat; 
2288  234 
begin 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

235 
lw:= cScreenWidth / cScaleFactor; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

236 
waves:= lw * 2 / cWaveWidth; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

237 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

238 
glBindTexture(GL_TEXTURE_2D, SpritesData[sprWater].Texture^.id); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

239 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

240 
VertexBuffer[0].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

241 
VertexBuffer[0].Y:= cWaterLine + WorldDy + dY; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

242 
VertexBuffer[1].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

243 
VertexBuffer[1].Y:= VertexBuffer[0].Y; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

244 
VertexBuffer[2].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

245 
VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprWater].Height; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

246 
VertexBuffer[3].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

247 
VertexBuffer[3].Y:= VertexBuffer[2].Y; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

248 

2374  249 
shift:=  lw / cWaveWidth; 
2495  250 
TextureBuffer[0].X:= shift + ((  WorldDx + LongInt(RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth  1); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

251 
TextureBuffer[0].Y:= 0; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

252 
TextureBuffer[1].X:= TextureBuffer[0].X + waves; 
2447
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

253 
TextureBuffer[1].Y:= TextureBuffer[0].Y; 
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

254 
TextureBuffer[2].X:= TextureBuffer[1].X; 
2553  255 
TextureBuffer[2].Y:= SpritesData[sprWater].Texture^.ry; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

256 
TextureBuffer[3].X:= TextureBuffer[0].X; 
2447
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

257 
TextureBuffer[3].Y:= TextureBuffer[2].Y; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

258 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

259 
glEnableClientState(GL_VERTEX_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

260 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

261 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

262 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

263 
glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

264 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

265 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

266 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

267 
glDisableClientState(GL_VERTEX_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

268 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

269 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

270 
{for i:= 1 to cWaterSprCount do 
2288  271 
DrawSprite(sprWater, 
272 
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth)  (cScreenWidth div 2), 

273 
cWaterLine + WorldDy + dY, 

2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

274 
0)} 
2288  275 
end; 
276 

2426  277 
procedure DrawRepeated(spr, sprL, sprR: TSprite; Shift: LongInt); 
278 
var i, w, sw: LongInt; 

279 
begin 

280 
sw:= round(cScreenWidth / cScaleFactor); 

281 
if (SpritesData[sprL].Texture = nil) or (SpritesData[sprR].Texture = nil) then 

282 
begin 

283 
w:= SpritesData[spr].Width; 

284 
i:= Shift mod w; 

285 
if i > 0 then dec(i, w); 

286 
dec(i, w * (sw div w + 1)); 

287 
repeat 

288 
DrawSprite(spr, i, WorldDy + LAND_HEIGHT  SpritesData[spr].Height, 0); 

289 
inc(i, w) 

290 
until i > sw 

291 
end else 

292 
begin 

293 
w:= SpritesData[spr].Width; 

294 
dec(Shift, w div 2); 

295 
DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT  SpritesData[spr].Height, 0); 

296 

297 
sw:= round(cScreenWidth / cScaleFactor); 

298 

299 
i:= Shift  SpritesData[sprL].Width; 

300 
while i >= sw  SpritesData[sprL].Width do 

301 
begin 

302 
DrawSprite(sprL, i, WorldDy + LAND_HEIGHT  SpritesData[sprL].Height, 0); 

303 
dec(i, SpritesData[sprL].Width); 

304 
end; 

305 

306 
i:= Shift + w; 

307 
while i <= sw do 

308 
begin 

309 
DrawSprite(sprR, i, WorldDy + LAND_HEIGHT  SpritesData[sprR].Height, 0); 

310 
inc(i, SpritesData[sprR].Width) 

311 
end 

312 
end 

313 
end; 

314 

315 

956  316 
procedure DrawWorld(Lag: LongInt); 
371  317 
var i, t: LongInt; 
4  318 
r: TSDL_Rect; 
107  319 
tdx, tdy: Double; 
175  320 
grp: TCapGroup; 
174  321 
s: string[15]; 
2567  322 
x,y: LongInt; 
323 
offset: LongInt; 

4  324 
begin 
2372  325 
if ZoomValue < zoom then 
326 
begin 

2379  327 
zoom:= zoom  0.002 * Lag; 
2374  328 
if ZoomValue > zoom then zoom:= ZoomValue 
2372  329 
end else 
330 
if ZoomValue > zoom then 

331 
begin 

2379  332 
zoom:= zoom + 0.002 * Lag; 
2374  333 
if ZoomValue < zoom then zoom:= ZoomValue 
2372  334 
end; 
2376  335 

770  336 
// Sky 
756  337 
glClear(GL_COLOR_BUFFER_BIT); 
338 
glEnable(GL_BLEND); 

775  339 
glEnable(GL_TEXTURE_2D); 
777  340 
//glPushMatrix; 
341 
//glScalef(1.0, 1.0, 1.0); 

756  342 

2567  343 
{$IFDEF IPHONEOS} 
344 
{* see the code in MainLoop *} 

345 
SDL_GetMouseState(0, @x, @y); 

346 
if (x > 100) and (x < 220) and (y > 200) and (y < 280) then 

347 
{$ENDIF} 

281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

348 
if not isPaused then MoveCamera; 
162  349 

1812  350 
if not cReducedQuality then 
351 
begin 

352 
// background 

2426  353 
DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8); 
354 
DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5); 

4  355 

1812  356 
DrawVisualGears(0); 
2288  357 
end; 
803  358 

2288  359 
// Waves 
360 
DrawWaves( 1, 0,  (cWaveHeight * 2)); 

361 
DrawWaves(1, 100,  (cWaveHeight + cWaveHeight div 2)); 

1812  362 

4  363 

762  364 
DrawLand(WorldDx, WorldDy); 
1911  365 

2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

366 
DrawWater(255); 
4  367 

1660  368 
// Attack bar 
369 
if CurrentTeam <> nil then 

370 
case AttackBar of 

371 
(* 1: begin 

372 
r:= StuffPoz[sPowerBar]; 

373 
{$WARNINGS OFF} 

374 
r.w:= (CurrentHedgehog^.Gear^.Power * 256) div cPowerDivisor; 

375 
{$WARNINGS ON} 

376 
DrawSpriteFromRect(r, cScreenWidth  272, cScreenHeight  48, 16, 0, Surface); 

377 
end;*) 

378 
2: with CurrentHedgehog^ do 

379 
begin 

380 
tdx:= hwSign(Gear^.dX) * Sin(Gear^.Angle * Pi / cMaxAngle); 

381 
tdy:=  Cos(Gear^.Angle * Pi / cMaxAngle); 

382 
for i:= (Gear^.Power * 24) div cPowerDivisor downto 0 do 

383 
DrawSprite(sprPower, 

384 
hwRound(Gear^.X) + system.round(WorldDx + tdx * (24 + i * 2))  16, 

385 
hwRound(Gear^.Y) + system.round(WorldDy + tdy * (24 + i * 2))  12, 

386 
i) 

387 
end 

388 
end; 

389 

956  390 
DrawGears; 
4  391 

2047
805f7b62cff6
Allow speech bubble/small damage tags in "reduced quality"
nemo
parents:
2002
diff
changeset

392 
DrawVisualGears(1); 
1045  393 

2273  394 
DrawWater(cWaterOpacity); 
2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

395 

5  396 
// Waves 
2288  397 
DrawWaves( 1, 25,  cWaveHeight); 
2567  398 
DrawWaves(1, 50,  (cWaveHeight shr 1)); 
2288  399 
DrawWaves( 1, 75, 0); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

400 

0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

401 

2288  402 
{$WARNINGS OFF} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

403 
// Target 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

404 
if TargetPoint.X <> NoPointX then DrawSprite(sprTargetP, TargetPoint.X + WorldDx  16, TargetPoint.Y + WorldDy  16, 0); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

405 

4  406 
{$WARNINGS ON} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

407 
SetScale(2.0); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

408 

2567  409 
{$IFDEF IPHONEOS} 
410 
offset:= 465; 

411 
{$ELSE} 

412 
offset:= 48; 

413 
{$ENDIF} 

79  414 
// Turn time 
4  415 
if TurnTimeLeft <> 0 then 
416 
begin 

417 
i:= Succ(Pred(TurnTimeLeft) div 1000); 

418 
if i>99 then t:= 112 

419 
else if i>9 then t:= 96 

420 
else t:= 80; 

2567  421 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  offset, 1); 
4  422 
while i > 0 do 
423 
begin 

424 
dec(t, 32); 

2567  425 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  offset, i mod 10); 
4  426 
i:= i div 10 
427 
end; 

2567  428 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  offset, 0); 
4  429 
end; 
79  430 

2567  431 
{$IFNDEF IPHONEOS} 
2428  432 
// Timetrial 
433 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then 

434 
begin 

435 
if TimeTrialStopTime = 0 then i:= RealTicks  TimeTrialStartTime else i:= TimeTrialStopTime  TimeTrialStartTime; 

436 
t:= 272; 

437 
// right frame 

438 
DrawSprite(sprFrame, cScreenWidth div 2 + t, 8, 1); 

439 
dec(t, 32); 

440 
// 1 ms 

441 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

442 
dec(t, 32); 

443 
i:= i div 10; 

444 
// 10 ms 

445 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

446 
dec(t, 32); 

447 
i:= i div 10; 

448 
// 100 ms 

449 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

450 
dec(t, 16); 

451 
// Point 

452 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, 11); 

453 
dec(t, 32); 

454 
i:= i div 10; 

455 
// 1 s 

456 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

457 
dec(t, 32); 

458 
i:= i div 10; 

459 
// 10s 

460 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 6); 

461 
dec(t, 16); 

462 
// Point 

463 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, 10); 

464 
dec(t, 32); 

465 
i:= i div 6; 

466 
// 1 m 

467 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

468 
dec(t, 32); 

469 
i:= i div 10; 

470 
// 10 m 

471 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

472 
// left frame 

473 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, 8, 0); 

474 
end; 

2567  475 
{$ENDIF} 
476 

4  477 
// Captions 
2567  478 
{$IFDEF IPHONEOS} 
479 
i:= 53; 

480 
{$ELSE} 

2428  481 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then i:= 48 else i:= 8; 
2567  482 
{$ENDIF} 
2428  483 

175  484 
for grp:= Low(TCapGroup) to High(TCapGroup) do 
485 
with Captions[grp] do 

762  486 
if Tex <> nil then 
175  487 
begin 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

488 
DrawCentered(0, i, Tex); 
762  489 
inc(i, Tex^.h + 2); 
564  490 
if EndTime <= RealTicks then 
175  491 
begin 
762  492 
FreeTexture(Tex); 
493 
Tex:= nil; 

175  494 
EndTime:= 0 
495 
end 

496 
end; 

4  497 

47  498 
// Teams Healths 
547  499 
for t:= 0 to Pred(TeamsCount) do 
500 
with TeamsArray[t]^ do 

47  501 
begin 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

502 
DrawTexture( NameTagTex^.w  3, cScreenHeight + DrawHealthY, NameTagTex); 
690  503 

504 
r.x:= 0; 

505 
r.y:= 0; 

547  506 
r.w:= 2 + TeamHealthBarWidth; 
764
7513452b1d51
Now game looks almost like it did before switching to OpenGL
unc0rr
parents:
762
diff
changeset

507 
r.h:= HealthTex^.h; 
690  508 

2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2407
diff
changeset

509 
DrawFromRect(0, cScreenHeight + DrawHealthY, @r, HealthTex); 
690  510 

83  511 
inc(r.x, cTeamHealthWidth + 2); 
512 
r.w:= 3; 

690  513 

2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2407
diff
changeset

514 
DrawFromRect(TeamHealthBarWidth + 2, cScreenHeight + DrawHealthY, @r, HealthTex); 
47  515 
end; 
516 

5  517 
// Lag alert 
2567  518 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  519 

5  520 
// Wind bar 
2567  521 
{$IFDEF IPHONEOS} 
522 
offset:= 450; 

523 
{$ELSE} 

524 
offset:= 30; 

525 
{$ENDIF} 

526 
DrawSprite(sprWindBar, (cScreenWidth shr 1)  180, cScreenHeight  offset, 0); 

6  527 
if WindBarWidth > 0 then 
5  528 
begin 
689  529 
{$WARNINGS OFF} 
530 
r.x:= 8  (RealTicks shr 6) mod 8; 

531 
{$WARNINGS ON} 

532 
r.y:= 0; 

533 
r.w:= WindBarWidth; 

534 
r.h:= 13; 

2567  535 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  103, cScreenHeight  offset  2, 13, 0); 
5  536 
end else 
6  537 
if WindBarWidth < 0 then 
5  538 
begin 
689  539 
{$WARNINGS OFF} 
540 
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; 

541 
{$WARNINGS ON} 

542 
r.y:= 0; 

543 
r.w:=  WindBarWidth; 

544 
r.h:= 13; 

2567  545 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  106 + WindBarWidth, cScreenHeight  offset  2, 13, 0); 
5  546 
end; 
547 

161  548 
// AmmoMenu 
1120  549 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  550 

2287  551 
// Cursor 
552 
if isCursorVisible and bShowAmmoMenu then 

553 
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8); 

942  554 

2567  555 
{$IFNDEF IPHONEOS} 
556 
{* do not draw the chat because a) no input b) too little space*} 

2287  557 
DrawChat; 
2567  558 
{$ENDIF} 
4  559 

2567  560 
if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
561 
if isPaused then DrawCentered(0, (cScreenHeight shr 1), PauseTexture); 

281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

562 

4  563 
inc(Frames); 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

564 
if cShowFPS then 
4  565 
begin 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

566 
inc(CountTicks, Lag); 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

567 
if CountTicks >= 1000 then 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

568 
begin 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

569 
FPS:= Frames; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

570 
Frames:= 0; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

571 
CountTicks:= 0; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

572 
s:= inttostr(FPS) + ' fps'; 
759  573 
if fpsTexture <> nil then FreeTexture(fpsTexture); 
574 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), $FFFFFF); 

2290
bf87ca44782e
Selectively enable clamping  seeing if this helps avoid weird flake problems while still fixing vertical lines in waves and sky
nemo
parents:
2288
diff
changeset

575 
fpsTexture:= Surface2Tex(tmpSurface, false); 
759  576 
SDL_FreeSurface(tmpSurface) 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

577 
end; 
759  578 
if fpsTexture <> nil then 
2567  579 
DrawTexture((cScreenWidth shr 1)  50, 10, fpsTexture); 
4  580 
end; 
174  581 

582 
inc(SoundTimerTicks, Lag); 

583 
if SoundTimerTicks >= 50 then 

584 
begin 

585 
SoundTimerTicks:= 0; 

586 
if cVolumeDelta <> 0 then 

587 
begin 

588 
str(ChangeVolume(cVolumeDelta), s); 

175  589 
AddCaption(Format(trmsg[sidVolume], s), $FFFFFF, capgrpVolume) 
174  590 
end 
756  591 
end; 
592 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

593 
if GameState = gsConfirm then DrawCentered(0, cScreenHeight div 2, ConfirmTexture); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

594 

2162  595 
SetScale(zoom); 
1023  596 

2287  597 
// Cursor 
598 
if isCursorVisible then 

599 
begin 

600 
if not bShowAmmoMenu then 

601 
with CurrentHedgehog^ do 

602 
if (Gear^.State and gstHHChooseTarget) <> 0 then 

603 
begin 

604 
i:= Ammo^[CurSlot, CurAmmo].Pos; 

605 
with Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType] do 

606 
if PosCount > 1 then 

607 
DrawSprite(PosSprite, CursorPoint.X  SpritesData[PosSprite].Width div 2, 

608 
cScreenHeight  CursorPoint.Y  SpritesData[PosSprite].Height div 2, 

609 
i); 

610 
end; 

611 
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8) 

612 
end; 

613 

614 

775  615 
glDisable(GL_TEXTURE_2D); 
756  616 
glDisable(GL_BLEND) 
4  617 
end; 
618 

108  619 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  620 
begin 
2142  621 
//if Group in [capgrpGameState] then WriteLnToConsole(s); 
762  622 
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); 
4  623 

762  624 
Captions[Group].Tex:= RenderStringTex(s, Color, fntBig); 
2142  625 

626 
case Group of 

627 
capgrpGameState: Captions[Group].EndTime:= RealTicks + 2200 

628 
else 

629 
Captions[Group].EndTime:= RealTicks + 1570 

630 
end; 

4  631 
end; 
632 

79  633 
procedure MoveCamera; 
4  634 
const PrevSentPointTime: LongWord = 0; 
2428  635 
var EdgesDist, wdy: LongInt; 
4  636 
begin 
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

637 
if (not (CurrentTeam^.ExtDriven and isCursorVisible)) and cHasFocus then 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

638 
begin 
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

639 
{$IFDEF SDL13} 
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

640 
SDL_GetMouseState(0, @CursorPoint.X, @CursorPoint.Y); 
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

641 
{$ELSE} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

642 
SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); 
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

643 
{$ENDIF} 
2567  644 
CursorPoint.X:= CursorPoint.X  (cScreenWidth shr 1); 
2197  645 
CursorPoint.Y:= cScreenHeight  CursorPoint.Y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

646 
end; 
678  647 

2397
2ca4ca6b4bab
 Patch for "Syncronizing" message by Smaxx + some tweaks by me
unc0rr
parents:
2379
diff
changeset

648 
if (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then 
1689  649 
if abs(CursorPoint.X  prevPoint.X) + abs(CursorPoint.Y  prevpoint.Y) > 4 then 
650 
begin 

651 
FollowGear:= nil; 

2197  652 
prevPoint:= CursorPoint; 
1689  653 
exit 
654 
end 

655 
else begin 

2198  656 
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; 
2197  657 
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight  (hwRound(FollowGear^.Y) + WorldDy)) div 8; 
1689  658 
end; 
4  659 

2375  660 
wdy:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine  cVisibleWater; 
661 
if WorldDy < wdy then WorldDy:= wdy; 

662 

2197  663 
if ((CursorPoint.X = prevPoint.X) and (CursorPoint.Y = prevpoint.Y)) then exit; 
4  664 

1120  665 
if AMxShift < 210 then 
1689  666 
begin 
2178
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset

667 
if CursorPoint.X < cScreenWidth div 2 + AMxShift  175 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  175; 
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset

668 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  10; 
2197  669 
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; 
670 
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; 

1689  671 
prevPoint:= CursorPoint; 
2197  672 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
1689  673 
exit 
674 
end; 

162  675 

4  676 
if isCursorVisible then 
1689  677 
begin 
2197  678 
if (not CurrentTeam^.ExtDriven) and (GameTicks >= PrevSentPointTime + cSendCursorPosTime) then 
1689  679 
begin 
2407
9f413bd5150e
 Fix mouse cursor bugs in net game (still has a bug near water)
unc0rr
parents:
2397
diff
changeset

680 
SendIPCXY('P', CursorPoint.X  WorldDx, cScreenHeight  CursorPoint.Y  WorldDy); 
1689  681 
PrevSentPointTime:= GameTicks 
682 
end; 

683 
end; 

351  684 

4  685 
if isCursorVisible or (FollowGear <> nil) then 
686 
begin 

284  687 
if isCursorVisible then EdgesDist:= cCursorEdgesDist 
688 
else EdgesDist:= cGearScrEdgesDist; 

2197  689 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 
4  690 
begin 
2197  691 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 
692 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

4  693 
end else 
2197  694 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 
4  695 
begin 
2197  696 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 
2198  697 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 
4  698 
end; 
284  699 
if CursorPoint.Y < EdgesDist then 
4  700 
begin 
2197  701 
WorldDy:= WorldDy + CursorPoint.Y  EdgesDist; 
284  702 
CursorPoint.Y:= EdgesDist 
4  703 
end else 
284  704 
if CursorPoint.Y > cScreenHeight  EdgesDist then 
4  705 
begin 
2197  706 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 
284  707 
CursorPoint.Y:= cScreenHeight  EdgesDist 
4  708 
end; 
709 
end else 

308  710 
if cHasFocus then 
711 
begin 

70  712 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 
2197  713 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 
2162  714 
CursorPoint.X:= 0; 
715 
CursorPoint.Y:= cScreenHeight div 2; 

308  716 
end; 
351  717 

4  718 
prevPoint:= CursorPoint; 
2567  719 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight  CursorPoint.Y); 
1760  720 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2375  721 
if WorldDy < wdy then WorldDy:= wdy; 
2426  722 
if WorldDx <  LAND_WIDTH  1024 then WorldDx:=  LAND_WIDTH  1024; 
723 
if WorldDx > 1024 then WorldDx:= 1024; 

4  724 
end; 
725 

726 
initialization 

727 
FillChar(Captions, sizeof(Captions), 0) 

728 

729 
end. 