author | unc0rr |
Thu, 10 Sep 2009 12:46:56 +0000 | |
changeset 2373 | e3989519731b |
parent 2372 | f3e7a066c2b8 |
child 2374 | d584bb4b836e |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
1689 | 3 |
* Copyright (c) 2004-2009 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 02111-1307, USA |
|
4 | 17 |
*) |
18 |
||
19 |
unit uWorld; |
|
20 |
interface |
|
351 | 21 |
uses SDLh, uGears, uConsts, uFloat; |
4 | 22 |
{$INCLUDE options.inc} |
371 | 23 |
const WorldDx: LongInt = -512; |
24 |
WorldDy: LongInt = -256; |
|
4 | 25 |
|
26 |
procedure InitWorld; |
|
956 | 27 |
procedure DrawWorld(Lag: LongInt); |
108 | 28 |
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); |
4 | 29 |
|
30 |
{$IFDEF COUNTTICKS} |
|
31 |
var cntTicks: LongWord; |
|
32 |
{$ENDIF} |
|
33 |
var FollowGear: PGear = nil; |
|
1256 | 34 |
WindBarWidth: LongInt = 0; |
35 |
bShowAmmoMenu: boolean = false; |
|
36 |
bSelected: boolean = false; |
|
37 |
bShowFinger: boolean = false; |
|
38 |
Frames: Longword = 0; |
|
39 |
WaterColor, DeepWaterColor: TSDL_Color; |
|
4 | 40 |
|
41 |
implementation |
|
1906 | 42 |
uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound, |
2152 | 43 |
{$IFDEF GLES11} |
1906 | 44 |
gles11, |
45 |
{$ELSE} |
|
46 |
GL, |
|
47 |
{$ENDIF} |
|
1870 | 48 |
uAmmos, uVisualGears, uChat, uLandTexture, uLand; |
1807 | 49 |
|
564 | 50 |
const FPS: Longword = 0; |
4 | 51 |
CountTicks: Longword = 0; |
174 | 52 |
SoundTimerTicks: Longword = 0; |
4 | 53 |
prevPoint: TPoint = (X: 0; Y: 0); |
161 | 54 |
|
4 | 55 |
type TCaptionStr = record |
762 | 56 |
Tex: PTexture; |
4 | 57 |
EndTime: LongWord; |
58 |
end; |
|
59 |
||
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
60 |
var cWaveWidth, cWaveHeight: LongInt; |
1256 | 61 |
Captions: array[TCapGroup] of TCaptionStr; |
62 |
AMxShift, SlotsNum: LongInt; |
|
63 |
tmpSurface: PSDL_Surface; |
|
64 |
fpsTexture: PTexture = nil; |
|
4 | 65 |
|
66 |
procedure InitWorld; |
|
67 |
begin |
|
1825 | 68 |
cWaveWidth:= SpritesData[sprWater].Width; |
2268
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile - of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset
|
69 |
//cWaveHeight:= SpritesData[sprWater].Height; |
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile - of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset
|
70 |
cWaveHeight:= 32; |
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
71 |
|
284 | 72 |
cGearScrEdgesDist:= Min(cScreenWidth div 2 - 100, cScreenHeight div 2 - 50); |
74 | 73 |
SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2); |
2197 | 74 |
prevPoint.X:= 0; |
74 | 75 |
prevPoint.Y:= cScreenHeight div 2; |
1760 | 76 |
WorldDx:= - (LAND_WIDTH div 2) + cScreenWidth div 2; |
2139
5a083e71a71d
Properly decrement sniper rifle if timed out. Try to get camera position straight for once.
nemo
parents:
2119
diff
changeset
|
77 |
WorldDy:= - (LAND_HEIGHT - (playHeight div 2)) + (cScreenHeight div 2); |
1120 | 78 |
AMxShift:= 210 |
161 | 79 |
end; |
80 |
||
956 | 81 |
procedure ShowAmmoMenu; |
161 | 82 |
const MENUSPEED = 15; |
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
83 |
var x, y, i, t, l, g: LongInt; |
371 | 84 |
Slot, Pos: LongInt; |
161 | 85 |
begin |
2224
4f3e7bd31841
Allow ammo menu to stay open when on rope/parachute/jetpack - allows for using non-F key alt weapon selection
nemo
parents:
2198
diff
changeset
|
86 |
if (TurnTimeLeft = 0) or (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and KbdKeyPressed) then bShowAmmoMenu:= false; |
165 | 87 |
if bShowAmmoMenu then |
88 |
begin |
|
2226
e35b62cb7a1c
Try turning off follow gear while ammo menu is open - needs testing w/ rope/parachute/jetpack
nemo
parents:
2224
diff
changeset
|
89 |
FollowGear:= nil; |
1120 | 90 |
if AMxShift = 210 then prevPoint.X:= 0; |
1812 | 91 |
if cReducedQuality then |
92 |
AMxShift:= 0 |
|
93 |
else |
|
94 |
if AMxShift > 0 then dec(AMxShift, MENUSPEED); |
|
165 | 95 |
end else |
96 |
begin |
|
1120 | 97 |
if AMxShift = 0 then |
165 | 98 |
begin |
99 |
CursorPoint.X:= cScreenWidth div 2; |
|
100 |
CursorPoint.Y:= cScreenHeight div 2; |
|
101 |
prevPoint:= CursorPoint; |
|
2197 | 102 |
SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight - CursorPoint.Y) |
165 | 103 |
end; |
1812 | 104 |
if cReducedQuality then |
105 |
AMxShift:= 210 |
|
106 |
else |
|
107 |
if AMxShift < 210 then inc(AMxShift, MENUSPEED); |
|
165 | 108 |
end; |
161 | 109 |
|
110 |
if CurrentTeam = nil then exit; |
|
162 | 111 |
Slot:= 0; |
112 |
Pos:= -1; |
|
602 | 113 |
with CurrentHedgehog^ do |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
114 |
begin |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
115 |
if Ammo = nil then exit; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
116 |
SlotsNum:= 0; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
117 |
x:= cScreenWidth div 2 - 210 + AMxShift; |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
118 |
y:= cScreenHeight - 40; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
119 |
dec(y); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
120 |
DrawSprite(sprAMBorders, x, y, 0); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
121 |
dec(y); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
122 |
DrawSprite(sprAMBorders, x, y, 1); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
123 |
dec(y, 33); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
124 |
DrawSprite(sprAMSlotName, x, y, 0); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
125 |
for i:= cMaxSlotIndex downto 0 do |
2361 | 126 |
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
127 |
begin |
2197 | 128 |
if (cScreenHeight - CursorPoint.Y >= y - 33) and (cScreenHeight - CursorPoint.Y < y) then Slot:= i; |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
129 |
dec(y, 33); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
130 |
inc(SlotsNum); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
131 |
DrawSprite(sprAMSlot, x, y, 0); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
132 |
DrawSprite(sprAMSlotKeys, x + 2, y + 1, i); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
133 |
t:= 0; |
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
134 |
g:= 0; |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
135 |
while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
136 |
begin |
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
137 |
if (Ammo^[i, t].AmmoType <> amNothing) then |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
138 |
begin |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
139 |
l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber; |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
140 |
|
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
141 |
if l >= 0 then |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
142 |
begin |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
143 |
DrawSprite(sprAMAmmosBW, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1); |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
144 |
DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l); |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
145 |
end else |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
146 |
DrawSprite(sprAMAmmos, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1); |
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset
|
147 |
|
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
148 |
if (Slot = i) |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
149 |
and (CursorPoint.X >= x + g * 33 + 35) |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
150 |
and (CursorPoint.X < x + g * 33 + 68) then |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
151 |
begin |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
152 |
if (l < 0) then DrawSprite(sprAMSelection, x + g * 33 + 35, y + 1, 0); |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
153 |
Pos:= t; |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
154 |
end; |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
155 |
inc(g) |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
156 |
end; |
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset
|
157 |
inc(t) |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
158 |
end |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
159 |
end; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
160 |
dec(y, 1); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
161 |
DrawSprite(sprAMBorders, x, y, 0); |
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset
|
162 |
|
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
163 |
if (Pos >= 0) then |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2330
diff
changeset
|
164 |
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
165 |
begin |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
166 |
DrawTexture(cScreenWidth div 2 - 200 + AMxShift, cScreenHeight - 68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
167 |
|
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
168 |
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then |
2198 | 169 |
DrawTexture(cScreenWidth div 2 + AMxShift - 35, cScreenHeight - 68, CountTexz[Ammo^[Slot, Pos].Count]); |
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
170 |
|
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
171 |
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
172 |
begin |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
173 |
bShowAmmoMenu:= false; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
174 |
SetWeapon(Ammo^[Slot, Pos].AmmoType); |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
175 |
bSelected:= false; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
176 |
exit |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
177 |
end; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
178 |
end; |
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset
|
179 |
end; |
162 | 180 |
|
181 |
bSelected:= false; |
|
2197 | 182 |
if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8) |
4 | 183 |
end; |
184 |
||
162 | 185 |
procedure MoveCamera; forward; |
186 |
||
2269
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
187 |
procedure DrawWater(Alpha: byte); |
1915 | 188 |
var VertexBuffer: array [0..3] of TVertex2f; |
189 |
r: TSDL_Rect; |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
190 |
lw, lh: GLfloat; |
1915 | 191 |
begin |
2269
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
192 |
WaterColorArray[0].a := Alpha; |
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
193 |
WaterColorArray[1].a := Alpha; |
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
194 |
WaterColorArray[2].a := Alpha; |
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
195 |
WaterColorArray[3].a := Alpha; |
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
196 |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
197 |
lw:= cScreenWidth / cScaleFactor; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
198 |
lh:= cScreenHeight * 2 / cScaleFactor; |
1915 | 199 |
// Water |
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
200 |
r.y:= WorldDy + cWaterLine + 16; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
201 |
if r.y < cScreenHeight * 2 / cScaleFactor then |
1915 | 202 |
begin |
203 |
if r.y < 0 then r.y:= 0; |
|
204 |
||
205 |
glDisable(GL_TEXTURE_2D); |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
206 |
VertexBuffer[0].X:= -lw; |
1915 | 207 |
VertexBuffer[0].Y:= r.y; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
208 |
VertexBuffer[1].X:= lw; |
1915 | 209 |
VertexBuffer[1].Y:= r.y; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
210 |
VertexBuffer[2].X:= lw; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
211 |
VertexBuffer[2].Y:= lh; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
212 |
VertexBuffer[3].X:= -lw; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
213 |
VertexBuffer[3].Y:= lh; |
1915 | 214 |
|
215 |
glEnableClientState (GL_COLOR_ARRAY); |
|
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
216 |
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); |
1915 | 217 |
|
218 |
glEnableClientState(GL_VERTEX_ARRAY); |
|
219 |
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
|
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
220 |
|
1915 | 221 |
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
222 |
||
2330 | 223 |
glDisableClientState(GL_VERTEX_ARRAY); |
1915 | 224 |
glDisableClientState(GL_COLOR_ARRAY); |
225 |
||
226 |
glColor4f(1, 1, 1, 1); // disable coloring |
|
227 |
glEnable(GL_TEXTURE_2D) |
|
228 |
end |
|
229 |
end; |
|
230 |
||
2288 | 231 |
procedure DrawWaves(Dir, dX, dY: LongInt); |
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
232 |
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
233 |
lw, waves: GLfloat; |
2288 | 234 |
begin |
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
235 |
lw:= cScreenWidth / cScaleFactor; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
236 |
waves:= lw * 2 / cWaveWidth; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
237 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
238 |
glBindTexture(GL_TEXTURE_2D, SpritesData[sprWater].Texture^.id); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
239 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
240 |
VertexBuffer[0].X:= -lw; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
241 |
VertexBuffer[0].Y:= cWaterLine + WorldDy + dY; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
242 |
VertexBuffer[1].X:= lw; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
243 |
VertexBuffer[1].Y:= VertexBuffer[0].Y; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
244 |
VertexBuffer[2].X:= lw; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
245 |
VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprWater].Height; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
246 |
VertexBuffer[3].X:= -lw; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
247 |
VertexBuffer[3].Y:= VertexBuffer[2].Y; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
248 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
249 |
TextureBuffer[0].X:= (( - WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth - 1); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
250 |
TextureBuffer[0].Y:= 0; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
251 |
TextureBuffer[1].X:= TextureBuffer[0].X + waves; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
252 |
TextureBuffer[1].Y:= 0; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
253 |
TextureBuffer[2].X:= TextureBuffer[0].X + waves; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
254 |
TextureBuffer[2].Y:= 1; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
255 |
TextureBuffer[3].X:= TextureBuffer[0].X; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
256 |
TextureBuffer[3].Y:= 1; |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
257 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
258 |
glEnableClientState(GL_VERTEX_ARRAY); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
259 |
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
260 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
261 |
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
262 |
glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
263 |
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
264 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
265 |
glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
266 |
glDisableClientState(GL_VERTEX_ARRAY); |
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
267 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
268 |
|
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
269 |
{for i:= -1 to cWaterSprCount do |
2288 | 270 |
DrawSprite(sprWater, |
271 |
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth) - (cScreenWidth div 2), |
|
272 |
cWaterLine + WorldDy + dY, |
|
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset
|
273 |
0)} |
2288 | 274 |
end; |
275 |
||
956 | 276 |
procedure DrawWorld(Lag: LongInt); |
371 | 277 |
var i, t: LongInt; |
4 | 278 |
r: TSDL_Rect; |
107 | 279 |
tdx, tdy: Double; |
175 | 280 |
grp: TCapGroup; |
174 | 281 |
s: string[15]; |
80 | 282 |
|
371 | 283 |
procedure DrawRepeated(spr: TSprite; Shift: LongInt); |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
284 |
var i, w, sw: LongInt; |
80 | 285 |
begin |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
286 |
sw:= round(cScreenWidth / cScaleFactor); |
80 | 287 |
w:= SpritesData[spr].Width; |
82 | 288 |
i:= Shift mod w; |
80 | 289 |
if i > 0 then dec(i, w); |
2373 | 290 |
dec(i, w * (sw div w + 1)); |
80 | 291 |
repeat |
1760 | 292 |
DrawSprite(spr, i, WorldDy + LAND_HEIGHT - SpritesData[spr].Height, 0); |
80 | 293 |
inc(i, w) |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
294 |
until i > sw |
80 | 295 |
end; |
296 |
||
4 | 297 |
begin |
2372 | 298 |
if ZoomValue < zoom then |
299 |
begin |
|
300 |
zoom:= zoom - 0.001 * Lag; |
|
301 |
if zoom < ZoomValue then zoom:= ZoomValue |
|
302 |
end else |
|
303 |
if ZoomValue > zoom then |
|
304 |
begin |
|
305 |
zoom:= zoom + 0.001 * Lag; |
|
306 |
if zoom > ZoomValue then zoom:= ZoomValue |
|
307 |
end; |
|
308 |
||
770 | 309 |
// Sky |
756 | 310 |
glClear(GL_COLOR_BUFFER_BIT); |
311 |
glEnable(GL_BLEND); |
|
775 | 312 |
glEnable(GL_TEXTURE_2D); |
777 | 313 |
//glPushMatrix; |
314 |
//glScalef(1.0, 1.0, 1.0); |
|
756 | 315 |
|
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset
|
316 |
if not isPaused then MoveCamera; |
162 | 317 |
|
1812 | 318 |
if not cReducedQuality then |
319 |
begin |
|
320 |
// background |
|
321 |
DrawRepeated(sprSky, WorldDx * 3 div 8); |
|
322 |
DrawRepeated(sprHorizont, WorldDx * 3 div 5); |
|
4 | 323 |
|
1812 | 324 |
DrawVisualGears(0); |
2288 | 325 |
end; |
803 | 326 |
|
2288 | 327 |
// Waves |
328 |
DrawWaves( 1, 0, - (cWaveHeight * 2)); |
|
329 |
DrawWaves(-1, 100, - (cWaveHeight + cWaveHeight div 2)); |
|
1812 | 330 |
|
4 | 331 |
|
762 | 332 |
DrawLand(WorldDx, WorldDy); |
1911 | 333 |
|
2269
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
334 |
DrawWater(255); |
4 | 335 |
|
1660 | 336 |
// Attack bar |
337 |
if CurrentTeam <> nil then |
|
338 |
case AttackBar of |
|
339 |
(* 1: begin |
|
340 |
r:= StuffPoz[sPowerBar]; |
|
341 |
{$WARNINGS OFF} |
|
342 |
r.w:= (CurrentHedgehog^.Gear^.Power * 256) div cPowerDivisor; |
|
343 |
{$WARNINGS ON} |
|
344 |
DrawSpriteFromRect(r, cScreenWidth - 272, cScreenHeight - 48, 16, 0, Surface); |
|
345 |
end;*) |
|
346 |
2: with CurrentHedgehog^ do |
|
347 |
begin |
|
348 |
tdx:= hwSign(Gear^.dX) * Sin(Gear^.Angle * Pi / cMaxAngle); |
|
349 |
tdy:= - Cos(Gear^.Angle * Pi / cMaxAngle); |
|
350 |
for i:= (Gear^.Power * 24) div cPowerDivisor downto 0 do |
|
351 |
DrawSprite(sprPower, |
|
352 |
hwRound(Gear^.X) + system.round(WorldDx + tdx * (24 + i * 2)) - 16, |
|
353 |
hwRound(Gear^.Y) + system.round(WorldDy + tdy * (24 + i * 2)) - 12, |
|
354 |
i) |
|
355 |
end |
|
356 |
end; |
|
357 |
||
956 | 358 |
DrawGears; |
4 | 359 |
|
2047
805f7b62cff6
Allow speech bubble/small damage tags in "reduced quality"
nemo
parents:
2002
diff
changeset
|
360 |
DrawVisualGears(1); |
1045 | 361 |
|
2273 | 362 |
DrawWater(cWaterOpacity); |
2269
00f5704f5f39
add extra semi-opaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset
|
363 |
|
5 | 364 |
// Waves |
2288 | 365 |
DrawWaves( 1, 25, - cWaveHeight); |
366 |
DrawWaves(-1, 50, - (cWaveHeight div 2)); |
|
367 |
DrawWaves( 1, 75, 0); |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
368 |
|
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
369 |
|
2288 | 370 |
{$WARNINGS OFF} |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
371 |
// Target |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
372 |
if TargetPoint.X <> NoPointX then DrawSprite(sprTargetP, TargetPoint.X + WorldDx - 16, TargetPoint.Y + WorldDy - 16, 0); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
373 |
|
4 | 374 |
{$WARNINGS ON} |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
375 |
SetScale(2.0); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
376 |
|
79 | 377 |
// Turn time |
4 | 378 |
if TurnTimeLeft <> 0 then |
379 |
begin |
|
380 |
i:= Succ(Pred(TurnTimeLeft) div 1000); |
|
381 |
if i>99 then t:= 112 |
|
382 |
else if i>9 then t:= 96 |
|
383 |
else t:= 80; |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
384 |
DrawSprite(sprFrame, -cScreenWidth div 2 + t, cScreenHeight - 48, 1); |
4 | 385 |
while i > 0 do |
386 |
begin |
|
387 |
dec(t, 32); |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
388 |
DrawSprite(sprBigDigit, -cScreenWidth div 2 + t, cScreenHeight - 48, i mod 10); |
4 | 389 |
i:= i div 10 |
390 |
end; |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
391 |
DrawSprite(sprFrame, -cScreenWidth div 2 + t - 4, cScreenHeight - 48, 0); |
4 | 392 |
end; |
79 | 393 |
|
4 | 394 |
// Captions |
175 | 395 |
i:= 8; |
396 |
for grp:= Low(TCapGroup) to High(TCapGroup) do |
|
397 |
with Captions[grp] do |
|
762 | 398 |
if Tex <> nil then |
175 | 399 |
begin |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
400 |
DrawCentered(0, i, Tex); |
762 | 401 |
inc(i, Tex^.h + 2); |
564 | 402 |
if EndTime <= RealTicks then |
175 | 403 |
begin |
762 | 404 |
FreeTexture(Tex); |
405 |
Tex:= nil; |
|
175 | 406 |
EndTime:= 0 |
407 |
end |
|
408 |
end; |
|
4 | 409 |
|
47 | 410 |
// Teams Healths |
547 | 411 |
for t:= 0 to Pred(TeamsCount) do |
412 |
with TeamsArray[t]^ do |
|
47 | 413 |
begin |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
414 |
DrawTexture(- NameTagTex^.w - 3, cScreenHeight + DrawHealthY, NameTagTex); |
690 | 415 |
|
416 |
r.x:= 0; |
|
417 |
r.y:= 0; |
|
547 | 418 |
r.w:= 2 + TeamHealthBarWidth; |
764
7513452b1d51
Now game looks almost like it did before switching to OpenGL
unc0rr
parents:
762
diff
changeset
|
419 |
r.h:= HealthTex^.h; |
690 | 420 |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
421 |
DrawFromRect(0, |
1120 | 422 |
cScreenHeight + DrawHealthY, |
841
0700e3d3474d
Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents:
803
diff
changeset
|
423 |
@r, HealthTex); |
690 | 424 |
|
83 | 425 |
inc(r.x, cTeamHealthWidth + 2); |
426 |
r.w:= 3; |
|
690 | 427 |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
428 |
DrawFromRect(TeamHealthBarWidth + 2, |
1120 | 429 |
cScreenHeight + DrawHealthY, |
841
0700e3d3474d
Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents:
803
diff
changeset
|
430 |
@r, HealthTex); |
47 | 431 |
end; |
432 |
||
5 | 433 |
// Lag alert |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
434 |
if isInLag then DrawSprite(sprLag, 32 - cScreenWidth div 2, 32, (RealTicks shr 7) mod 12); |
4 | 435 |
|
5 | 436 |
// Wind bar |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
437 |
DrawSprite(sprWindBar, cScreenWidth div 2 - 180, cScreenHeight - 30, 0); |
6 | 438 |
if WindBarWidth > 0 then |
5 | 439 |
begin |
689 | 440 |
{$WARNINGS OFF} |
441 |
r.x:= 8 - (RealTicks shr 6) mod 8; |
|
442 |
{$WARNINGS ON} |
|
443 |
r.y:= 0; |
|
444 |
r.w:= WindBarWidth; |
|
445 |
r.h:= 13; |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
446 |
DrawSpriteFromRect(sprWindR, r, cScreenWidth div 2 - 103, cScreenHeight - 28, 13, 0); |
5 | 447 |
end else |
6 | 448 |
if WindBarWidth < 0 then |
5 | 449 |
begin |
689 | 450 |
{$WARNINGS OFF} |
451 |
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; |
|
452 |
{$WARNINGS ON} |
|
453 |
r.y:= 0; |
|
454 |
r.w:= - WindBarWidth; |
|
455 |
r.h:= 13; |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
456 |
DrawSpriteFromRect(sprWindL, r, cScreenWidth div 2 - 106 + WindBarWidth, cScreenHeight - 28, 13, 0); |
5 | 457 |
end; |
458 |
||
161 | 459 |
// AmmoMenu |
1120 | 460 |
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; |
161 | 461 |
|
2287 | 462 |
// Cursor |
463 |
if isCursorVisible and bShowAmmoMenu then |
|
464 |
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8); |
|
942 | 465 |
|
2287 | 466 |
DrawChat; |
4 | 467 |
|
2302 | 468 |
if isPaused then DrawCentered(0, cScreenHeight div 2, PauseTexture); |
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset
|
469 |
|
4 | 470 |
inc(Frames); |
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
471 |
if cShowFPS then |
4 | 472 |
begin |
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
473 |
inc(CountTicks, Lag); |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
474 |
if CountTicks >= 1000 then |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
475 |
begin |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
476 |
FPS:= Frames; |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
477 |
Frames:= 0; |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
478 |
CountTicks:= 0; |
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
479 |
s:= inttostr(FPS) + ' fps'; |
759 | 480 |
if fpsTexture <> nil then FreeTexture(fpsTexture); |
481 |
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), $FFFFFF); |
|
2290
bf87ca44782e
Selectively enable clamping - seeing if this helps avoid weird flake problems while still fixing vertical lines in waves and sky
nemo
parents:
2288
diff
changeset
|
482 |
fpsTexture:= Surface2Tex(tmpSurface, false); |
759 | 483 |
SDL_FreeSurface(tmpSurface) |
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset
|
484 |
end; |
759 | 485 |
if fpsTexture <> nil then |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
486 |
DrawTexture(cScreenWidth div 2 - 50, 10, fpsTexture); |
4 | 487 |
end; |
174 | 488 |
|
489 |
inc(SoundTimerTicks, Lag); |
|
490 |
if SoundTimerTicks >= 50 then |
|
491 |
begin |
|
492 |
SoundTimerTicks:= 0; |
|
493 |
if cVolumeDelta <> 0 then |
|
494 |
begin |
|
495 |
str(ChangeVolume(cVolumeDelta), s); |
|
175 | 496 |
AddCaption(Format(trmsg[sidVolume], s), $FFFFFF, capgrpVolume) |
174 | 497 |
end |
756 | 498 |
end; |
499 |
||
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
500 |
if GameState = gsConfirm then DrawCentered(0, cScreenHeight div 2, ConfirmTexture); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
501 |
|
2162 | 502 |
SetScale(zoom); |
1023 | 503 |
|
2287 | 504 |
// Cursor |
505 |
if isCursorVisible then |
|
506 |
begin |
|
507 |
if not bShowAmmoMenu then |
|
508 |
with CurrentHedgehog^ do |
|
509 |
if (Gear^.State and gstHHChooseTarget) <> 0 then |
|
510 |
begin |
|
511 |
i:= Ammo^[CurSlot, CurAmmo].Pos; |
|
512 |
with Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType] do |
|
513 |
if PosCount > 1 then |
|
514 |
DrawSprite(PosSprite, CursorPoint.X - SpritesData[PosSprite].Width div 2, |
|
515 |
cScreenHeight - CursorPoint.Y - SpritesData[PosSprite].Height div 2, |
|
516 |
i); |
|
517 |
end; |
|
518 |
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8) |
|
519 |
end; |
|
520 |
||
521 |
||
775 | 522 |
glDisable(GL_TEXTURE_2D); |
756 | 523 |
glDisable(GL_BLEND) |
4 | 524 |
end; |
525 |
||
108 | 526 |
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); |
4 | 527 |
begin |
2142 | 528 |
//if Group in [capgrpGameState] then WriteLnToConsole(s); |
762 | 529 |
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); |
4 | 530 |
|
762 | 531 |
Captions[Group].Tex:= RenderStringTex(s, Color, fntBig); |
2142 | 532 |
|
533 |
case Group of |
|
534 |
capgrpGameState: Captions[Group].EndTime:= RealTicks + 2200 |
|
535 |
else |
|
536 |
Captions[Group].EndTime:= RealTicks + 1570 |
|
537 |
end; |
|
4 | 538 |
end; |
539 |
||
79 | 540 |
procedure MoveCamera; |
4 | 541 |
const PrevSentPointTime: LongWord = 0; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
542 |
var EdgesDist, cw: LongInt; |
4 | 543 |
begin |
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
544 |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
545 |
cw:= round(cScreenWidth / cScaleFactor); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
546 |
|
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
|
547 |
if (not (CurrentTeam^.ExtDriven and isCursorVisible)) and cHasFocus then |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
548 |
begin |
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
549 |
{$IFDEF SDL13} |
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
550 |
SDL_GetMouseState(0, @CursorPoint.X, @CursorPoint.Y); |
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
551 |
{$ELSE} |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
552 |
SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); |
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset
|
553 |
{$ENDIF} |
2162 | 554 |
CursorPoint.X:= CursorPoint.X - cScreenWidth div 2; |
2197 | 555 |
CursorPoint.Y:= cScreenHeight - CursorPoint.Y; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
556 |
end; |
678 | 557 |
|
1595
33529f567d2d
Don't set focus on gears when curor is visible (should fix cursor jumping)
unc0rr
parents:
1529
diff
changeset
|
558 |
if (FollowGear <> nil) and (not isCursorVisible) then |
1689 | 559 |
if abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y) > 4 then |
560 |
begin |
|
561 |
FollowGear:= nil; |
|
2197 | 562 |
prevPoint:= CursorPoint; |
1689 | 563 |
exit |
564 |
end |
|
565 |
else begin |
|
2198 | 566 |
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; |
2197 | 567 |
//addcaption(inttostr(CursorPoint.X), $AFAFAF, capgrpGameState); |
568 |
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight - (hwRound(FollowGear^.Y) + WorldDy)) div 8; |
|
1689 | 569 |
end; |
4 | 570 |
|
2197 | 571 |
if ((CursorPoint.X = prevPoint.X) and (CursorPoint.Y = prevpoint.Y)) then exit; |
4 | 572 |
|
1120 | 573 |
if AMxShift < 210 then |
1689 | 574 |
begin |
2178
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset
|
575 |
if CursorPoint.X < cScreenWidth div 2 + AMxShift - 175 then CursorPoint.X:= cScreenWidth div 2 + AMxShift - 175; |
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset
|
576 |
if CursorPoint.X > cScreenWidth div 2 + AMxShift - 10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift - 10; |
2197 | 577 |
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; |
578 |
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; |
|
1689 | 579 |
prevPoint:= CursorPoint; |
2197 | 580 |
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight - CursorPoint.Y); |
1689 | 581 |
exit |
582 |
end; |
|
162 | 583 |
|
4 | 584 |
if isCursorVisible then |
1689 | 585 |
begin |
2197 | 586 |
if (not CurrentTeam^.ExtDriven) and (GameTicks >= PrevSentPointTime + cSendCursorPosTime) then |
1689 | 587 |
begin |
588 |
SendIPCXY('P', CursorPoint.X - WorldDx, CursorPoint.Y - WorldDy); |
|
589 |
PrevSentPointTime:= GameTicks |
|
590 |
end; |
|
591 |
end; |
|
351 | 592 |
|
4 | 593 |
if isCursorVisible or (FollowGear <> nil) then |
594 |
begin |
|
284 | 595 |
if isCursorVisible then EdgesDist:= cCursorEdgesDist |
596 |
else EdgesDist:= cGearScrEdgesDist; |
|
2197 | 597 |
if CursorPoint.X < - cScreenWidth div 2 + EdgesDist then |
4 | 598 |
begin |
2197 | 599 |
WorldDx:= WorldDx - CursorPoint.X - cScreenWidth div 2 + EdgesDist; |
600 |
CursorPoint.X:= - cScreenWidth div 2 + EdgesDist |
|
4 | 601 |
end else |
2197 | 602 |
if CursorPoint.X > cScreenWidth div 2 - EdgesDist then |
4 | 603 |
begin |
2197 | 604 |
WorldDx:= WorldDx - CursorPoint.X + cScreenWidth div 2 - EdgesDist; |
2198 | 605 |
CursorPoint.X:= cScreenWidth div 2 - EdgesDist |
4 | 606 |
end; |
284 | 607 |
if CursorPoint.Y < EdgesDist then |
4 | 608 |
begin |
2197 | 609 |
WorldDy:= WorldDy + CursorPoint.Y - EdgesDist; |
284 | 610 |
CursorPoint.Y:= EdgesDist |
4 | 611 |
end else |
284 | 612 |
if CursorPoint.Y > cScreenHeight - EdgesDist then |
4 | 613 |
begin |
2197 | 614 |
WorldDy:= WorldDy + CursorPoint.Y - cScreenHeight + EdgesDist; |
284 | 615 |
CursorPoint.Y:= cScreenHeight - EdgesDist |
4 | 616 |
end; |
617 |
end else |
|
308 | 618 |
if cHasFocus then |
619 |
begin |
|
70 | 620 |
WorldDx:= WorldDx - CursorPoint.X + prevPoint.X; |
2197 | 621 |
WorldDy:= WorldDy + CursorPoint.Y - prevPoint.Y; |
2162 | 622 |
CursorPoint.X:= 0; |
623 |
CursorPoint.Y:= cScreenHeight div 2; |
|
308 | 624 |
end; |
351 | 625 |
|
4 | 626 |
prevPoint:= CursorPoint; |
2197 | 627 |
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight - CursorPoint.Y); |
75 | 628 |
if WorldDy < cScreenHeight - cWaterLine - cVisibleWater then WorldDy:= cScreenHeight - cWaterLine - cVisibleWater; |
1760 | 629 |
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
630 |
if WorldDx < -round(LAND_WIDTH * 2 / cScaleFactor) then WorldDx:= -round(LAND_WIDTH * 2 / cScaleFactor); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset
|
631 |
if WorldDx > cw then WorldDx:= cw; |
4 | 632 |
end; |
633 |
||
634 |
initialization |
|
635 |
FillChar(Captions, sizeof(Captions), 0) |
|
636 |
||
637 |
end. |