author  koda 
Mon, 18 Jan 2010 05:36:08 +0000  
changeset 2699  249adefa9c1c 
parent 2682  d4c395f25db2 
child 2704  51cda17b7c3b 
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 

2630  19 
{$INCLUDE "options.inc"} 
20 

4  21 
unit uWorld; 
22 
interface 

351  23 
uses SDLh, uGears, uConsts, uFloat; 
2630  24 

371  25 
const WorldDx: LongInt = 512; 
26 
WorldDy: LongInt = 256; 

4  27 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

28 
procedure init_uWorld; 
4  29 
procedure InitWorld; 
956  30 
procedure DrawWorld(Lag: LongInt); 
108  31 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  32 

33 
{$IFDEF COUNTTICKS} 

34 
var cntTicks: LongWord; 

35 
{$ENDIF} 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

36 
var FollowGear: PGear; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

37 
WindBarWidth: LongInt; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

38 
bShowAmmoMenu: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

39 
bSelected: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

40 
bShowFinger: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

41 
Frames: Longword; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

42 
WaterColor, DeepWaterColor: TSDL_Color; 
4  43 

44 
implementation 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

45 
uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound, uAmmos, uVisualGears, uChat, uLandTexture, uLand, 
2152  46 
{$IFDEF GLES11} 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

47 
gles11; 
1906  48 
{$ELSE} 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

49 
GL; 
1906  50 
{$ENDIF} 
1807  51 

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

4  57 
type TCaptionStr = record 
762  58 
Tex: PTexture; 
4  59 
EndTime: LongWord; 
60 
end; 

61 

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

62 
var cWaveWidth, cWaveHeight: LongInt; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

63 
Captions: array[TCapGroup] of TCaptionStr; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

64 
AMxShift, SlotsNum: LongInt; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

65 
tmpSurface: PSDL_Surface; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

66 
fpsTexture: PTexture; 
4  67 

68 
procedure InitWorld; 

69 
begin 

1825  70 
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

71 
//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

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

73 

284  74 
cGearScrEdgesDist:= Min(cScreenWidth div 2  100, cScreenHeight div 2  50); 
74  75 
SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2); 
2197  76 
prevPoint.X:= 0; 
74  77 
prevPoint.Y:= cScreenHeight div 2; 
1760  78 
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

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

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

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

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

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

95 
else 

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

165  97 
end else 
98 
begin 

1120  99 
if AMxShift = 0 then 
165  100 
begin 
2579  101 
CursorPoint.X:= cScreenWidth shr 1; 
102 
CursorPoint.Y:= cScreenHeight shr 1; 

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

108 
else 

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

165  110 
end; 
161  111 

112 
if CurrentTeam = nil then exit; 

162  113 
Slot:= 0; 
114 
Pos:= 1; 

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

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

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

118 
SlotsNum:= 0; 
2579  119 
x:= (cScreenWidth shr 1)  210 + AMxShift; 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

120 
y:= cScreenHeight  40; 
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, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

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

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

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

127 
for i:= cMaxSlotIndex downto 0 do 
2361  128 
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

129 
begin 
2197  130 
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

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

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

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

134 
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

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

137 
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

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

141 
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

142 

2379  143 
if l >= 0 then 
144 
begin 

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

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

147 
end else 

148 
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

149 

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

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

153 
begin 

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

155 
Pos:= t; 

156 
end; 

157 
inc(g) 

158 
end; 

159 
inc(t) 

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

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

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

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

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

164 

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

165 
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

166 
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

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

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

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

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

2434  173 
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

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

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

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

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

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

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

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

181 
end; 
162  182 

183 
bSelected:= false; 

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

162  187 
procedure MoveCamera; forward; 
188 

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

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

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

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

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

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

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

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

198 

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

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

1915  204 
begin 
205 
if r.y < 0 then r.y:= 0; 

206 

207 
glDisable(GL_TEXTURE_2D); 

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

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

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

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

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

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

215 
VertexBuffer[3].Y:= lh; 
1915  216 

217 
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

218 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 
1915  219 

220 
glEnableClientState(GL_VERTEX_ARRAY); 

221 
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

222 

1915  223 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
224 

2330  225 
glDisableClientState(GL_VERTEX_ARRAY); 
1915  226 
glDisableClientState(GL_COLOR_ARRAY); 
227 

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

229 
glEnable(GL_TEXTURE_2D) 

230 
end 

231 
end; 

232 

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

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

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

238 
waves:= lw * 2 / cWaveWidth; 
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 
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

241 

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

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

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

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

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

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

247 
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

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

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

250 

2374  251 
shift:=  lw / cWaveWidth; 
2495  252 
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

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

254 
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

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

256 
TextureBuffer[2].X:= TextureBuffer[1].X; 
2553  257 
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

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

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

260 

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

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

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

263 

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

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

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

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

267 

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

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

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

270 

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

271 

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

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

275 
cWaterLine + WorldDy + dY, 

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

276 
0)} 
2288  277 
end; 
278 

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

