author  nemo 
Mon, 24 Aug 2009 22:57:59 +0000  
changeset 2330  ba46dcda3676 
parent 2302  0f122917d799 
child 2357  babe1a55e284 
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; 
35 
bShowAmmoMenu: boolean = false; 

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; 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

83 
var x, y, i, t, l: LongInt; 
371  84 
Slot, Pos: LongInt; 
161  85 
begin 
2224
4f3e7bd31841
Allow ammo menu to stay open when on rope/parachute/jetpack  allows for using nonF key alt weapon selection
nemo
parents:
2198
diff
changeset

86 
if (TurnTimeLeft = 0) or (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and KbdKeyPressed) 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 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

126 
if Ammo^[i, 0].Count > 0 then 
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; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

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

136 
l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

137 

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

138 
if l >= 0 then 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

140 
DrawSprite(sprAMAmmosBW, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

141 
DrawSprite(sprTurnsLeft, x + t * 33 + 51, y + 17, l); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

143 
DrawSprite(sprAMAmmos, x + t * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)); 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

144 

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

145 
if (Slot = i) 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

146 
and (CursorPoint.X >= x + t * 33 + 35) 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

147 
and (CursorPoint.X < x + t * 33 + 68) then 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

149 
if (l < 0) then DrawSprite(sprAMSelection, x + t * 33 + 35, y + 1, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

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

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

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

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

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

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

157 

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

158 
if (Pos >= 0) then 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

159 
if Ammo^[Slot, Pos].Count > 0 then 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

161 
DrawTexture(cScreenWidth div 2  200 + AMxShift, cScreenHeight  68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

162 

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

163 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
2198  164 
DrawTexture(cScreenWidth div 2 + AMxShift  35, cScreenHeight  68, CountTexz[Ammo^[Slot, Pos].Count]); 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

165 

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

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

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

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

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

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

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

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

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

174 
end; 
162  175 

176 
bSelected:= false; 

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

162  180 
procedure MoveCamera; forward; 
181 

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

182 
procedure DrawWater(Alpha: byte); 
1915  183 
var VertexBuffer: array [0..3] of TVertex2f; 
184 
r: TSDL_Rect; 

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

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

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

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

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

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

191 

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

192 
lw:= cScreenWidth / cScaleFactor; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

193 
lh:= cScreenHeight * 2 / cScaleFactor; 
1915  194 
// Water 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

195 
r.y:= WorldDy + cWaterLine + 16; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

196 
if r.y < cScreenHeight * 2 / cScaleFactor then 
1915  197 
begin 
198 
if r.y < 0 then r.y:= 0; 

199 

200 
glDisable(GL_TEXTURE_2D); 

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

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

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

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

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

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

208 
VertexBuffer[3].Y:= lh; 
1915  209 

210 
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

211 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 
1915  212 

213 
glEnableClientState(GL_VERTEX_ARRAY); 

214 
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

215 

1915  216 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
217 

2330  218 
glDisableClientState(GL_VERTEX_ARRAY); 
1915  219 
glDisableClientState(GL_COLOR_ARRAY); 
220 

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

222 
glEnable(GL_TEXTURE_2D) 

223 
end 

224 
end; 

225 

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

227 
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

228 
lw, waves: GLfloat; 
2288  229 
begin 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

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

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

232 

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

233 
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

234 

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

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

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

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

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

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

240 
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

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

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

243 

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

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

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

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

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

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

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

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

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

252 

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

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

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

255 

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

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

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

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

259 

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

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

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

262 

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 
{for i:= 1 to cWaterSprCount do 
2288  265 
DrawSprite(sprWater, 
266 
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth)  (cScreenWidth div 2), 

267 
cWaterLine + WorldDy + dY, 

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

268 
0)} 
2288  269 
end; 
270 

956  271 
procedure DrawWorld(Lag: LongInt); 
371  272 
var i, t: LongInt; 
4  273 
r: TSDL_Rect; 
107  274 
tdx, tdy: Double; 
175  275 
grp: TCapGroup; 
174  276 
s: string[15]; 
80  277 

371  278 
procedure DrawRepeated(spr: TSprite; Shift: LongInt); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

279 
var i, w, sw: LongInt; 
80  280 
begin 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

281 
sw:= round(cScreenWidth / cScaleFactor); 
80  282 
w:= SpritesData[spr].Width; 
82  283 
i:= Shift mod w; 
80  284 
if i > 0 then dec(i, w); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

285 
dec(i, sw); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

286 
//addfilelog(inttostr(sw)); 
80  287 
repeat 
1760  288 
DrawSprite(spr, i, WorldDy + LAND_HEIGHT  SpritesData[spr].Height, 0); 
80  289 
inc(i, w) 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

290 
until i > sw 
80  291 
end; 
292 

4  293 
begin 
770  294 
// Sky 
756  295 
glClear(GL_COLOR_BUFFER_BIT); 
296 
glEnable(GL_BLEND); 

775  297 
glEnable(GL_TEXTURE_2D); 
777  298 
//glPushMatrix; 
299 
//glScalef(1.0, 1.0, 1.0); 

756  300 

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

301 
if not isPaused then MoveCamera; 
162  302 

1812  303 
if not cReducedQuality then 
304 
begin 

305 
// background 

306 
DrawRepeated(sprSky, WorldDx * 3 div 8); 

307 
DrawRepeated(sprHorizont, WorldDx * 3 div 5); 

4  308 

1812  309 
DrawVisualGears(0); 
2288  310 
end; 
803  311 

2288  312 
// Waves 
313 
DrawWaves( 1, 0,  (cWaveHeight * 2)); 

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

1812  315 

4  316 

762  317 
DrawLand(WorldDx, WorldDy); 
1911  318 

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

319 
DrawWater(255); 
4  320 

1660  321 
// Attack bar 
322 
if CurrentTeam <> nil then 

323 
case AttackBar of 

324 
(* 1: begin 

325 
r:= StuffPoz[sPowerBar]; 

326 
{$WARNINGS OFF} 

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

328 
{$WARNINGS ON} 

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

330 
end;*) 

331 
2: with CurrentHedgehog^ do 

332 
begin 

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

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

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

336 
DrawSprite(sprPower, 

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

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

339 
i) 

340 
end 

341 
end; 

342 

956  343 
DrawGears; 
4  344 

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

345 
DrawVisualGears(1); 
1045  346 

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

348 

5  349 
// Waves 
2288  350 
DrawWaves( 1, 25,  cWaveHeight); 
351 
DrawWaves(1, 50,  (cWaveHeight div 2)); 

352 
DrawWaves( 1, 75, 0); 

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

353 

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

354 

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

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

357 
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

358 

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

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

361 

79  362 
// Turn time 
4  363 
if TurnTimeLeft <> 0 then 
364 
begin 

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

366 
if i>99 then t:= 112 

367 
else if i>9 then t:= 96 

368 
else t:= 80; 

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

369 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  48, 1); 
4  370 
while i > 0 do 
371 
begin 

