author  Xeli 
Thu, 16 Feb 2012 16:02:41 +0100  
changeset 6688  b2084a00a4cf 
parent 6685  ef706fccfb0a 
child 6691  79c96abd06d6 
permissions  rwrr 
4  1 
(* 
1066  2 
* Hedgewars, a free turn based strategy game 
4976  3 
* Copyright (c) 20042011 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"} 
4850  20 
{$IF GLunit = GL}{$DEFINE GLunit:=GL,GLext}{$ENDIF} 
2630  21 

4  22 
unit uWorld; 
23 
interface 

6622  24 
uses SDLh, uGears, uConsts, uFloat, uRandom, uTypes, uRenderUtils; 
3697  25 

3038  26 
procedure initModule; 
27 
procedure freeModule; 

2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

28 

b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

29 
procedure InitWorld; 
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

30 
procedure ResetWorldTex; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

31 

2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

32 
procedure DrawWorld(Lag: LongInt); 
3692  33 
procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); 
2905  34 
procedure ShowMission(caption, subcaption, text: ansistring; icon, time : LongInt); 
2786  35 
procedure HideMission; 
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5862
diff
changeset

36 
procedure ShakeCamera(amount: LongInt); 
5682
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

37 
procedure InitCameraBorders; 
6682  38 
procedure InitTouchInterface; 
6688  39 
procedure animateWidget(widget: POnScreenWidget; fade, showWidget: boolean); 
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3629
diff
changeset

40 
procedure MoveCamera; 
5521  41 
procedure onFocusStateChanged; 
4  42 

43 
implementation 

4359  44 
uses 
45 
uStore, 

46 
uMisc, 

47 
uIO, 

48 
uLocale, 

49 
uSound, 

50 
uAmmos, 

51 
uVisualGears, 

52 
uChat, 

53 
uLandTexture, 

54 
GLunit, 

4374  55 
uVariables, 
4375  56 
uUtils, 
4378  57 
uTextures, 
4380  58 
uRender, 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

59 
uCaptions, 
5521  60 
uCursor, 
6016
85410eef7ba4
disable the followgear vertical offset for small screen devices
koda
parents:
6011
diff
changeset

61 
uCommands, 
85410eef7ba4
disable the followgear vertical offset for small screen devices
koda
parents:
6011
diff
changeset

62 
uMobile 
4359  63 
; 
4  64 

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

65 
var cWaveWidth, cWaveHeight: LongInt; 
6622  66 
AMShiftTargetX, AMShiftTargetY, AMShiftX, AMShiftY, SlotsNum: LongInt; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

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

68 
fpsTexture: PTexture; 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

69 
timeTexture: PTexture; 
6622  70 
MenuSpeedX, MenuSpeedY: LongInt; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

71 
FPS: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

72 
CountTicks: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

73 
SoundTimerTicks: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

74 
prevPoint: TPoint; 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

75 
amSel: TAmmoType = amNothing; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

76 
missionTex: PTexture; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

77 
missionTimer: LongInt; 
4850  78 
stereoDepth: GLfloat; 
3692  79 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

80 
const cStereo_Sky = 0.0500; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

81 
cStereo_Horizon = 0.0250; 
6302
db8bdbb34e03
Spread flakes out over 5 layers now (far back, mid distance, just behind land, just in front of lands and hog, near distance). Spread clouds out over 3 layers (far back, mid distance, just behind land). Add a flatten clouds option, use
nemo
parents:
6296
diff
changeset

82 
cStereo_MidDistance = 0.0175; 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

83 
cStereo_Water_distant = 0.0125; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

84 
cStereo_Land = 0.0075; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