281 
begin 

282 
sw:= round(cScreenWidth / cScaleFactor); 

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

284 
begin 

285 
w:= SpritesData[spr].Width; 

286 
i:= Shift mod w; 

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

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

289 
repeat 

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

291 
inc(i, w) 

292 
until i > sw 

293 
end else 

294 
begin 

295 
w:= SpritesData[spr].Width; 

296 
dec(Shift, w div 2); 

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

298 

299 
sw:= round(cScreenWidth / cScaleFactor); 

300 

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

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

303 
begin 

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

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

306 
end; 

307 

308 
i:= Shift + w; 

309 
while i <= sw do 

310 
begin 

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

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

313 
end 

314 
end 

315 
end; 

316 

317 

956  318 
procedure DrawWorld(Lag: LongInt); 
371  319 
var i, t: LongInt; 
4  320 
r: TSDL_Rect; 
107  321 
tdx, tdy: Double; 
175  322 
grp: TCapGroup; 
174  323 
s: string[15]; 
2569  324 
{$IFDEF IPHONEOS} 
2567  325 
x,y: LongInt; 
2569  326 
{$ENDIF} 
2567  327 
offset: LongInt; 
4  328 
begin 
2372  329 
if ZoomValue < zoom then 
330 
begin 

2379  331 
zoom:= zoom  0.002 * Lag; 
2374  332 
if ZoomValue > zoom then zoom:= ZoomValue 
2372  333 
end else 
334 
if ZoomValue > zoom then 

335 
begin 

2379  336 
zoom:= zoom + 0.002 * Lag; 
2374  337 
if ZoomValue < zoom then zoom:= ZoomValue 
2372  338 
end; 
2376  339 

770  340 
// Sky 
756  341 
glClear(GL_COLOR_BUFFER_BIT); 
342 
glEnable(GL_BLEND); 

775  343 
glEnable(GL_TEXTURE_2D); 
777  344 
//glPushMatrix; 
345 
//glScalef(1.0, 1.0, 1.0); 

756  346 

2567  347 
{$IFDEF IPHONEOS} 
2671
7e0f88013fe8
smaller patches, one missing Skylowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2670
diff
changeset

348 
SDL_GetMouseState(@x, @y); 
2682  349 
//WriteLnToConsole('x; ' + inttostr(x) + ' y: ' + inttostr(y)); 
2567  350 
{$ENDIF} 
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

351 
if not isPaused then MoveCamera; 
162  352 

1812  353 
if not cReducedQuality then 
354 
begin 

355 
// background 

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

4  358 

1812  359 
DrawVisualGears(0); 
2288  360 
end; 
803  361 

2288  362 
// Waves 
2579  363 
DrawWaves( 1, 0,  (cWaveHeight shl 1)); 
364 
DrawWaves(1, 100,  (cWaveHeight + (cWaveHeight shr 1))); 

1812  365 

4  366 

762  367 
DrawLand(WorldDx, WorldDy); 
1911  368 

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

369 
DrawWater(255); 
4  370 

1660  371 
// Attack bar 
372 
if CurrentTeam <> nil then 

373 
case AttackBar of 

374 
(* 1: begin 

375 
r:= StuffPoz[sPowerBar]; 

376 
{$WARNINGS OFF} 

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

378 
{$WARNINGS ON} 

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

380 
end;*) 

381 
2: with CurrentHedgehog^ do 

382 
begin 

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

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

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

386 
DrawSprite(sprPower, 

2609  387 
hwRound(Gear^.X) + round(WorldDx + tdx * (24 + i * 2))  16, 
388 
hwRound(Gear^.Y) + round(WorldDy + tdy * (24 + i * 2))  12, 

1660  389 
i) 
390 
end 

391 
end; 

392 

956  393 
DrawGears; 
4  394 

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

395 
DrawVisualGears(1); 
1045  396 

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

398 

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

403 

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

404 

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

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

407 
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

408 

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

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

411 

2567  412 
{$IFDEF IPHONEOS} 
413 
offset:= 465; 

414 
{$ELSE} 

415 
offset:= 48; 

416 
{$ENDIF} 

79  417 
// Turn time 
4  418 
if TurnTimeLeft <> 0 then 
419 
begin 

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

421 
if i>99 then t:= 112 

422 
else if i>9 then t:= 96 

423 
else t:= 80; 

2567  424 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  offset, 1); 
4  425 
while i > 0 do 
426 
begin 

427 
dec(t, 32); 

2567  428 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  offset, i mod 10); 
4  429 
i:= i div 10 
430 
end; 

2567  431 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  offset, 0); 
4  432 
end; 
79  433 

2567  434 
{$IFNDEF IPHONEOS} 
2428  435 
// Timetrial 
436 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then 

437 
begin 

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

439 
t:= 272; 

440 
// right frame 

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

442 
dec(t, 32); 

443 
// 1 ms 

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

445 
dec(t, 32); 

446 
i:= i div 10; 

447 
// 10 ms 

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