372 
dec(t, 32); 

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

373 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  48, i mod 10); 
4  374 
i:= i div 10 
375 
end; 

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

376 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  48, 0); 
4  377 
end; 
79  378 

4  379 
// Captions 
175  380 
i:= 8; 
381 
for grp:= Low(TCapGroup) to High(TCapGroup) do 

382 
with Captions[grp] do 

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

385 
DrawCentered(0, i, Tex); 
762  386 
inc(i, Tex^.h + 2); 
564  387 
if EndTime <= RealTicks then 
175  388 
begin 
762  389 
FreeTexture(Tex); 
390 
Tex:= nil; 

175  391 
EndTime:= 0 
392 
end 

393 
end; 

4  394 

47  395 
// Teams Healths 
547  396 
for t:= 0 to Pred(TeamsCount) do 
397 
with TeamsArray[t]^ do 

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

399 
DrawTexture( NameTagTex^.w  3, cScreenHeight + DrawHealthY, NameTagTex); 
690  400 

401 
r.x:= 0; 

402 
r.y:= 0; 

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

404 
r.h:= HealthTex^.h; 
690  405 

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

406 
DrawFromRect(0, 
1120  407 
cScreenHeight + DrawHealthY, 
841
0700e3d3474d
Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents:
803
diff
changeset

408 
@r, HealthTex); 
690  409 

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