85 
cStereo_Water_near = 0.0025; 
6289
95ffd59d0f4a
Increase rarity of near flakes (don't want them intruding in game much). Also fix stereo. Near flakes were being drawn far.
nemo
parents:
6276
diff
changeset

86 
cStereo_Outside = 0.0400; 
4  87 

6492  88 

89 
// helper functions to create the goal/game mode string 

90 
function AddGoal(s: ansistring; gf: longword; si: TGoalStrId; i: LongInt): ansistring; 

91 
var t: ansistring; 

92 
begin 

93 
if (GameFlags and gf) <> 0 then 

94 
begin 

95 
t:= inttostr(i); 

96 
s:= s + format(trgoal[si], t) + '' 

97 
end; 

98 
AddGoal:= s; 

99 
end; 

100 

101 
function AddGoal(s: ansistring; gf: longword; si: TGoalStrId): ansistring; 

102 
begin 

103 
if (GameFlags and gf) <> 0 then 

104 
s:= s + trgoal[si] + ''; 

105 
AddGoal:= s; 

106 
end; 

107 

4  108 
procedure InitWorld; 
2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

109 
var i, t: LongInt; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

110 
cp: PClan; 
2863  111 
g: ansistring; 
4  112 
begin 
3764  113 
missionTimer:= 0; 
2786  114 

2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

115 
if (GameFlags and gfRandomOrder) <> 0 then // shuffle them up a bit 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

116 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

117 
for i:= 0 to ClansCount * 4 do 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

118 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

119 
t:= GetRandom(ClansCount); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

120 
if t <> 0 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

121 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

122 
cp:= ClansArray[0]; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

123 
ClansArray[0]:= ClansArray[t]; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

124 
ClansArray[t]:= cp; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

125 
ClansArray[t]^.ClanIndex:= t; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

126 
ClansArray[0]^.ClanIndex:= 0; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

127 
if (LocalClan = t) then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

128 
LocalClan:= 0 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

129 
else if (LocalClan = 0) then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

130 
LocalClan:= t 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

131 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

132 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

133 
CurrentTeam:= ClansArray[0]^.Teams[0]; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

134 
end; 
2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

135 

2908  136 
// if special game flags/settings are changed, add them to the game mode notice window and then show it 
2863  137 
g:= ''; // no text/things to note yet 
2908  138 

4883
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4850
diff
changeset

139 
// add custom goals from lua script if there are any 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

140 
if LuaGoals <> '' then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

141 
g:= LuaGoals + ''; 
4883
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4850
diff
changeset

142 

2958  143 
// check different game flags (goals/game modes first for now) 
144 
g:= AddGoal(g, gfKing, gidKing); // king? 

5022
d2a2f6c9b236
some final work and buggfix for Tag Team, it is now playable
Henek
parents:
4976
diff
changeset

145 
g:= AddGoal(g, gfTagTeam, gidTagTeam); // tag team mode? 
2958  146 

147 
// other important flags 

148 
g:= AddGoal(g, gfForts, gidForts); // forts? 

149 
g:= AddGoal(g, gfLowGravity, gidLowGravity); // low gravity? 

150 
g:= AddGoal(g, gfInvulnerable, gidInvulnerable); // invulnerability? 

151 
g:= AddGoal(g, gfVampiric, gidVampiric); // vampirism? 

152 
g:= AddGoal(g, gfKarma, gidKarma); // karma? 

153 
g:= AddGoal(g, gfPlaceHog, gidPlaceHog); // placement? 

154 
g:= AddGoal(g, gfArtillery, gidArtillery); // artillery? 

155 
g:= AddGoal(g, gfSolidLand, gidSolidLand); // solid land? 

156 
g:= AddGoal(g, gfSharedAmmo, gidSharedAmmo); // shared ammo? 

4132  157 
g:= AddGoal(g, gfResetHealth, gidResetHealth); 
158 
g:= AddGoal(g, gfAISurvival, gidAISurvival); 

159 
g:= AddGoal(g, gfInfAttack, gidInfAttack); 

160 
g:= AddGoal(g, gfResetWeps, gidResetWeps); 

161 
g:= AddGoal(g, gfPerHogAmmo, gidPerHogAmmo); 

2958  162 

2908  163 
// modified damage modificator? 
164 
if cDamagePercent <> 100 then 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

165 
g:= AddGoal(g, gfAny, gidDamageModifier, cDamagePercent); 
2908  166 

3107  167 
// fade in 
168 
ScreenFade:= sfFromBlack; 

169 
ScreenFadeValue:= sfMax; 

170 
ScreenFadeSpeed:= 1; 

171 

2908  172 
// modified mine timers? 
4482  173 
if cMinesTime <> 3000 then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

174 
begin 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

175 
if cMinesTime = 0 then 
4003
ca0600ab38bf
disable gfMines and update variable names (landadds > minesnum, cLandAdditions > cLandMines)
koda
parents:
3976
diff
changeset

176 
g:= AddGoal(g, gfAny, gidNoMineTimer) 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

177 
else if cMinesTime < 0 then 
4003
ca0600ab38bf
disable gfMines and update variable names (landadds > minesnum, cLandAdditions > cLandMines)
koda
parents:
3976
diff
changeset

178 
g:= AddGoal(g, gfAny, gidRandomMineTimer) 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

179 
else 
4482  180 
g:= AddGoal(g, gfAny, gidMineTimer, cMinesTime div 1000); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

181 
end; 
2908  182 

2863  183 
// if the string has been set, show it for (default timeframe) seconds 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

184 
if g <> '' then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

185 
ShowMission(trgoal[gidCaption], trgoal[gidSubCaption], g, 1, 0); 
2863  186 

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

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

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

190 

5682
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

191 
InitCameraBorders(); 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

192 
uCursor.init(); 
2197  193 
prevPoint.X:= 0; 
74  194 
prevPoint.Y:= cScreenHeight div 2; 
6609  195 
WorldDx:= (LAND_WIDTH div 2) + cScreenWidth div 2; 
196 
WorldDy:= (LAND_HEIGHT  (playHeight div 2)) + (cScreenHeight div 2); 

197 

198 
//aligns it to the bottom of the screen, minus the border 

199 
SkyOffset:= 0; 

200 
HorizontOffset:= 0; 

201 

6682  202 
InitTouchInterface(); 
203 
end; 

204 

205 
procedure InitCameraBorders; 

206 
begin 

207 
cGearScrEdgesDist:= min(2 * cScreenHeight div 5, 2 * cScreenWidth div 5); 

208 
end; 

209 

210 
procedure InitTouchInterface; 

211 
begin 

6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

212 
{$IFDEF USE_TOUCH_INTERFACE} 
6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

213 
//positioning of the buttons 
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

214 
buttonScale:= 1.5/cDefaultZoomLevel; 
6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

215 

75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

216 
//TODO: add sensible hOffset and vOffset values 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

217 
firebutton.x:= (cScreenWidth shr 1)  Round(spritesData[sprFireButton].Texture^.h * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

218 
firebutton.y:= Round(spritesData[sprFireButton].Texture^.h* buttonScale) + cScreenHeight; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

219 
firebutton.width:= Round(spritesData[sprFireButton].Texture^.w * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

220 
firebutton.height:= Round(spritesData[sprFireButton].Texture^.h * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

221 
firebutton.hOffset:= 0; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

222 
firebutton.vOffset:= 0; 
6688  223 
firebutton.sprite:= sprFireButton; 
224 
firebutton.show:= true; 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

225 

6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

226 
backjump.x:= (cScreenWidth shr 1)  Round(spritesData[sprbackjump].Texture^.h * 2 * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

227 
backjump.y:= Round(spritesData[sprbackjump].Texture^.h * 1.2 * buttonScale) + cScreenHeight; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

228 
backjump.width:= Round(spritesData[sprbackjump].Texture^.w * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

229 
backjump.height:= Round(spritesData[sprbackjump].Texture^.h * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

230 
backjump.hOffset:= 0; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

231 
backjump.vOffset:= 0; 
6688  232 
backjump.sprite:= sprbackjump; 
233 
backjump.show:= true; 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

234 

6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

235 
forwardjump.x:= (cScreenWidth shr 1)  Round(spritesData[sprforwardjump].Texture^.h * 1.2 * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

236 
forwardjump.y:= Round(spritesData[sprforwardjump].Texture^.h * 2 * buttonScale) + cScreenHeight; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

237 
forwardjump.width:= Round(spritesData[sprforwardjump].Texture^.w * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

238 
forwardjump.height:= Round(spritesData[sprforwardjump].Texture^.h * buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

239 
forwardjump.hOffset:= 0; 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

240 
forwardjump.vOffset:= 0; 
6688  241 
forwardjump.sprite:= sprforwardjump; 
242 
forwardjump.show:= true; 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

243 

6688  244 
with arrowLeft do 
245 
begin 

246 
show:= true; 

247 
sprite:= sprArrowLeft; 

248 
x:= (cScreenWidth shr 1); 

249 
y:= Round(spritesData[sprite].Texture^.h*buttonScale) + cScreenHeight  Round(spritesData[sprite].Texture^.h*buttonScale); 

250 
width:= Round(spritesData[sprite].Texture^.h * buttonScale); 

251 
height:= Round(spritesData[sprite].Texture^.h * buttonScale); 

252 
hOffset:= 0; 

253 
vOffset:= 0; 

254 
end; 

255 
with arrowRight do 

256 
begin 

257 
show:= true; 

258 
sprite:= sprArrowRight; 

259 
x:= (cScreenWidth shr 1)+ Round(spritesData[sprite].Texture^.h * buttonScale); 

260 
y:= Round(spritesData[sprite].Texture^.h*buttonScale) + cScreenHeight  Round(spritesData[sprite].Texture^.h*buttonScale); 

261 
width:= Round(spritesData[sprite].Texture^.w * buttonScale); 

262 
height:= Round(spritesData[sprite].Texture^.h * buttonScale); 

263 
hOffset:= 0; 

264 
vOffset:= 0; 

265 
with moveAnim do 

266 
begin 

267 
targetToX:= arrowRight.x; 

268 
targetToY:= arrowRight.y; 

269 
targetFromX:= arrowRight.x + Round(spritesData[sprArrowUp].Texture^.h * buttonScale); 

270 
targetFromY:= arrowRight.y; 

271 
end; 

272 
end; 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

273 

6688  274 
with arrowUp do 
275 
begin 

276 
show:= false; 

277 
sprite:= sprArrowUp; 

278 
x:= (cScreenWidth shr 1) + Round(spritesData[sprite].Texture^.h * buttonScale); 

279 
y:= arrowRight.y; 

280 
width:= Round(spritesData[sprite].Texture^.w * buttonScale); 

281 
height:= Round(spritesData[sprite].Texture^.h * buttonScale); 

282 
hOffset:= 0; 

283 
vOffset:= 0; 

284 
with moveAnim do 

285 
begin 

286 
targetToX:= arrowUp.x; 

287 
targetToY:= arrowUp.y; 

288 
targetFromX:= arrowUp.x; 

289 
targetFromY:= Round(spritesData[sprite].Texture^.h*buttonScale) + cScreenHeight  Round(spritesData[sprite].Texture^.h*buttonScale*2); 

290 
end; 

291 
end; 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

292 

6688  293 
with arrowDown do 
294 
begin 

295 
show:= false; 

296 
sprite:= sprArrowDown; 

297 
x:= (cScreenWidth shr 1) + Round(spritesData[sprArrowUp].Texture^.h * buttonScale); 

298 
y:= arrowRight.y; 

299 
width:= Round(spritesData[sprArrowDown].Texture^.w * buttonScale); 

300 
height:= Round(spritesData[sprArrowDown].Texture^.h * buttonScale); 

301 
hOffset:= 0; 

302 
vOffset:= 0; 

303 
with moveAnim do 

304 
begin 

305 
targetToX:= arrowDown.x; 

306 
targetToY:= arrowDown.y; 

307 
targetFromX:= arrowDown.x; 

308 
targetFromY:= Round(spritesData[sprArrowDown].Texture^.h*buttonscale) + cScreenHeight; 

309 
end; 

310 
end; 

6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

311 

ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

312 
pauseButton.x:= cScreenWidth div 2  Round(spritesData[sprPauseButton].Texture^.w * buttonscale); 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

313 
pauseButton.y:= 0; //Round(spritesData[sprPauseButton].Texture^.h * buttonscale); 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

314 
pauseButton.width:= Round(spritesData[sprPauseButton].Texture^.w * buttonScale);; 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

315 
pauseButton.height:= Round(spritesData[sprPauseButton].Texture^.h * buttonScale);; 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

316 
pauseButton.hOffset:= 0; 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

317 
pauseButton.vOffset:= 0; 
6688  318 
pauseButton.sprite:= sprPauseButton; 
319 
pauseButton.show:= true; 

6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

320 

6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

321 
{$ENDIF} 
161  322 
end; 
323 

6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

324 
// for uStore texture resetting 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

325 
procedure ResetWorldTex; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

326 
begin 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

327 
FreeTexture(fpsTexture); 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

328 
fpsTexture:= nil; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

329 
FreeTexture(timeTexture); 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

330 
timeTexture:= nil; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

331 
FreeTexture(missionTex); 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

332 
missionTex:= nil; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

333 
end; 
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6380
diff
changeset

334 

6622  335 
function GetAmmoMenuTexture(Ammo: PHHAmmo): PTexture; 
3434  336 
const BORDERSIZE = 2; 
6622  337 
var x, y, i, t, SlotsNumY, SlotsNumX, AMFrame: LongInt; 
338 
STurns: LongInt; 

339 
amSurface: PSDL_Surface; 

340 
AMRect: TSDL_Rect; 

161  341 
begin 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

342 
SlotsNum:= 0; 
6606
fb6163ff4ebf
changed the ammomenu to be landscape for MOBILE, also tweaked the positions a bit, needs testing on iOS
Xeli
parents:
6603
diff
changeset

343 
for i:= 0 to cMaxSlotIndex do 
fb6163ff4ebf
changed the ammomenu to be landscape for MOBILE, also tweaked the positions a bit, needs testing on iOS
Xeli
parents:
6603
diff
changeset

344 
if((i = 0) and (Ammo^[i,1].Count > 0)) or ((i <> 0) and (Ammo^[i,0].Count > 0)) then 
fb6163ff4ebf
changed the ammomenu to be landscape for MOBILE, also tweaked the positions a bit, needs testing on iOS
Xeli
parents:
6603
diff
changeset

345 
inc(SlotsNum); 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

346 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  347 
SlotsNumX:= SlotsNum; 
348 
SlotsNumY:= cMaxSlotAmmoIndex + 2; 

349 
{$ELSE} 

350 
SlotsNumX:= cMaxSlotAmmoIndex + 1; 

351 
SlotsNumY:= SlotsNum + 1; 

352 
{$ENDIF} 

6606
fb6163ff4ebf
changed the ammomenu to be landscape for MOBILE, also tweaked the positions a bit, needs testing on iOS
Xeli
parents:
6603
diff
changeset

353 

6631  354 
AmmoRect.w:= (BORDERSIZE*2) + (SlotsNumX * AMSlotSize) + (SlotsNumX1); 
355 
AmmoRect.h:= (BORDERSIZE*2) + (SlotsNumY * AMSlotSize) + (SlotsNumY1); 

356 
amSurface := SDL_CreateRGBSurface(SDL_SWSURFACE, AmmoRect.w, AmmoRect.h, 32, RMask, GMask, BMask, AMask); 

6622  357 

358 
AMRect.x:= BORDERSIZE; 

359 
AMRect.y:= BORDERSIZE; 

6631  360 
AMRect.w:= AmmoRect.w  (BORDERSIZE*2); 
361 
AMRect.h:= AmmoRect.h  (BORDERSIZE*2); 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

362 

6622  363 
SDL_FillRect(amSurface, @AMRect, SDL_MapRGB(amSurface^.format, 0,0,0)); 
364 

6650
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

365 
x:= AMRect.x; 
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

366 
y:= AMRect.y; 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

367 
for i:= 0 to cMaxSlotIndex do 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

368 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 
3434  369 
begin 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

370 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6650
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

371 
y:= AMRect.y; 
6622  372 
{$ELSE} 
6650
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

373 
x:= AMRect.x; 
6622  374 
{$ENDIF} 
6606
fb6163ff4ebf
changed the ammomenu to be landscape for MOBILE, also tweaked the positions a bit, needs testing on iOS
Xeli
parents:
6603
diff
changeset

375 
for t:=0 to cMaxSlotAmmoIndex do 
3434  376 
begin 
6622  377 
if (Ammo^[i, t].Count > 0) and (Ammo^[i, t].AmmoType <> amNothing) then 
3434  378 
begin 
6622  379 
STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 
380 
AMFrame:= LongInt(Ammo^[i,t].AmmoType)  1; 

381 
if STurns >= 0 then //weapon not usable yet, draw grayed out with turns remaining 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

382 
begin 
6650
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

383 
DrawSprite2Surf(sprAMAmmosBW, amSurface, x + AMSlotPadding, 
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

384 
y + AMSlotPadding, AMFrame); 
6622  385 
if STurns < 100 then 
386 
DrawSprite2Surf(sprTurnsLeft, amSurface, 

387 
x + AMSlotSize16, 

388 
y + AMSlotSize + 1  16, STurns); 

389 
end 

390 
else //draw colored version 

391 
begin 

6650
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

392 
DrawSprite2Surf(sprAMAmmos, amSurface, x + AMSlotPadding, 
56a0b7bf6c15
fixed the blackpixel in the ammomenu, x,y in GetAmmoMenuTexture now initialized correctly
Xeli
parents:
6648
diff
changeset

393 
y + AMSlotPadding, AMFrame); 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

394 
end; 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

395 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  396 
inc(y, AMSlotSize + 1); //the plus one is for the border 
397 
{$ELSE} 

398 
inc(x, AMSlotSize + 1); 

399 
{$ENDIF} 

400 
end; 

401 
end; 

6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

402 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  403 
inc(x, AMSlotSize + 1); 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

404 
{$ELSE} 
6622  405 
inc(y, AMSlotSize + 1); 
406 
{$ENDIF} 

407 
end; 

408 

409 
for i:= 1 to SlotsNumX 1 do 

6652  410 
DrawLine2Surf(amSurface, i * (AMSlotSize+1)+1, BORDERSIZE, i * (AMSlotSize+1)+1, AMRect.h + BORDERSIZE  AMSlotSize  2,160,160,160); 
6622  411 
for i:= 1 to SlotsNumY 1 do 
6652  412 
DrawLine2Surf(amSurface, BORDERSIZE, i * (AMSlotSize+1)+1, AMRect.w + BORDERSIZE, i * (AMSlotSize+1)+1,160,160,160); 
6622  413 

414 
//draw outer border 

415 
DrawSprite2Surf(sprAMCorners, amSurface, 0 , 0 , 0); 

416 
DrawSprite2Surf(sprAMCorners, amSurface, AMRect.w + BORDERSIZE, AMRect.y , 1); 

417 
DrawSprite2Surf(sprAMCorners, amSurface, AMRect.x , AMRect.h + BORDERSIZE, 2); 

418 
DrawSprite2Surf(sprAMCorners, amSurface, AMRect.w + BORDERSIZE, AMRect.h + BORDERSIZE, 3); 

419 

420 
for i:=0 to BORDERSIZE1 do 

421 
begin 

422 
DrawLine2Surf(amSurface, BORDERSIZE, i, AMRect.w + BORDERSIZE, i,160,160,160);//top 

423 
DrawLine2Surf(amSurface, BORDERSIZE, AMRect.h+BORDERSIZE+i, AMRect.w + BORDERSIZE, AMRect.h+BORDERSIZE+i,160,160,160);//bottom 

424 
DrawLine2Surf(amSurface, i, BORDERSIZE, i, AMRect.h + BORDERSIZE,160,160,160);//left 

425 
DrawLine2Surf(amSurface, AMRect.w+BORDERSIZE+i, BORDERSIZE, AMRect.w + BORDERSIZE+i, AMRect.h + BORDERSIZE, 160,160,160);//right 

426 
end; 

427 

428 
GetAmmoMenuTexture:= Surface2Tex(amSurface, false); 

429 
if amSurface <> nil then SDL_FreeSurface(amSurface); 

430 
end; 

431 

432 
procedure ShowAmmoMenu; 

433 
const BORDERSIZE = 2; 

434 
MENUSPEED = 15; 

435 
var Slot, Pos: LongInt; 

436 
Ammo: PHHAmmo; 

6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

437 
c,i,g,t,STurns: LongInt; 
6622  438 
begin 
439 
if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) 

440 
or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then 

441 
bShowAmmoMenu:= false; 

442 

443 

444 
// give the assigned ammo to hedgehog 

445 
Ammo:= nil; 

446 
if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) 

447 
and (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then 

448 
Ammo:= CurrentHedgehog^.Ammo 

449 
else if (LocalAmmo <> 1) then 

450 
Ammo:= GetAmmoByNum(LocalAmmo); 

451 
Pos:= 1; 

452 
if Ammo = nil then 

453 
begin 

454 
bShowAmmoMenu:= false; 

455 
exit 

456 
end; 

457 

458 
//Init the menu 

459 
if(AmmoMenuInvalidated) then 

460 
begin 

461 
AmmoMenuInvalidated:= false; 

462 
FreeTexture(AmmoMenuTex); 

463 
AmmoMenuTex:= GetAmmoMenuTexture(Ammo); 

3697  464 

6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

465 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  466 
if isPhone() then 
467 
begin 

468 
AmmoRect.x:= (AmmoRect.w shr 1); 

469 
AmmoRect.y:= (cScreenHeight shr 1)  (AmmoRect.h shr 1); 

470 
end 

471 
else 

472 
begin 

473 
AmmoRect.x:= (AmmoRect.w shr 1); 

474 
AmmoRect.y:= cScreenHeight  (AmmoRect.h + AMSlotSize); 

475 
end; 

476 
{$ELSE} 

477 
AmmoRect.x:= (cScreenWidth shr 1)  AmmoRect.w  AMSlotSize; 

478 
AmmoRect.y:= cScreenHeight  (AmmoRect.h + AMSlotSize); 

479 
{$ENDIF} 

480 
AMShiftTargetX:= (cScreenWidth shr 1)  AmmoRect.x; 

481 
AMShiftTargetY:= cScreenHeight  AmmoRect.y; 

482 
AMShiftX:= AMShiftTargetX; 

483 
AMShiftY:= AMShiftTargetY; 

484 

485 
if (AMShiftTargetX div MENUSPEED) < (AMShiftTargetY div MENUSPEED) then 

486 
begin 

487 
MenuSpeedX:= MENUSPEED; 

488 
MenuSpeedY:= AMShiftTargetY div (AMShiftTargetX div MENUSPEED); 

489 
end 

490 
else 

491 
begin 

492 
MenuSpeedX:= AMShiftTargetX div (AMShiftTargetY div MENUSPEED); 

493 
MenuSpeedY:= MENUSPEED; 

494 
end; 

495 
end; 

496 

497 
if bShowAmmoMenu then // show ammo menu 

498 
begin 

499 
FollowGear:= nil; 

500 
if (cReducedQuality and rqSlowMenu) <> 0 then 

501 
begin 

502 
AMShiftX:= 0; 

503 
AMShiftY:= 0; 

504 
end 

505 
else 

506 
if (AMShiftX <> 0) or (AMShiftY <> 0) then 

507 
begin 

508 
dec(AMShiftX, MenuSpeedX); 

509 
if AMShiftX < 0 then AMShiftX:= 0; 

510 
dec(AMShiftY, MenuSpeedY); 

511 
if AMShiftY < 0 then AMShiftY:= 0; 

6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

512 
if (AMShiftX = 0) and (AMShiftY = 0) then 
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

513 
begin 
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

514 
CursorPoint.X:= AmmoRect.x + AmmoRect.w; 
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

515 
CursorPoint.Y:= AmmoRect.y; 
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

516 
end; 
6622  517 
end 
518 
end 

519 
else // hide ammo menu 

520 
begin 

521 
if (AMShiftX = AMShiftTargetX) and (AMShiftY = AMShiftTargetY) then 

522 
begin 

523 
prevPoint:= CursorPoint; 

524 
end; 

525 
if (cReducedQuality and rqSlowMenu) <> 0 then 

526 
begin 

527 
AMShiftX:= AMShiftTargetX; 

528 
AMShiftY:= AMShiftTargetY; 

529 
end 

530 
else 

531 
if (AMShiftX <> AMShiftTargetX) or (AMShiftY <> AMShiftTargetY) then 

532 
begin 

533 
inc(AMShiftX, MenuSpeedX); 

534 
if AMShiftX > AMShiftTargetX then AMShiftX:= AMShiftTargetX; 

535 
inc(AMShiftY, MenuSpeedY); 

536 
if AMShiftY> AMShiftTargetY then AMShiftY:= AMShiftTargetY; 

537 
end 

538 
end; 

539 

540 
DrawTexture(AmmoRect.x + AMShiftX, AmmoRect.y + AMShiftY, AmmoMenuTex); 

541 

542 
Pos:= 1; 

543 
Slot:= 1; 

6631  544 
c:= 1; 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

545 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  546 
for i:= 0 to cMaxSlotIndex do 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

547 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

548 
begin 
6631  549 
inc(c); 
6622  550 
g:= 0; 
551 
for t:=0 to cMaxSlotAmmoIndex do 

552 
if (Ammo^[i, t].Count > 0) and (Ammo^[i, t].AmmoType <> amNothing) then 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

553 
begin 
6622  554 
if (CursorPoint.Y <= (cScreenHeight  AmmoRect.y)  ( g * (AMSlotSize+1))) and 
555 
(CursorPoint.Y >= (cScreenHeight  AmmoRect.y)  ((g+1) * (AMSlotSize+1))) and 

6631  556 
(CursorPoint.X >= AmmoRect.x + ( c * (AMSlotSize+1))) and 
557 
(CursorPoint.X <= AmmoRect.x + ((c+1) * (AMSlotSize+1))) then 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

558 
begin 
6622  559 
Slot:= i; 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

560 
Pos:= t; 
6622  561 
STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 
562 
if (STurns < 0) and (AMShiftX = 0) and (AMShiftY = 0) then 

563 
DrawSprite(sprAMSlot, 

6645
9ff40cf44827
Fixes slot sprite and ammo sprites overlapping left side border. There is still the issue that boxes should be 32px between borders, but right now they are 33px on all but the first row (since the outside border overlaps it by 1px) causing the slot sprite to have 2px of border on the left and 1px of border on the right.
nemo
parents:
6644
diff
changeset

564 
AmmoRect.x + BORDERSIZE + (c * (AMSlotSize+1)) + AMSlotPadding, 
6622  565 
AmmoRect.y + BORDERSIZE + (g * (AMSlotSize+1)) + AMSlotPadding 1, 0); 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

566 
end; 
6622  567 
inc(g); 
568 
end; 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

569 
end; 
6622  570 
{$ELSE} 
571 
for i:= 0 to cMaxSlotIndex do 

572 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 

573 
begin 

6631  574 
inc(c); 
6622  575 
g:= 0; 
576 
for t:=0 to cMaxSlotAmmoIndex do 

577 
if (Ammo^[i, t].Count > 0) and (Ammo^[i, t].AmmoType <> amNothing) then 

578 
begin 

6631  579 
if (CursorPoint.Y <= (cScreenHeight  AmmoRect.y)  ( c * (AMSlotSize+1))) and 
580 
(CursorPoint.Y >= (cScreenHeight  AmmoRect.y)  ((c+1) * (AMSlotSize+1))) and 

6622  581 
(CursorPoint.X >= AmmoRect.x + ( g * (AMSlotSize+1))) and 
582 
(CursorPoint.X <= AmmoRect.x + ((g+1) * (AMSlotSize+1))) then 

583 
begin 

584 
Slot:= i; 

585 
Pos:= t; 

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

587 
if (STurns < 0) and (AMShiftX = 0) and (AMShiftY = 0) then 

588 
DrawSprite(sprAMSlot, 

6645
9ff40cf44827
Fixes slot sprite and ammo sprites overlapping left side border. There is still the issue that boxes should be 32px between borders, but right now they are 33px on all but the first row (since the outside border overlaps it by 1px) causing the slot sprite to have 2px of border on the left and 1px of border on the right.
nemo
parents:
6644
diff
changeset

589 
AmmoRect.x + BORDERSIZE + (g * (AMSlotSize+1)) + AMSlotPadding, 
6631  590 
AmmoRect.y + BORDERSIZE + (c * (AMSlotSize+1)) + AMSlotPadding 1, 0); 
6622  591 
end; 
592 
inc(g); 

593 
end; 

594 
end; 

3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

595 
{$ENDIF} 
6622  596 
if (Pos >= 0) and (Pos <= cMaxSlotAmmoIndex) and (Slot >= 0) and (Slot <= cMaxSlotIndex)then 
3967  597 
begin 
6622  598 
if (AMShiftX = 0) and (AMShiftY = 0) then 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

599 
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

600 
begin 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

601 
if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

602 
begin 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

603 
amSel:= Ammo^[Slot, Pos].AmmoType; 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

604 
RenderWeaponTooltip(amSel) 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

605 
end; 
3697  606 

6622  607 
DrawTexture(AmmoRect.x + (AMSlotSize shr 1), 
608 
AmmoRect.y + AmmoRect.h  BORDERSIZE  (AMSlotSize shr 1)  (Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex^.h shr 1), 

6608  609 
Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

610 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
6622  611 
DrawTexture(AmmoRect.x + AmmoRect.w  20  (CountTexz[Ammo^[Slot, Pos].Count]^.w), 
612 
AmmoRect.y + AmmoRect.h  BORDERSIZE  (AMslotSize shr 1)  (CountTexz[Ammo^[Slot, Pos].Count]^.w shr 1), 

6608  613 
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

614 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

615 
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber < 0) then 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

616 
begin 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

617 
bShowAmmoMenu:= false; 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

618 
SetWeapon(Ammo^[Slot, Pos].AmmoType); 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

619 
bSelected:= false; 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

620 
FreeWeaponTooltip; 
6688  621 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

622 
exit 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

623 
end; 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

624 
end 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

625 
end 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

626 
else 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

627 
FreeWeaponTooltip; 
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

628 

6622  629 
if (WeaponTooltipTex <> nil) and (AMShiftX = 0) and (AMShiftY = 0) then 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

630 
{$IFDEF USE_LANDSCAPE_AMMOMENU} 
6622  631 
if not isPhone() then 
632 
ShowWeaponTooltip(WeaponTooltipTex^.w div 2, AmmoRect.y  WeaponTooltipTex^.h  AMSlotSize); 

3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

633 
{$ELSE} 
6622  634 
ShowWeaponTooltip(AmmoRect.x  WeaponTooltipTex^.w  3, Min(AmmoRect.y + 1, cScreenHeight  WeaponTooltipTex^.h  40)); 
3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

635 
{$ENDIF} 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

636 

6276
1e2f8da1860a
while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents:
6250
diff
changeset

637 
bSelected:= false; 
6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

638 
{$IFNDEF USE_LANDSCAPE_AMMOMENU} 
6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

639 
if (AMShiftX = 0) and (AMShiftY = 0) then 
6622  640 
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8); 
6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6647
diff
changeset

641 
{$ENDIF} 
4  642 
end; 
643 

3104  644 
procedure DrawWater(Alpha: byte; OffsetY: LongInt); 
1915  645 
var VertexBuffer: array [0..3] of TVertex2f; 
646 
r: TSDL_Rect; 

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

647 
lw, lh: GLfloat; 
1915  648 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

649 
if SuddenDeathDmg then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

650 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

651 
SDWaterColorArray[0].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

652 
SDWaterColorArray[1].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

653 
SDWaterColorArray[2].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

654 
SDWaterColorArray[3].a := Alpha 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

655 
end 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

656 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

657 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

658 
WaterColorArray[0].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

659 
WaterColorArray[1].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

660 
WaterColorArray[2].a := Alpha; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

661 
WaterColorArray[3].a := Alpha 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

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

663 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

664 
lw:= cScreenWidth / cScaleFactor; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

665 
lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; 
3697  666 

3405  667 
// Water 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

668 
r.y:= OffsetY + WorldDy + cWaterLine; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

669 
if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

670 
begin 
3405  671 
if r.y < 0 then 
672 
r.y:= 0; 

1915  673 

3405  674 
glDisable(GL_TEXTURE_2D); 
675 
VertexBuffer[0].X:= lw; 

676 
VertexBuffer[0].Y:= r.y; 

677 
VertexBuffer[1].X:= lw; 

678 
VertexBuffer[1].Y:= r.y; 

679 
VertexBuffer[2].X:= lw; 

680 
VertexBuffer[2].Y:= lh; 

681 
VertexBuffer[3].X:= lw; 

682 
VertexBuffer[3].Y:= lh; 

1915  683 

3641  684 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
685 
glEnableClientState(GL_COLOR_ARRAY); 

4748  686 
if SuddenDeathDmg then 
687 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @SDWaterColorArray[0]) 

688 
else 

689 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 

1915  690 

3405  691 
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

692 

3405  693 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
1915  694 

3405  695 
glDisableClientState(GL_COLOR_ARRAY); 
3641  696 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
3407  697 
glColor4ub($FF, $FF, $FF, $FF); // must not be Tint() as color array seems to stay active and color reset is required 
3405  698 
glEnable(GL_TEXTURE_2D); 
699 
end; 

1915  700 
end; 
701 

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

703 
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

704 
lw, waves, shift: GLfloat; 
4748  705 
sprite: TSprite; 
2288  706 
begin 
4748  707 
if SuddenDeathDmg then 
708 
sprite:= sprSDWater 

709 
else 

710 
sprite:= sprWater; 

711 

712 
cWaveWidth:= SpritesData[sprite].Width; 

713 

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

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

716 

4748  717 
if SuddenDeathDmg then 
718 
Tint(LongInt(tnt) * SDWaterColorArray[2].r div 255 + 255  tnt, 

719 
LongInt(tnt) * SDWaterColorArray[2].g div 255 + 255  tnt, 

720 
LongInt(tnt) * SDWaterColorArray[2].b div 255 + 255  tnt, 

721 
255 

722 
) 

723 
else 

724 
Tint(LongInt(tnt) * WaterColorArray[2].r div 255 + 255  tnt, 

725 
LongInt(tnt) * WaterColorArray[2].g div 255 + 255  tnt, 

726 
LongInt(tnt) * WaterColorArray[2].b div 255 + 255  tnt, 

727 
255 

728 
); 

3089  729 

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

731 

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

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

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

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

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

736 
VertexBuffer[2].X:= lw; 
4748  737 
VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprite].Height; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

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

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

740 

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

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

744 
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

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

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

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

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

750 

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

751 

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

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

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

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

755 

3390  756 
Tint($FF, $FF, $FF, $FF); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

757 

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

758 
{for i:= 1 to cWaterSprCount do 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

759 
DrawSprite(sprWater, 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

760 
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth)  (cScreenWidth div 2), 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

761 
cWaterLine + WorldDy + dY, 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

762 
0)} 
2288  763 
end; 
764 

3089  765 
procedure DrawRepeated(spr, sprL, sprR: TSprite; Shift, OffsetY: LongInt); 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

766 
var i, w, h, lw, lh, rw, rh, sw: LongInt; 
2426  767 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

768 
sw:= round(cScreenWidth / cScaleFactor); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

769 
if (SpritesData[sprL].Texture = nil) and (SpritesData[spr].Texture <> nil) then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

770 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

771 
w:= SpritesData[spr].Width * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

772 
h:= SpritesData[spr].Height * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

773 
i:= Shift mod w; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

774 
if i > 0 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

775 
dec(i, w); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

776 
dec(i, w * (sw div w + 1)); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

777 
repeat 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

778 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  h, SpritesData[spr].Texture, SpritesData[spr].Texture^.Scale); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

779 
inc(i, w) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

780 
until i > sw 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

781 
end 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

782 
else if SpritesData[spr].Texture <> nil then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

783 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

784 
w:= SpritesData[spr].Width * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

785 
h:= SpritesData[spr].Height * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

786 
lw:= SpritesData[sprL].Width * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

787 
lh:= SpritesData[sprL].Height * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

788 
if SpritesData[sprR].Texture <> nil then 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

789 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

790 
rw:= SpritesData[sprR].Width * SpritesData[spr].Texture^.Scale; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

791 
rh:= SpritesData[sprR].Height * SpritesData[spr].Texture^.Scale 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

792 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

793 
dec(Shift, w div 2); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

794 
DrawTexture(Shift, WorldDy + LAND_HEIGHT + OffsetY  h, SpritesData[spr].Texture, SpritesData[spr].Texture^.Scale); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

795 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

796 
i:= Shift  lw; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

797 
while i >= sw  lw do 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

798 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

799 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  lh, SpritesData[sprL].Texture, SpritesData[sprL].Texture^.Scale); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

800 
dec(i, lw); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

801 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

802 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

803 
i:= Shift + w; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

804 
if SpritesData[sprR].Texture <> nil then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

805 
while i <= sw do 
6135
2172330ad52a
Use SkyL if SkyR is not included. Saves a bit of texture memory and removes some redundant files.
nemo
parents:
6131
diff
changeset

806 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

807 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  rh, SpritesData[sprR].Texture, SpritesData[sprR].Texture^.Scale); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

808 
inc(i, rw) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

809 
end 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

810 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

811 
while i <= sw do 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

812 
begin 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

813 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  lh, SpritesData[sprL].Texture, SpritesData[sprL].Texture^.Scale); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

814 
inc(i, lw) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

815 
end 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

816 
end 
2426  817 
end; 
818 

819 

956  820 
procedure DrawWorld(Lag: LongInt); 
4  821 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

822 
if not isPaused then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

823 
begin 
3523  824 
if ZoomValue < zoom then 
3444  825 
begin 
3523  826 
zoom:= zoom  0.002 * Lag; 
3697  827 
if ZoomValue > zoom then 
3523  828 
zoom:= ZoomValue 
3697  829 
end 
3774  830 
else 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

831 
if ZoomValue > zoom then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

832 
begin 
3523  833 
zoom:= zoom + 0.002 * Lag; 
834 
if ZoomValue < zoom then 

835 
zoom:= ZoomValue 

3611  836 
end 
3444  837 
end 
3611  838 
else 
839 
ZoomValue:= zoom; 

2376  840 

3611  841 
// Sky 
842 
glClear(GL_COLOR_BUFFER_BIT); 

843 
//glPushMatrix; 

844 
//glScalef(1.0, 1.0, 1.0); 

756  845 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

846 
if not isPaused then 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

847 
MoveCamera; 
162  848 

3696  849 
if cStereoMode = smNone then 
850 
begin 

3692  851 
glClear(GL_COLOR_BUFFER_BIT); 
852 
DrawWorldStereo(Lag, rmDefault) 

3696  853 
end 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

854 
{$IFNDEF S3D_DISABLED} 
3696  855 
else if (cStereoMode = smAFR) then 
856 
begin 

857 
AFRToggle:= not AFRToggle; 

858 
glClear(GL_COLOR_BUFFER_BIT); 

859 
if AFRToggle then 

860 
DrawWorldStereo(Lag, rmLeftEye) 

861 
else 

862 
DrawWorldStereo(Lag, rmRightEye) 

863 
end 

864 
else if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) then 

865 
begin 

3692  866 
// create left fb 
867 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framel); 