449 
dec(t, 32); 

450 
i:= i div 10; 

451 
// 100 ms 

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

453 
dec(t, 16); 

454 
// Point 

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

456 
dec(t, 32); 

457 
i:= i div 10; 

458 
// 1 s 

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

460 
dec(t, 32); 

461 
i:= i div 10; 

462 
// 10s 

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

464 
dec(t, 16); 

465 
// Point 

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

467 
dec(t, 32); 

468 
i:= i div 6; 

469 
// 1 m 

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

471 
dec(t, 32); 

472 
i:= i div 10; 

473 
// 10 m 

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

475 
// left frame 

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

477 
end; 

2567  478 
{$ENDIF} 
479 

4  480 
// Captions 
2567  481 
{$IFDEF IPHONEOS} 
482 
i:= 53; 

483 
{$ELSE} 

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

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

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

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

175  497 
EndTime:= 0 
498 
end 

499 
end; 

4  500 

47  501 
// Teams Healths 
547  502 
for t:= 0 to Pred(TeamsCount) do 
503 
with TeamsArray[t]^ do 

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

505 
DrawTexture( NameTagTex^.w  3, cScreenHeight + DrawHealthY, NameTagTex); 
690  506 

507 
r.x:= 0; 

508 
r.y:= 0; 

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

510 
r.h:= HealthTex^.h; 
690  511 

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

512 
DrawFromRect(0, cScreenHeight + DrawHealthY, @r, HealthTex); 
690  513 

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

690  516 

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

517 
DrawFromRect(TeamHealthBarWidth + 2, cScreenHeight + DrawHealthY, @r, HealthTex); 
47  518 
end; 
519 

5  520 
// Lag alert 
2567  521 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  522 

5  523 
// Wind bar 
2567  524 
{$IFDEF IPHONEOS} 
525 
offset:= 450; 

526 
{$ELSE} 

527 
offset:= 30; 

528 
{$ENDIF} 

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

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

534 
{$WARNINGS ON} 

535 
r.y:= 0; 

536 
r.w:= WindBarWidth; 

537 
r.h:= 13; 

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

544 
{$WARNINGS ON} 

545 
r.y:= 0; 

546 
r.w:=  WindBarWidth; 

547 
r.h:= 13; 

2571  548 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  106 + WindBarWidth, cScreenHeight  offset + 2, 13, 0); 
5  549 
end; 
550 

161  551 
// AmmoMenu 
1120  552 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  553 

2287  554 
// Cursor 
555 
if isCursorVisible and bShowAmmoMenu then 

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

942  557 

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

2287  560 
DrawChat; 
2567  561 
{$ENDIF} 
4  562 

2567  563 
if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
564 
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

565 

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

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

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

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

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

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

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

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

575 
s:= inttostr(FPS) + ' fps'; 
759  576 
if fpsTexture <> nil then FreeTexture(fpsTexture); 
2665
50b4e544c163
complete transition of longword>sdl_color for TTF bindings
koda
parents:
2630
diff
changeset

577 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 
2670  578 
tmpSurface:= doSurfaceConversion(tmpSurface); 
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

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

581 
end; 
759  582 
if fpsTexture <> nil then 
2567  583 
DrawTexture((cScreenWidth shr 1)  50, 10, fpsTexture); 
4  584 
end; 
174  585 

586 
inc(SoundTimerTicks, Lag); 

587 
if SoundTimerTicks >= 50 then 

588 
begin 

589 
SoundTimerTicks:= 0; 

590 
if cVolumeDelta <> 0 then 

591 
begin 

592 
str(ChangeVolume(cVolumeDelta), s); 

2619  593 
AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) 
174  594 
end 
756  595 
end; 
596 

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

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

598 

2162  599 
SetScale(zoom); 
1023  600 

2287  601 
// Cursor 
602 
if isCursorVisible then 

603 
begin 

604 
if not bShowAmmoMenu then 

605 
with CurrentHedgehog^ do 

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

607 
begin 

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

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

610 
if PosCount > 1 then 

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

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

613 
i); 

614 
end; 

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

616 
end; 

617 

618 

775  619 
glDisable(GL_TEXTURE_2D); 
756  620 
glDisable(GL_BLEND) 
4  621 
end; 
622 

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

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

630 
case Group of 

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

632 
else 

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

634 
end; 

4  635 
end; 
636 

79  637 
procedure MoveCamera; 
4  638 
const PrevSentPointTime: LongWord = 0; 
2428  639 
var EdgesDist, wdy: LongInt; 
4  640 
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

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

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

643 
SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); 
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 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

726 
procedure init_uWorld; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

727 
begin 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

728 
fpsTexture:= nil; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

729 
FollowGear:= nil; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

730 
WindBarWidth:= 0; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

731 
bShowAmmoMenu:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

732 
bSelected:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

733 
bShowFinger:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

734 
Frames:= 0; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

735 

249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

736 
FillChar(Captions, sizeof(Captions), 0) 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

737 
end; 
4  738 

739 
end. 