690  412 

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

413 
DrawFromRect(TeamHealthBarWidth + 2, 
1120  414 
cScreenHeight + DrawHealthY, 
841
0700e3d3474d
Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents:
803
diff
changeset

415 
@r, HealthTex); 
47  416 
end; 
417 

5  418 
// Lag alert 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

419 
if isInLag then DrawSprite(sprLag, 32  cScreenWidth div 2, 32, (RealTicks shr 7) mod 12); 
4  420 

5  421 
// Wind bar 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

422 
DrawSprite(sprWindBar, cScreenWidth div 2  180, cScreenHeight  30, 0); 
6  423 
if WindBarWidth > 0 then 
5  424 
begin 
689  425 
{$WARNINGS OFF} 
426 
r.x:= 8  (RealTicks shr 6) mod 8; 

427 
{$WARNINGS ON} 

428 
r.y:= 0; 

429 
r.w:= WindBarWidth; 

430 
r.h:= 13; 

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

431 
DrawSpriteFromRect(sprWindR, r, cScreenWidth div 2  103, cScreenHeight  28, 13, 0); 
5  432 
end else 
6  433 
if WindBarWidth < 0 then 
5  434 
begin 
689  435 
{$WARNINGS OFF} 
436 
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; 

437 
{$WARNINGS ON} 

438 
r.y:= 0; 

439 
r.w:=  WindBarWidth; 

440 
r.h:= 13; 

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

441 
DrawSpriteFromRect(sprWindL, r, cScreenWidth div 2  106 + WindBarWidth, cScreenHeight  28, 13, 0); 
5  442 
end; 
443 

161  444 
// AmmoMenu 
1120  445 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  446 

2287  447 
// Cursor 
448 
if isCursorVisible and bShowAmmoMenu then 

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

942  450 

2287  451 
DrawChat; 
4  452 

2302  453 
if isPaused then DrawCentered(0, cScreenHeight div 2, PauseTexture); 
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

454 

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

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

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

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

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

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

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

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

464 
s:= inttostr(FPS) + ' fps'; 
759  465 
if fpsTexture <> nil then FreeTexture(fpsTexture); 
466 
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

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

469 
end; 
759  470 
if fpsTexture <> nil then 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

471 
DrawTexture(cScreenWidth div 2  50, 10, fpsTexture); 
4  472 
end; 
174  473 

474 
inc(SoundTimerTicks, Lag); 

475 
if SoundTimerTicks >= 50 then 

476 
begin 

477 
SoundTimerTicks:= 0; 

478 
if cVolumeDelta <> 0 then 

479 
begin 

480 
str(ChangeVolume(cVolumeDelta), s); 

175  481 
AddCaption(Format(trmsg[sidVolume], s), $FFFFFF, capgrpVolume) 
174  482 
end 
756  483 
end; 
484 

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

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

486 

2162  487 
SetScale(zoom); 
1023  488 

2287  489 
// Cursor 
490 
if isCursorVisible then 

491 
begin 

492 
if not bShowAmmoMenu then 

493 
with CurrentHedgehog^ do 

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

495 
begin 

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

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

498 
if PosCount > 1 then 

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

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

501 
i); 

502 
end; 

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

504 
end; 

505 

506 

775  507 
glDisable(GL_TEXTURE_2D); 
756  508 
glDisable(GL_BLEND) 
4  509 
end; 
510 

108  511 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  512 
begin 
2142  513 
//if Group in [capgrpGameState] then WriteLnToConsole(s); 
762  514 
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); 
4  515 

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