868 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

869 
DrawWorldStereo(Lag, rmLeftEye); 

870 

871 
// create right fb 

872 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framer); 

873 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

874 
DrawWorldStereo(0, rmRightEye); 

875 

876 
// detatch drawing from fbs 

877 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 

878 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

879 
SetScale(cDefaultZoomLevel); 

880 

881 
// draw left frame 

882 
glBindTexture(GL_TEXTURE_2D, texl); 

883 
glBegin(GL_QUADS); 

3696  884 
if cStereoMode = smHorizontal then 
885 
begin 

886 
glTexCoord2f(0.0, 0.0); 

887 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

888 
glTexCoord2f(1.0, 0.0); 

889 
glVertex2d(0, cScreenHeight); 

890 
glTexCoord2f(1.0, 1.0); 

891 
glVertex2d(0, 0); 

892 
glTexCoord2f(0.0, 1.0); 

893 
glVertex2d(cScreenWidth / 2, 0); 

894 
end 

895 
else 

896 
begin 

897 
glTexCoord2f(0.0, 0.0); 

898 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

899 
glTexCoord2f(1.0, 0.0); 

900 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

901 
glTexCoord2f(1.0, 1.0); 

902 
glVertex2d(cScreenWidth / 2, 0); 

903 
glTexCoord2f(0.0, 1.0); 

904 
glVertex2d(cScreenWidth / 2, 0); 

905 
end; 

3692  906 
glEnd(); 
907 

908 
// draw right frame 

909 
glBindTexture(GL_TEXTURE_2D, texr); 

910 
glBegin(GL_QUADS); 

3696  911 
if cStereoMode = smHorizontal then 
912 
begin 

913 
glTexCoord2f(0.0, 0.0); 

914 
glVertex2d(0, cScreenHeight); 

915 
glTexCoord2f(1.0, 0.0); 

916 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

917 
glTexCoord2f(1.0, 1.0); 

918 
glVertex2d(cScreenWidth / 2, 0); 

919 
glTexCoord2f(0.0, 1.0); 

920 
glVertex2d(0, 0); 

921 
end 

922 
else 

923 
begin 

924 
glTexCoord2f(0.0, 0.0); 

925 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

926 
glTexCoord2f(1.0, 0.0); 

927 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

928 
glTexCoord2f(1.0, 1.0); 

929 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

930 
glTexCoord2f(0.0, 1.0); 

931 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

932 
end; 

3692  933 
glEnd(); 
934 
SetScale(zoom); 

3696  935 
end 
936 
else 

937 
begin 

938 
// clear scene 

939 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 

940 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

941 
// draw left eye in red channel only 