518 
case Group of 

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

520 
else 

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

522 
end; 

4  523 
end; 
524 

79  525 
procedure MoveCamera; 
4  526 
const PrevSentPointTime: LongWord = 0; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

527 
var EdgesDist, cw: LongInt; 
4  528 
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

529 

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

530 
cw:= round(cScreenWidth / cScaleFactor); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

531 

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

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

533 
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

534 
{$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

535 
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

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

537 
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

538 
{$ENDIF} 
2162  539 
CursorPoint.X:= CursorPoint.X  cScreenWidth div 2; 
2197  540 
CursorPoint.Y:= cScreenHeight  CursorPoint.Y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

541 
end; 
678  542 

1595
33529f567d2d
Don't set focus on gears when curor is visible (should fix cursor jumping)
unc0rr
parents:
1529
diff
changeset

543 
if (FollowGear <> nil) and (not isCursorVisible) then 
1689  544 
if abs(CursorPoint.X  prevPoint.X) + abs(CursorPoint.Y  prevpoint.Y) > 4 then 
545 
begin 

546 
FollowGear:= nil; 

2197  547 
prevPoint:= CursorPoint; 
1689  548 
exit 
549 
end 

550 
else begin 

2198  551 
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; 
2197  552 
//addcaption(inttostr(CursorPoint.X), $AFAFAF, capgrpGameState); 
553 
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight  (hwRound(FollowGear^.Y) + WorldDy)) div 8; 

1689  554 
end; 
4  555 

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

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

560 
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

561 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  10; 
2197  562 
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; 
563 
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; 

1689  564 
prevPoint:= CursorPoint; 
2197  565 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
1689  566 
exit 
567 
end; 

162  568 

4  569 
if isCursorVisible then 
1689  570 
begin 
2197  571 
if (not CurrentTeam^.ExtDriven) and (GameTicks >= PrevSentPointTime + cSendCursorPosTime) then 
1689  572 
begin 
573 
SendIPCXY('P', CursorPoint.X  WorldDx, CursorPoint.Y  WorldDy); 

574 
PrevSentPointTime:= GameTicks 

575 
end; 

576 
end; 

351  577 

4  578 
if isCursorVisible or (FollowGear <> nil) then 
579 
begin 

284  580 
if isCursorVisible then EdgesDist:= cCursorEdgesDist 
581 
else EdgesDist:= cGearScrEdgesDist; 

2197  582 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 
4  583 
begin 
2197  584 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 
585 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

4  586 
end else 
2197  587 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 
4  588 
begin 
2197  589 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 
2198  590 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 
4  591 
end; 
284  592 
if CursorPoint.Y < EdgesDist then 
4  593 
begin 
2197  594 
WorldDy:= WorldDy + CursorPoint.Y  EdgesDist; 
284  595 
CursorPoint.Y:= EdgesDist 
4  596 
end else 
284  597 
if CursorPoint.Y > cScreenHeight  EdgesDist then 
4  598 
begin 
2197  599 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 
284  600 
CursorPoint.Y:= cScreenHeight  EdgesDist 
4  601 
end; 
602 
end else 

308  603 
if cHasFocus then 
604 
begin 

70  605 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 
2197  606 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 
2162  607 
CursorPoint.X:= 0; 
608 
CursorPoint.Y:= cScreenHeight div 2; 

308  609 
end; 
351  610 

4  611 
prevPoint:= CursorPoint; 
2197  612 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
75  613 
if WorldDy < cScreenHeight  cWaterLine  cVisibleWater then WorldDy:= cScreenHeight  cWaterLine  cVisibleWater; 
1760  614 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

615 
if WorldDx < round(LAND_WIDTH * 2 / cScaleFactor) then WorldDx:= round(LAND_WIDTH * 2 / cScaleFactor); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

616 
if WorldDx > cw then WorldDx:= cw; 
4  617 
end; 
618 

619 
initialization 

620 
FillChar(Captions, sizeof(Captions), 0) 

621 

622 
end. 