942 
if cStereoMode = smGreenRed then 

943 
glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE) 

944 
else if cStereoMode = smBlueRed then 

945 
glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE) 

946 
else if cStereoMode = smCyanRed then 

947 
glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE) 

948 
else 

949 
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); 

950 
DrawWorldStereo(Lag, rmLeftEye); 

951 
// draw right eye in selected channel(s) only 

952 
if cStereoMode = smRedGreen then 

953 
glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE) 

954 
else if cStereoMode = smRedBlue then 

955 
glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE) 

956 
else if cStereoMode = smRedCyan then 

957 
glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE) 

958 
else 

959 
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); 

960 
DrawWorldStereo(Lag, rmRightEye); 

961 
end 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

962 
{$ENDIF} 
3692  963 
end; 
964 

965 
procedure ChangeDepth(rm: TRenderMode; d: GLfloat); 

966 
begin 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

967 
{$IFDEF S3D_DISABLED} 
4850  968 
rm:= rm; d:= d; // avoid hint 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

969 
exit; 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

970 
{$ELSE} 
3696  971 
d:= d / 5; 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

972 
if rm = rmDefault then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

973 
exit 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

974 
else if rm = rmLeftEye then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

975 
d:= d; 
3692  976 
stereoDepth:= stereoDepth + d; 
977 
glMatrixMode(GL_PROJECTION); 

978 
glTranslatef(d, 0, 0); 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

979 
glMatrixMode(GL_MODELVIEW); 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

980 
{$ENDIF} 
3692  981 
end; 
982 

983 
procedure ResetDepth(rm: TRenderMode); 

984 
begin 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

985 
{$IFDEF S3D_DISABLED} 
4850  986 
rm:= rm; // avoid hint 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

987 
exit; 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

988 
{$ELSE} 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

989 
if rm = rmDefault then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

990 
exit; 
3692  991 
glMatrixMode(GL_PROJECTION); 
992 
glTranslatef(stereoDepth, 0, 0); 

993 
glMatrixMode(GL_MODELVIEW); 

994 
stereoDepth:= 0; 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

995 
{$ENDIF} 
3692  996 
end; 
997 

998 
procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); 

6627  999 
var i, t, h: LongInt; 
3692  1000 
r: TSDL_Rect; 
1001 
tdx, tdy: Double; 

1002 
s: string[15]; 

1003 
highlight: Boolean; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1004 
smallScreenOffset, offsetX, offsetY, screenBottom: LongInt; 
3692  1005 
VertexBuffer: array [0..3] of TVertex2f; 
1006 
begin 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1007 
if (cReducedQuality and rqNoBackground) = 0 then 
1812  1008 
begin 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1009 
// Offsets relative to camera  spare them to wimpier cpus, no bg or flakes for them anyway 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1010 
ScreenBottom:= (WorldDy  trunc(cScreenHeight/cScaleFactor)  (cScreenHeight div 2) + cWaterLine); 
4374  1011 
offsetY:= 10 * Min(0, 145  ScreenBottom); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1012 
SkyOffset:= offsetY div 35 + cWaveHeight; 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1013 
HorizontOffset:= SkyOffset; 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1014 
if ScreenBottom > SkyOffset then 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1015 
HorizontOffset:= HorizontOffset + ((ScreenBottomSkyOffset) div 20); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

1016 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1017 
// background 
3688  1018 
ChangeDepth(RM, cStereo_Sky); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1019 
if SuddenDeathDmg then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1020 
Tint(SDTint, SDTint, SDTint, $FF); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1021 
DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8, SkyOffset); 
3688  1022 
ChangeDepth(RM, cStereo_Horizon); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1023 
DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5, HorizontOffset); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1024 
if SuddenDeathDmg then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1025 
Tint($FF, $FF, $FF, $FF); 
3611  1026 
end; 
4  1027 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1028 
DrawVisualGears(0); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1029 
ChangeDepth(RM, cStereo_MidDistance); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1030 
DrawVisualGears(4); 
3697  1031 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1032 
if (cReducedQuality and rq2DWater) = 0 then 
3611  1033 
begin 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1034 
// Waves 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1035 
DrawWater(255, SkyOffset); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1036 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1037 
DrawWaves( 1, 0  WorldDx div 32,  cWaveHeight + offsetY div 35, 64); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1038 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1039 
DrawWaves( 1, 25 + WorldDx div 25,  cWaveHeight + offsetY div 38, 48); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1040 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1041 
DrawWaves( 1, 75  WorldDx div 19,  cWaveHeight + offsetY div 45, 32); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1042 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1043 
DrawWaves(1, 100 + WorldDx div 14,  cWaveHeight + offsetY div 70, 24); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

1044 
end 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1045 
else 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1046 
DrawWaves(1, 100,  (cWaveHeight + (cWaveHeight shr 1)), 0); 
4  1047 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1048 
changeDepth(RM, cStereo_Land); 
6302
db8bdbb34e03
Spread flakes out over 5 layers now (far back, mid distance, just behind land, just in front of lands and hog, near distance). Spread clouds out over 3 layers (far back, mid distance, just behind land). Add a flatten clouds option, use
nemo
parents:
6296
diff
changeset

1049 
DrawVisualGears(5); 
3611  1050 
DrawLand(WorldDx, WorldDy); 
1911  1051 

3611  1052 
DrawWater(255, 0); 
4  1053 

1660  1054 
// Attack bar 
5862  1055 
if CurrentTeam <> nil then 
3611  1056 
case AttackBar of 
1660  1057 
(* 1: begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1058 
r:= StuffPoz[sPowerBar]; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1059 
{$WARNINGS OFF} 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1060 
r.w:= (CurrentHedgehog^.Gear^.Power * 256) div cPowerDivisor; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1061 
{$WARNINGS ON} 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1062 
DrawSpriteFromRect(r, cScreenWidth  272, cScreenHeight  48, 16, 0, Surface); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1063 
end;*) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1064 
2: with CurrentHedgehog^ do 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1065 
begin 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1066 
tdx:= hwSign(Gear^.dX) * Sin(Gear^.Angle * Pi / cMaxAngle); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1067 
tdy:=  Cos(Gear^.Angle * Pi / cMaxAngle); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1068 
for i:= (Gear^.Power * 24) div cPowerDivisor downto 0 do 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1069 
DrawSprite(sprPower, 
4159
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
4132
diff
changeset

1070 
hwRound(Gear^.X) + GetLaunchX(CurAmmoType, hwSign(Gear^.dX), Gear^.Angle) + LongInt(round(WorldDx + tdx * (24 + i * 2)))  16, 
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
4132
diff
changeset

1071 
hwRound(Gear^.Y) + GetLaunchY(CurAmmoType, Gear^.Angle) + LongInt(round(WorldDy + tdy * (24 + i * 2)))  16, 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1072 
i) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1073 
end 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1074 
end; 
1660  1075 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1076 
DrawVisualGears(1); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1077 
DrawGears; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1078 
DrawVisualGears(6); 
4  1079 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1080 
if SuddenDeathDmg then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1081 
DrawWater(cSDWaterOpacity, 0) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1082 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

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

1084 

3611  1085 
// Waves 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1086 
ChangeDepth(RM, cStereo_Water_near); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1087 
DrawWaves( 1, 25  WorldDx div 9,  cWaveHeight, 12); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

1088 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1089 
if (cReducedQuality and rq2DWater) = 0 then 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

1090 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1091 
//DrawWater(cWaterOpacity,  offsetY div 40); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1092 
ChangeDepth(RM, cStereo_Water_near); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1093 
DrawWaves(1, 50 + WorldDx div 6,  cWaveHeight  offsetY div 40, 8); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1094 
if SuddenDeathDmg then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1095 
DrawWater(cSDWaterOpacity,  offsetY div 20) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1096 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1097 
DrawWater(cWaterOpacity,  offsetY div 20); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1098 
ChangeDepth(RM, cStereo_Water_near); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1099 
DrawWaves( 1, 75  WorldDx div 4,  cWaveHeight  offsetY div 20, 2); 
4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

1100 
if SuddenDeathDmg then 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

1101 
DrawWater(cSDWaterOpacity,  offsetY div 10) 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

1102 
else 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

1103 
DrawWater(cWaterOpacity,  offsetY div 10); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1104 
ChangeDepth(RM, cStereo_Water_near); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

1105 
DrawWaves( 1, 25 + WorldDx div 3,  cWaveHeight  offsetY div 10, 0); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1106 
end 
3611  1107 
else 
1108 
DrawWaves(1, 50,  (cWaveHeight shr 1), 0); 

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

1109 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1110 
// everything after this ChangeDepth will be drawn outside the screen 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

1111 
// note: negative parallax gears should last very little for a smooth stereo effect 
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

1112 
ChangeDepth(RM, cStereo_Outside); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1113 
DrawVisualGears(2); 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1114 

c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1115 
// everything after this ResetDepth will be drawn at screen level (depth = 0) 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

1116 
// note: everything that needs to be readable should be on this level 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1117 
ResetDepth(RM); 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

1118 
DrawVisualGears(3); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

1119 

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

1121 
// Target 
3104  1122 
if (TargetPoint.X <> NoPointX) and (CurrentTeam <> nil) and (CurrentHedgehog <> nil) then 
1123 
begin 

1124 
with PHedgehog(CurrentHedgehog)^ do 

1125 
begin 

5372
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

1126 
if CurAmmoType = amBee then 
3110  1127 
DrawRotatedF(sprTargetBee, TargetPoint.X + WorldDx, TargetPoint.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) 
1128 
else 

5372
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

1129 
DrawRotatedF(sprTargetP, TargetPoint.X + WorldDx, TargetPoint.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) 
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

1130 
end 
3104  1131 
end; 
4  1132 
{$WARNINGS ON} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

1133 

3523  1134 
// this scale is used to keep the various widgets at the same dimension at all zoom levels 
1135 
SetScale(cDefaultZoomLevel); 

2724  1136 

1137 
// Turn time 

6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

1138 
{$IFDEF USE_TOUCH_INTERFACE} 
3025  1139 
offsetX:= cScreenHeight  13; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

1140 
{$ELSE} 
3025  1141 
offsetX:= 48; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

1142 
{$ENDIF} 
3463  1143 
offsetY:= cOffsetY; 
3890
e4b7b30232fd
Extend time limit to 9999, remove ready timer if time is over 999 and stop drawing time if it is over 999 (draws wrong over 999 anyway)  this has the effect of allowing an "unlimited" time appearance if turns are over a quarter hour or so. This can be used to add an unlimited time scheme or button to ipad
nemo
parents:
3836
diff
changeset

1144 
if ((TurnTimeLeft <> 0) and (TurnTimeLeft < 1000000)) or (ReadyTimeLeft <> 0) then 
3774  1145 
begin 
1146 
if ReadyTimeLeft <> 0 then 

1147 
i:= Succ(Pred(ReadyTimeLeft) div 1000) 

1148 
else 

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

1150 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1151 
if i>99 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1152 
t:= 112 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1153 
else if i>9 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1154 
t:= 96 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1155 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1156 
t:= 80; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1157 
DrawSprite(sprFrame, (cScreenWidth shr 1) + t + offsetY, cScreenHeight  offsetX, 1); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1158 
while i > 0 do 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1159 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1160 
dec(t, 32); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1161 
DrawSprite(sprBigDigit, (cScreenWidth shr 1) + t + offsetY, cScreenHeight  offsetX, i mod 10); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1162 
i:= i div 10 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1163 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1164 
DrawSprite(sprFrame, (cScreenWidth shr 1) + t  4 + offsetY, cScreenHeight  offsetX, 0); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1165 
end; 
79  1166 

4  1167 
// Captions 
4393  1168 
DrawCaptions; 
4  1169 

6676
21cf35a570a7
add keywords for landscape ammomenu and touch interface
koda
parents:
6652
diff
changeset

1170 
{$IFDEF USE_TOUCH_INTERFACE} 
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5824
diff
changeset

1171 
// Draw buttons Related to the Touch interface 
6688  1172 
DrawScreenWidget(@arrowLeft); 
1173 
DrawScreenWidget(@arrowRight); 

1174 
DrawScreenWidget(@arrowUp); 

1175 
DrawScreenWidget(@arrowDown); 

1176 

1177 
DrawScreenWidget(@fireButton); 

1178 
DrawScreenWidget(@backjump); 

1179 
DrawScreenWidget(@forwardjump); 

1180 
DrawScreenWidget(@pauseButton); 

1181 
{ 

6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1182 
DrawTexture(arrowLeft.x, arrowLeft.y, spritesData[sprArrowLeft].Texture, buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1183 
DrawTexture(arrowRight.x, arrowRight.y, spritesData[sprArrowRight].Texture, buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1184 
DrawTexture(arrowUp.x, arrowUp.y, spritesData[sprArrowUp].Texture, buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1185 
DrawTexture(arrowDown.x, arrowDown.y, spritesData[sprArrowDown].Texture, buttonScale); 
6637
b4a3310f2974
show buttons on the screen, similar to the iOS overlay
Xeli
parents:
6631
diff
changeset

1186 

6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1187 
DrawTexture(fireButton.x, firebutton.y, spritesData[sprFireButton].Texture, buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1188 
DrawTexture(backjump.x, backjump.y, spritesData[sprBackjump].Texture, buttonScale); 
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6682
diff
changeset

1189 
DrawTexture(forwardjump.x, forwardjump.y, spritesData[sprForwardjump].Texture, buttonScale); 
6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

1190 
DrawTexture(pauseButton.x, pauseButton.y, spritesData[sprPauseButton].Texture, buttonScale); 
6688  1191 
}{$ENDIF} 
6601
5965e2927b3d
fixed the ammo menu on android, on tablets all weapons are 'choosable' and on phones I've moved the ammomenu up a bit
Xeli
parents:
6580
diff
changeset

1192 

47  1193 
// Teams Healths 
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5862
diff
changeset

1194 
if TeamsCount * 20 > Longword(cScreenHeight) div 7 then // take up less screen on small displays 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1195 
begin 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1196 
SetScale(1.5); 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1197 
smallScreenOffset:= cScreenHeight div 6; 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1198 
if TeamsCount * 20 > Longword(cScreenHeight) div 5 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1199 
Tint($FF,$FF,$FF,$80); 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1200 
end 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1201 
else smallScreenOffset:= 0; 
547  1202 
for t:= 0 to Pred(TeamsCount) do 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1203 
with TeamsArray[t]^ do 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1204 
begin 
6627  1205 
h:= 0; 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1206 
highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500); 
3697  1207 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1208 
if highlight then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1209 
Tint(Clan^.Color shl 8 or $FF); 
690  1210 

2839  1211 
// draw name 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1212 
DrawTexture(NameTagTex^.w  16, cScreenHeight + DrawHealthY + smallScreenOffset, NameTagTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1213 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1214 
// draw flag 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1215 
DrawTexture(14, cScreenHeight + DrawHealthY + smallScreenOffset, FlagTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1216 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1217 
// draw health bar 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1218 
r.x:= 0; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1219 
r.y:= 0; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1220 
r.w:= 2 + TeamHealthBarWidth; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1221 
r.h:= HealthTex^.h; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1222 
DrawFromRect(14, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1223 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1224 
// draw health bars right border 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1225 
inc(r.x, cTeamHealthWidth + 2); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1226 
r.w:= 3; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1227 
DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1228 

6627  1229 
if not highlight and not hasGone then 
1230 
for i:= 0 to cMaxHHIndex do 

1231 
if Hedgehogs[i].Gear <> nil then 

1232 
begin 

6644  1233 
inc(h,Hedgehogs[i].Gear^.Health); 
6647  1234 
if h < TeamHealth then DrawTexture(15 + h*TeamHealthBarWidth div TeamHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSlider].Texture); 
6627  1235 
end; 
1236 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1237 
// draw ai kill counter for gfAISurvival 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1238 
if (GameFlags and gfAISurvival) <> 0 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1239 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1240 
DrawTexture(TeamHealthBarWidth + 22, cScreenHeight + DrawHealthY + smallScreenOffset, AIKillsTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1241 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1242 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1243 
// if highlighted, draw flag and other contents again to keep their colors 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1244 
// this approach should be faster than drawing all borders one by one tinted or not 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1245 
if highlight then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1246 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1247 
if TeamsCount * 20 > Longword(cScreenHeight) div 5 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1248 
Tint($FF,$FF,$FF,$80) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1249 
else Tint($FF, $FF, $FF, $FF); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1250 

6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1251 
// draw name 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1252 
r.x:= 2; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1253 
r.y:= 2; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1254 
r.w:= NameTagTex^.w  4; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1255 
r.h:= NameTagTex^.h  4; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1256 
DrawFromRect(NameTagTex^.w  14, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, NameTagTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1257 
// draw flag 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1258 
r.w:= 22; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1259 
r.h:= 15; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1260 
DrawFromRect(12, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, FlagTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1261 
// draw health bar 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1262 
r.w:= TeamHealthBarWidth + 1; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1263 
r.h:= HealthTex^.h  4; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1264 
DrawFromRect(16, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, HealthTex); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1265 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1266 
end; 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1267 
if smallScreenOffset <> 0 then 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1268 
begin 
5485  1269 
SetScale(cDefaultZoomLevel); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1270 
if TeamsCount * 20 > Longword(cScreenHeight) div 5 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1271 
Tint($FF,$FF,$FF,$FF); 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

1272 
end; 
47  1273 

5  1274 
// Lag alert 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1275 
if isInLag then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1276 
DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  1277 

5  1278 
// Wind bar 
6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

1279 
{$IFDEF USE_TOUCH_INTERFACE} 
3405  1280 
offsetX:= cScreenHeight  13; 
1281 
offsetY:= (cScreenWidth shr 1) + 74; 

2567  1282 
{$ELSE} 
3405  1283 
offsetX:= 30; 
1284 
offsetY:= 180; 

2567  1285 
{$ENDIF} 
3405  1286 
DrawSprite(sprWindBar, (cScreenWidth shr 1)  offsetY, cScreenHeight  offsetX, 0); 
1287 
if WindBarWidth > 0 then 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1288 
begin 
3405  1289 
{$WARNINGS OFF} 
1290 
r.x:= 8  (RealTicks shr 6) mod 8; 

1291 
{$WARNINGS ON} 

1292 
r.y:= 0; 

1293 
r.w:= WindBarWidth; 

1294 
r.h:= 13; 

1295 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  offsetY + 77, cScreenHeight  offsetX + 2, 13, 0); 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1296 
end 
3405  1297 
else 
1298 
if WindBarWidth < 0 then 

1299 
begin 

1300 
{$WARNINGS OFF} 

3407  1301 
r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 8; 
3405  1302 
{$WARNINGS ON} 
1303 
r.y:= 0; 

1304 
r.w:=  WindBarWidth; 

1305 
r.h:= 13; 

1306 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  offsetY + 74 + WindBarWidth, cScreenHeight  offsetX + 2, 13, 0); 

1307 
end; 

5  1308 

161  1309 
// AmmoMenu 
6622  1310 
if bShowAmmoMenu or ((AMShiftX <> AMShiftTargetX) or (AMShiftY <> AMShiftTargetY)) then 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1311 
ShowAmmoMenu; 
161  1312 

2287  1313 
// Cursor 
1314 
if isCursorVisible and bShowAmmoMenu then 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

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

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1317 
// Chat 
2287  1318 
DrawChat; 
4  1319 

4976  1320 
// various captions 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1321 
if fastUntilLag then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1322 
DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1323 
if isPaused then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1324 
DrawCentered(0, (cScreenHeight shr 1), PauseTexture); 
3774  1325 
if not isFirstFrame and (missionTimer <> 0) or isPaused or fastUntilLag or (GameState = gsConfirm) then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1326 
begin 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1327 
if (ReadyTimeLeft = 0) and (missionTimer > 0) then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1328 
dec(missionTimer, Lag); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1329 
if missionTimer < 0 then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6492
diff
changeset

1330 
missionTimer:= 0; // avoid subtracting below 0 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1331 
if missionTex <> nil then 
4374  1332 
DrawCentered(0, Min((cScreenHeight shr 1) + 100, cScreenHeight  48  missionTex^.h), missionTex); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1333 
end; 
2786  1334 

2724  1335 
// fps 
6685
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

1336 
{$IFDEF USE_TOUCH_INTERFACE} 
ef706fccfb0a
moved other widgets under the USE_TOUCH_INTERFACE, added pause button (at least, graphically...)
koda
parents:
6683
diff
changeset

1337 
offsetX:= pauseButton.y + pauseButton.height + 12; 
2724  1338 
{$ELSE} 
3463  1339 
offsetX:= 10; 
2724  1340 
{$ENDIF} 
3463  13 