author | koda |
Mon, 29 Oct 2012 21:14:48 +0100 | |
changeset 7881 | 3ac3ff6c7c4f |
parent 7850 | fcbb024090a4 |
child 7857 | 2bc61f8841a1 |
child 7896 | 67217e6108fd |
permissions | -rw-r--r-- |
2947 | 1 |
(* |
6952 | 2 |
* Hedgewars, a free turn based strategy game |
3 |
* Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com> |
|
4 |
* |
|
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 |
|
8 |
* |
|
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. |
|
13 |
* |
|
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 |
|
17 |
*) |
|
51 | 18 |
|
2599 | 19 |
{$INCLUDE "options.inc"} |
2587
0dfa56a8513c
fix a segfault in the iphone simulator by moving options.inc at the beginning of the file
koda
parents:
2586
diff
changeset
|
20 |
|
2800 | 21 |
{$IFDEF WIN32} |
22 |
{$R hwengine.rc} |
|
23 |
{$ENDIF} |
|
24 |
||
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
25 |
{$IFDEF HWLIBRARY} |
2698 | 26 |
unit hwengine; |
27 |
interface |
|
28 |
{$ELSE} |
|
51 | 29 |
program hwengine; |
2698 | 30 |
{$ENDIF} |
3407 | 31 |
|
7837 | 32 |
uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler, |
33 |
uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions, |
|
7044 | 34 |
SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted |
7447
01111960a48d
uploading to youtube, it works, but user interface is still incomplete
Stepan777 <stepik-777@mail.ru>
parents:
7442
diff
changeset
|
35 |
{$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF} |
7837 | 36 |
{$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF} |
37 |
{$IFDEF ANDROID}, GLUnit{$ENDIF} |
|
38 |
; |
|
3697 | 39 |
|
40 |
||
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
41 |
{$IFDEF HWLIBRARY} |
3525 | 42 |
procedure initEverything(complete:boolean); |
43 |
procedure freeEverything(complete:boolean); |
|
5339 | 44 |
procedure Game(gameArgs: PPChar); cdecl; export; |
5458 | 45 |
procedure GenLandPreview(port: Longint); cdecl; export; |
51 | 46 |
|
2698 | 47 |
implementation |
48 |
{$ELSE} |
|
3611 | 49 |
procedure initEverything(complete:boolean); forward; |
3525 | 50 |
procedure freeEverything(complete:boolean); forward; |
2698 | 51 |
{$ENDIF} |
51 | 52 |
|
7850 | 53 |
//////////////////////////////////////////////////////////////////////////////// |
7025 | 54 |
function DoTimer(Lag: LongInt): boolean; |
2905 | 55 |
var s: shortstring; |
51 | 56 |
begin |
7025 | 57 |
DoTimer:= false; |
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
58 |
inc(RealTicks, Lag); |
564 | 59 |
|
2947 | 60 |
case GameState of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
61 |
gsLandGen: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
62 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
63 |
GenMap; |
7850 | 64 |
SetLandTexture; |
65 |
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false); |
|
66 |
setAILandMarks; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
67 |
ParseCommand('sendlanddigest', true); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
68 |
GameState:= gsStart; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
69 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
70 |
gsStart: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
71 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
72 |
if HasBorder then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
73 |
DisableSomeWeapons; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
74 |
AddClouds; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
75 |
AddFlakes; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
76 |
AssignHHCoords; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
77 |
AddMiscGears; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6954
diff
changeset
|
78 |
StoreLoad(false); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
79 |
InitWorld; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
80 |
ResetKbd; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
81 |
if GameType = gmtSave then |
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
82 |
SetSound(false); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
83 |
FinishProgress; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
84 |
PlayMusic; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
85 |
SetScale(zoom); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
86 |
ScriptCall('onGameStart'); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
87 |
GameState:= gsGame; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
88 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
89 |
gsConfirm, gsGame: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
90 |
begin |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
91 |
DrawWorld(Lag); |
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
92 |
DoGameTick(Lag); |
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
93 |
ProcessVisualGears(Lag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
94 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
95 |
gsChat: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
96 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
97 |
DrawWorld(Lag); |
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
98 |
DoGameTick(Lag); |
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
99 |
ProcessVisualGears(Lag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
100 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
101 |
gsExit: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
102 |
begin |
7025 | 103 |
DoTimer:= true; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
104 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
105 |
gsSuspend: |
7054 | 106 |
exit(false); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
107 |
end; |
564 | 108 |
|
7049 | 109 |
SwapBuffers; |
4454 | 110 |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
111 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 112 |
if flagPrerecording then |
113 |
SaveCameraPosition; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
114 |
{$ENDIF} |
7180 | 115 |
|
2947 | 116 |
if flagMakeCapture then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
117 |
begin |
2947 | 118 |
flagMakeCapture:= false; |
7151 | 119 |
{$IFDEF PAS2C} |
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
120 |
s:= '/Screenshots/hw'; |
7151 | 121 |
{$ELSE} |
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
122 |
s:= '/Screenshots/hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks); |
7151 | 123 |
{$ENDIF} |
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
124 |
|
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
125 |
// flash |
4359 | 126 |
playSound(sndShutter); |
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
127 |
ScreenFade:= sfFromWhite; |
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
128 |
ScreenFadeValue:= sfMax; |
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
129 |
ScreenFadeSpeed:= 5; |
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
130 |
|
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
131 |
if MakeScreenshot(s, 1) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
132 |
WriteLnToConsole('Screenshot saved: ' + s) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
133 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
134 |
begin |
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
135 |
WriteLnToConsole('Screenshot failed.'); |
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
136 |
AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)'); |
6267
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset
|
137 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
138 |
end; |
51 | 139 |
end; |
140 |
||
7850 | 141 |
//////////////////////////////////////////////////////////////////////////////// |
3697 | 142 |
procedure MainLoop; |
6267
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset
|
143 |
var event: TSDL_Event; |
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset
|
144 |
PrevTime, CurrTime: Longword; |
7025 | 145 |
isTerminated: boolean; |
6013 | 146 |
{$IFDEF SDL13} |
5975 | 147 |
previousGameState: TGameState; |
6019 | 148 |
{$ELSE} |
5521 | 149 |
prevFocusState: boolean; |
6013 | 150 |
{$ENDIF} |
2698 | 151 |
begin |
7025 | 152 |
isTerminated:= false; |
2947 | 153 |
PrevTime:= SDL_GetTicks; |
3063 | 154 |
while isTerminated = false do |
155 |
begin |
|
5724 | 156 |
SDL_PumpEvents(); |
6598
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset
|
157 |
|
6072 | 158 |
while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do |
2947 | 159 |
begin |
5339 | 160 |
case event.type_ of |
6072 | 161 |
{$IFDEF SDL13} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
162 |
SDL_KEYDOWN: |
7025 | 163 |
if GameState = gsChat then |
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3634
diff
changeset
|
164 |
// sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3 |
7025 | 165 |
KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym))//TODO correct for keymodifiers |
166 |
else |
|
167 |
ProcessKey(event.key); |
|
6917 | 168 |
SDL_KEYUP: |
7025 | 169 |
if GameState <> gsChat then |
170 |
ProcessKey(event.key); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
171 |
|
5339 | 172 |
SDL_WINDOWEVENT: |
5052 | 173 |
if event.window.event = SDL_WINDOWEVENT_SHOWN then |
7025 | 174 |
begin |
4454 | 175 |
cHasFocus:= true; |
5521 | 176 |
onFocusStateChanged() |
7025 | 177 |
end |
5975 | 178 |
else if event.window.event = SDL_WINDOWEVENT_MINIMIZED then |
7025 | 179 |
begin |
5975 | 180 |
previousGameState:= GameState; |
181 |
GameState:= gsSuspend; |
|
7025 | 182 |
end |
5975 | 183 |
else if event.window.event = SDL_WINDOWEVENT_RESTORED then |
7025 | 184 |
begin |
5975 | 185 |
GameState:= previousGameState; |
6611 | 186 |
{$IFDEF ANDROID} |
187 |
//This call is used to reinitialize the glcontext and reload the textures |
|
6598
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset
|
188 |
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); |
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset
|
189 |
{$ENDIF} |
7025 | 190 |
end |
6021 | 191 |
else if event.window.event = SDL_WINDOWEVENT_RESIZED then |
7025 | 192 |
begin |
6021 | 193 |
cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth); |
194 |
cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight); |
|
6611 | 195 |
cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF}; |
7025 | 196 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
197 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
198 |
SDL_FINGERMOTION: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
199 |
onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
200 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
201 |
SDL_FINGERDOWN: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
202 |
onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
203 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
204 |
SDL_FINGERUP: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
205 |
onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); |
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3634
diff
changeset
|
206 |
{$ELSE} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
207 |
SDL_KEYDOWN: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
208 |
if GameState = gsChat then |
6917 | 209 |
KeyPressChat(event.key.keysym.unicode) |
210 |
else |
|
211 |
ProcessKey(event.key); |
|
212 |
SDL_KEYUP: |
|
7025 | 213 |
if GameState <> gsChat then |
214 |
ProcessKey(event.key); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
215 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
216 |
SDL_MOUSEBUTTONDOWN: |
7025 | 217 |
ProcessMouse(event.button, true); |
218 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
219 |
SDL_MOUSEBUTTONUP: |
6917 | 220 |
ProcessMouse(event.button, false); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
221 |
|
2947 | 222 |
SDL_ACTIVEEVENT: |
223 |
if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then |
|
7025 | 224 |
begin |
5521 | 225 |
prevFocusState:= cHasFocus; |
2947 | 226 |
cHasFocus:= event.active.gain = 1; |
5521 | 227 |
if prevFocusState xor cHasFocus then |
228 |
onFocusStateChanged() |
|
7025 | 229 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
230 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
231 |
SDL_VIDEORESIZE: |
7025 | 232 |
begin |
5816
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
233 |
// using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts |
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
234 |
// Change by sheepluva: |
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
235 |
// Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values. |
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
236 |
// Maybe just fixes the symptom not the actual cause(?), I'm too tired to find out :P |
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
237 |
cNewScreenWidth:= max(2 * (event.resize.w div 2), cMinScreenWidth); |
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset
|
238 |
cNewScreenHeight:= max(2 * (event.resize.h div 2), cMinScreenHeight); |
5732
f3f381011728
Add a delay before applying screen resize to cut down on resize events (especially bad on OSes that need texture recreation)
nemo
parents:
5730
diff
changeset
|
239 |
cScreenResizeDelay:= RealTicks+500; |
7025 | 240 |
end; |
3463 | 241 |
{$ENDIF} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
242 |
SDL_JOYAXISMOTION: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
243 |
ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
244 |
SDL_JOYHATMOTION: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
245 |
ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
246 |
SDL_JOYBUTTONDOWN: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
247 |
ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
248 |
SDL_JOYBUTTONUP: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
249 |
ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
250 |
SDL_QUITEV: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
251 |
isTerminated:= true |
7025 | 252 |
end; //end case event.type_ of |
253 |
end; //end while SDL_PollEvent(@event) <> 0 do |
|
5732
f3f381011728
Add a delay before applying screen resize to cut down on resize events (especially bad on OSes that need texture recreation)
nemo
parents:
5730
diff
changeset
|
254 |
|
7025 | 255 |
if (cScreenResizeDelay <> 0) and (cScreenResizeDelay < RealTicks) and |
256 |
((cNewScreenWidth <> cScreenWidth) or (cNewScreenHeight <> cScreenHeight)) then |
|
257 |
begin |
|
258 |
cScreenResizeDelay:= 0; |
|
259 |
cScreenWidth:= cNewScreenWidth; |
|
260 |
cScreenHeight:= cNewScreenHeight; |
|
3463 | 261 |
|
7025 | 262 |
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); |
263 |
WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight)); |
|
264 |
ScriptOnScreenResize(); |
|
265 |
InitCameraBorders(); |
|
266 |
InitTouchInterface(); |
|
267 |
end; |
|
268 |
||
269 |
CurrTime:= SDL_GetTicks(); |
|
6863 | 270 |
if PrevTime + longword(cTimerInterval) <= CurrTime then |
271 |
begin |
|
7025 | 272 |
isTerminated:= DoTimer(CurrTime - PrevTime); |
6863 | 273 |
PrevTime:= CurrTime |
274 |
end |
|
275 |
else SDL_Delay(1); |
|
276 |
IPCCheckSock(); |
|
3063 | 277 |
end; |
2698 | 278 |
end; |
279 |
||
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
280 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 281 |
procedure RecorderMainLoop; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
282 |
var oldGameTicks, oldRealTicks, newGameTicks, newRealTicks: LongInt; |
7180 | 283 |
begin |
284 |
if not BeginVideoRecording() then |
|
285 |
exit; |
|
286 |
DoTimer(0); // gsLandGen -> gsStart |
|
287 |
DoTimer(0); // gsStart -> gsGame |
|
288 |
||
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
289 |
if not LoadNextCameraPosition(newRealTicks, newGameTicks) then |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
290 |
exit; |
7180 | 291 |
fastScrolling:= true; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
292 |
DoGameTick(newGameTicks); |
7180 | 293 |
fastScrolling:= false; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
294 |
oldRealTicks:= 0; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
295 |
oldGameTicks:= newGameTicks; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
296 |
|
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
297 |
while LoadNextCameraPosition(newRealTicks, newGameTicks) do |
7180 | 298 |
begin |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
299 |
IPCCheckSock(); |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
300 |
DoGameTick(newGameTicks - oldGameTicks); |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
301 |
if GameState = gsExit then |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
302 |
break; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
303 |
ProcessVisualGears(newRealTicks - oldRealTicks); |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
304 |
DrawWorld(newRealTicks - oldRealTicks); |
7180 | 305 |
EncodeFrame(); |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
306 |
oldRealTicks:= newRealTicks; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
307 |
oldGameTicks:= newGameTicks; |
7180 | 308 |
end; |
309 |
StopVideoRecording(); |
|
310 |
end; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
311 |
{$ENDIF} |
7180 | 312 |
|
7850 | 313 |
//////////////////////////////////////////////////////////////////////////////// |
6072 | 314 |
procedure Game{$IFDEF HWLIBRARY}(gameArgs: PPChar); cdecl; export{$ENDIF}; |
7025 | 315 |
var p: TPathType; |
2947 | 316 |
s: shortstring; |
3611 | 317 |
i: LongInt; |
2698 | 318 |
begin |
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
319 |
{$IFDEF HWLIBRARY} |
7848
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
320 |
initEverything(true); |
5109
6d2e8a24277e
strangely enough, the new sdl rotation code is incompatible with our system... this is a workaround that should hold up until their code becomes more stable
koda
parents:
5066
diff
changeset
|
321 |
cShowFPS:= {$IFDEF DEBUGFILE}true{$ELSE}false{$ENDIF}; |
7151 | 322 |
ipcPort:= StrToInt(gameArgs[0]); |
323 |
cScreenWidth:= StrToInt(gameArgs[1]); |
|
324 |
cScreenHeight:= StrToInt(gameArgs[2]); |
|
325 |
cReducedQuality:= StrToInt(gameArgs[3]); |
|
5339 | 326 |
cLocaleFName:= gameArgs[4]; |
6603
ef9ed71e3cf7
ios sanity restored: applied new paths for sdl projects, turned off fullscreen, added 3 lines of documentation, removal of sdl patch (every mod has been integrated mainstream)
koda
parents:
6598
diff
changeset
|
327 |
// cFullScreen functionality is platform dependent, ifdef it if you need to modify it |
ef9ed71e3cf7
ios sanity restored: applied new paths for sdl projects, turned off fullscreen, added 3 lines of documentation, removal of sdl patch (every mod has been integrated mainstream)
koda
parents:
6598
diff
changeset
|
328 |
cFullScreen:= false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
329 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
330 |
if (Length(cLocaleFName) > 6) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
331 |
cLocale := Copy(cLocaleFName,1,5) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
332 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
333 |
cLocale := Copy(cLocaleFName,1,2); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
334 |
|
5339 | 335 |
UserNick:= gameArgs[5]; |
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
336 |
SetSound(gameArgs[6] = '1'); |
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
337 |
SetMusic(gameArgs[7] = '1'); |
5339 | 338 |
cAltDamage:= gameArgs[8] = '1'; |
6029
5073285b6599
changed Game arguments to accept data path on 9th array element (like planned)
koda
parents:
6023
diff
changeset
|
339 |
PathPrefix:= gameArgs[9]; |
6341 | 340 |
UserPathPrefix:= '../Documents'; |
5339 | 341 |
recordFileName:= gameArgs[10]; |
4814
e19791f08443
smaller rearrangement of (non stereo related) variables
koda
parents:
4812
diff
changeset
|
342 |
cStereoMode:= smNone; |
3624 | 343 |
{$ENDIF} |
5814
9ac119696510
change minimum resolution back to 640x480 (full weapon menu too big for smaller screens)
sheepluva
parents:
5732
diff
changeset
|
344 |
cMinScreenWidth:= min(cScreenWidth, cMinScreenWidth); |
9ac119696510
change minimum resolution back to 640x480 (full weapon menu too big for smaller screens)
sheepluva
parents:
5732
diff
changeset
|
345 |
cMinScreenHeight:= min(cScreenHeight, cMinScreenHeight); |
5686 | 346 |
cOrigScreenWidth:= cScreenWidth; |
347 |
cOrigScreenHeight:= cScreenHeight; |
|
3613 | 348 |
|
3611 | 349 |
WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')'); |
350 |
AddFileLog('Prefix: "' + PathPrefix +'"'); |
|
5339 | 351 |
AddFileLog('UserPrefix: "' + UserPathPrefix +'"'); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
352 |
|
3611 | 353 |
for i:= 0 to ParamCount do |
354 |
AddFileLog(inttostr(i) + ': ' + ParamStr(i)); |
|
2698 | 355 |
|
2947 | 356 |
for p:= Succ(Low(TPathType)) to High(TPathType) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
357 |
if (p <> ptMapCurrent) and (p <> ptData) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
358 |
UserPathz[p]:= UserPathPrefix + '/Data/' + Pathz[p]; |
5339 | 359 |
|
360 |
UserPathz[ptData]:= UserPathPrefix + '/Data'; |
|
361 |
||
362 |
for p:= Succ(Low(TPathType)) to High(TPathType) do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
363 |
if p <> ptMapCurrent then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
364 |
Pathz[p]:= PathPrefix + '/' + Pathz[p]; |
3697 | 365 |
|
2947 | 366 |
WriteToConsole('Init SDL... '); |
4773
69f8431a5d20
yay, sdl resumed development and accepted some of our patches in mainstream
koda
parents:
4744
diff
changeset
|
367 |
SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true); |
2947 | 368 |
WriteLnToConsole(msgOK); |
2698 | 369 |
|
2947 | 370 |
SDL_EnableUNICODE(1); |
5565 | 371 |
SDL_ShowCursor(0); |
2698 | 372 |
|
2947 | 373 |
WriteToConsole('Init SDL_ttf... '); |
374 |
SDLTry(TTF_Init() <> -1, true); |
|
375 |
WriteLnToConsole(msgOK); |
|
2698 | 376 |
|
7286 | 377 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 378 |
if GameType = gmtRecord then |
379 |
InitOffscreenOpenGL() |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
380 |
else |
7286 | 381 |
{$ENDIF} |
7180 | 382 |
begin |
383 |
// show main window |
|
384 |
if cFullScreen then |
|
385 |
ParseCommand('fullscr 1', true) |
|
386 |
else |
|
387 |
ParseCommand('fullscr 0', true); |
|
388 |
end; |
|
2698 | 389 |
|
2947 | 390 |
ControllerInit(); // has to happen before InitKbdKeyTable to map keys |
391 |
InitKbdKeyTable(); |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5167
diff
changeset
|
392 |
AddProgress(); |
2698 | 393 |
|
5339 | 394 |
LoadLocale(UserPathz[ptLocale] + '/en.txt'); // Do an initial load with english |
2947 | 395 |
LoadLocale(Pathz[ptLocale] + '/en.txt'); // Do an initial load with english |
396 |
if cLocaleFName <> 'en.txt' then |
|
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
397 |
begin |
2719 | 398 |
// Try two letter locale first before trying specific locale overrides |
5110 | 399 |
if (Length(cLocale) > 2) and (Copy(cLocale,1,2) <> 'en') then |
5339 | 400 |
begin |
401 |
LoadLocale(UserPathz[ptLocale] + '/' + Copy(cLocale,1,2)+'.txt'); |
|
402 |
LoadLocale(Pathz[ptLocale] + '/' + Copy(cLocale,1,2)+'.txt') |
|
403 |
end; |
|
404 |
LoadLocale(UserPathz[ptLocale] + '/' + cLocaleFName); |
|
405 |
LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName) |
|
5107
d7fc678d78f4
Allow override of voicepack with a locale voicepack. Untested, but should mean that a Default voice should use the Ukranian version if that is their locale.
nemo
parents:
5066
diff
changeset
|
406 |
end |
d7fc678d78f4
Allow override of voicepack with a locale voicepack. Untested, but should mean that a Default voice should use the Ukranian version if that is their locale.
nemo
parents:
5066
diff
changeset
|
407 |
else cLocale := 'en'; |
2698 | 408 |
|
3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3843
diff
changeset
|
409 |
WriteLnToConsole(msgGettingConfig); |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
410 |
|
2947 | 411 |
if recordFileName = '' then |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
412 |
begin |
3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3843
diff
changeset
|
413 |
InitIPC; |
7073 | 414 |
SendIPCAndWaitReply(_S'C'); // ask for game config |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
415 |
end |
2947 | 416 |
else |
417 |
LoadRecordFromFile(recordFileName); |
|
2698 | 418 |
|
2947 | 419 |
ScriptOnGameInit; |
420 |
s:= 'eproto ' + inttostr(cNetProtoVersion); |
|
421 |
SendIPCRaw(@s[0], Length(s) + 1); // send proto version |
|
422 |
||
423 |
InitTeams(); |
|
424 |
AssignStores(); |
|
7180 | 425 |
|
426 |
if GameType = gmtRecord then |
|
427 |
SetSound(false); |
|
428 |
||
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
429 |
InitSound(); |
2590 | 430 |
|
2947 | 431 |
isDeveloperMode:= false; |
432 |
TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); |
|
433 |
ParseCommand('rotmask', true); |
|
7286 | 434 |
|
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
435 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 436 |
if GameType = gmtRecord then |
437 |
RecorderMainLoop() |
|
438 |
else |
|
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
439 |
{$ENDIF} |
7180 | 440 |
MainLoop(); |
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
441 |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
442 |
// clean up all the memory allocated |
3611 | 443 |
freeEverything(true); |
2698 | 444 |
end; |
2590 | 445 |
|
7850 | 446 |
//////////////////////////////////////////////////////////////////////////////// |
447 |
// As a rule of thumb, every module that is listed in either initEverything or |
|
448 |
// freeEverything should come in pair, even if they are stubs. Only use this |
|
449 |
// section for inialising variables and remeber that game args overwrite these, |
|
450 |
// so handle this section with care. Pay attention to the init/free order too! |
|
3525 | 451 |
procedure initEverything (complete:boolean); |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
452 |
begin |
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
453 |
Randomize(); |
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
454 |
|
7850 | 455 |
uUtils.initModule(complete); // opens the debug file, must be the first |
456 |
uVariables.initModule; // inits all global variables |
|
457 |
uConsole.initModule; // opens stdout |
|
458 |
uCommands.initModule; // helps below |
|
459 |
uCommandHandlers.initModule; // registers all messages from frontend |
|
3525 | 460 |
|
7850 | 461 |
uLand.initModule; // computes land |
462 |
uLandPainted.initModule; // computes drawn land |
|
463 |
uIO.initModule; // sets up sockets |
|
3697 | 464 |
|
3525 | 465 |
if complete then |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
466 |
begin |
7850 | 467 |
{$IFDEF ANDROID}GLUnit.initModule;{$ENDIF} |
7837 | 468 |
{$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF} |
7850 | 469 |
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF} //stub |
6415 | 470 |
uAI.initModule; |
3525 | 471 |
uAIMisc.initModule; |
7850 | 472 |
uAILandMarks.initModule; //stub |
3525 | 473 |
uAmmos.initModule; |
7850 | 474 |
uCaptions.initModule; |
475 |
||
3525 | 476 |
uChat.initModule; |
477 |
uCollisions.initModule; |
|
478 |
uGears.initModule; |
|
7850 | 479 |
uInputHandler.initModule; //stub |
480 |
uMisc.initModule; |
|
481 |
uLandTexture.initModule; //stub |
|
3525 | 482 |
uScript.initModule; |
483 |
uSound.initModule; |
|
484 |
uStats.initModule; |
|
485 |
uStore.initModule; |
|
486 |
uTeams.initModule; |
|
487 |
uVisualGears.initModule; |
|
488 |
uWorld.initModule; |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
489 |
end; |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
490 |
end; |
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
491 |
|
3525 | 492 |
procedure freeEverything (complete:boolean); |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
493 |
begin |
3525 | 494 |
if complete then |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
495 |
begin |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
496 |
WriteLnToConsole('Freeing resources...'); |
7850 | 497 |
uAI.freeModule; // AI things need to be freed first |
498 |
uAIMisc.freeModule; //stub |
|
7433
c7fff3e61d49
- Implement AI land marks which only used to tracks visited areas on the map for now. Significantly reduces wasting of cpu time by AI checking same place several times (10x or even more in rare cases)
unc0rr
parents:
7151
diff
changeset
|
499 |
uAILandMarks.freeModule; |
4393 | 500 |
uCaptions.freeModule; |
3525 | 501 |
uWorld.freeModule; |
3615 | 502 |
uVisualGears.freeModule; |
3525 | 503 |
uTeams.freeModule; |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
504 |
uInputHandler.freeModule; |
3525 | 505 |
uStats.freeModule; //stub |
3615 | 506 |
uSound.freeModule; |
3525 | 507 |
uScript.freeModule; |
7850 | 508 |
uMisc.freeModule; |
3612
b50215a8a43d
land arrays are allocated dynamically, so DOWNSCALE and LOWRES macros are now removed and replaced by run time flags rqBlurryLand and rqLowRes
koda
parents:
3611
diff
changeset
|
509 |
uLandTexture.freeModule; |
3525 | 510 |
uGears.freeModule; |
511 |
uCollisions.freeModule; //stub |
|
4901 | 512 |
uChat.freeModule; |
3525 | 513 |
uAmmos.freeModule; |
7850 | 514 |
uStore.freeModule; // closes SDL |
7286 | 515 |
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF} |
7850 | 516 |
{$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF} //stub |
517 |
{$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF} |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
518 |
end; |
3697 | 519 |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
520 |
uIO.freeModule; |
3038 | 521 |
uLand.freeModule; |
5066 | 522 |
uLandPainted.freeModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
523 |
|
4413 | 524 |
uCommandHandlers.freeModule; |
4373 | 525 |
uCommands.freeModule; |
7850 | 526 |
uConsole.freeModule; // closes stdout |
4359 | 527 |
uVariables.freeModule; |
7850 | 528 |
uUtils.freeModule; // closes debug file |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
529 |
end; |
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
530 |
|
7850 | 531 |
//////////////////////////////////////////////////////////////////////////////// |
3610 | 532 |
procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF}; |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
533 |
var Preview: TPreview; |
2698 | 534 |
begin |
7848
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
535 |
{$IFDEF HWLIBRARY} |
3611 | 536 |
initEverything(false); |
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
537 |
WriteLnToConsole('Preview connecting on port ' + inttostr(port)); |
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
538 |
ipcPort:= port; |
6634
e00762923086
ios game configuration page supports rotation, with some enhancements (like the new slider); some glitches here and there
koda
parents:
6611
diff
changeset
|
539 |
InitStepsFlags:= cifRandomize; |
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
540 |
{$ENDIF} |
2947 | 541 |
InitIPC; |
542 |
IPCWaitPongEvent; |
|
543 |
TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); |
|
2698 | 544 |
|
7051 | 545 |
GenPreview(Preview); |
2947 | 546 |
WriteLnToConsole('Sending preview...'); |
547 |
SendIPCRaw(@Preview, sizeof(Preview)); |
|
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
548 |
SendIPCRaw(@MaxHedgehogs, sizeof(byte)); |
2947 | 549 |
WriteLnToConsole('Preview sent, disconnect'); |
3525 | 550 |
freeEverything(false); |
2698 | 551 |
end; |
552 |
||
3021 | 553 |
{$IFNDEF HWLIBRARY} |
7850 | 554 |
//////////////////////////////////////////////////////////////////////////////// |
2008 | 555 |
procedure DisplayUsage; |
2691 | 556 |
var i: LongInt; |
2008 | 557 |
begin |
7151 | 558 |
WriteLn(stdout, 'Wrong argument format: correct configurations is'); |
559 |
WriteLn(stdout, ''); |
|
560 |
WriteLn(stdout, ' hwengine <path to user hedgewars folder> <path to global data folder> <path to replay file> [options]'); |
|
561 |
WriteLn(stdout, ''); |
|
562 |
WriteLn(stdout, 'where [options] must be specified either as:'); |
|
563 |
WriteLn(stdout, ' --set-video [screen width] [screen height] [color dept]'); |
|
564 |
WriteLn(stdout, ' --set-audio [volume] [enable music] [enable sounds]'); |
|
565 |
WriteLn(stdout, ' --set-other [language file] [full screen] [show FPS]'); |
|
566 |
WriteLn(stdout, ' --set-multimedia [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]'); |
|
567 |
WriteLn(stdout, ' --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]'); |
|
568 |
WriteLn(stdout, ' --stats-only'); |
|
569 |
WriteLn(stdout, ''); |
|
570 |
WriteLn(stdout, 'Read documentation online at http://code.google.com/p/hedgewars/wiki/CommandLineOptions for more information'); |
|
571 |
WriteLn(stdout, ''); |
|
572 |
Write(stdout, 'PARSED COMMAND: '); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
573 |
|
2947 | 574 |
for i:=0 to ParamCount do |
7151 | 575 |
Write(stdout, ParamStr(i) + ' '); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
576 |
|
7151 | 577 |
WriteLn(stdout, ''); |
2008 | 578 |
end; |
579 |
||
7850 | 580 |
//////////////////////////////////////////////////////////////////////////////// |
3678
00428183300f
patch by lucass (polished by me) - command line parsing is now much more flexible
koda
parents:
3670
diff
changeset
|
581 |
{$INCLUDE "ArgParsers.inc"} |
00428183300f
patch by lucass (polished by me) - command line parsing is now much more flexible
koda
parents:
3670
diff
changeset
|
582 |
|
51 | 583 |
procedure GetParams; |
97
e7c1df9cce2c
- make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents:
81
diff
changeset
|
584 |
begin |
5339 | 585 |
if (ParamCount < 3) then |
3678
00428183300f
patch by lucass (polished by me) - command line parsing is now much more flexible
koda
parents:
3670
diff
changeset
|
586 |
GameType:= gmtSyntax |
00428183300f
patch by lucass (polished by me) - command line parsing is now much more flexible
koda
parents:
3670
diff
changeset
|
587 |
else |
7848
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
588 |
if (ParamCount = 3) and (ParamStr(3) = 'landpreview') then |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
589 |
begin |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
590 |
initEverything(false); |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
591 |
ipcPort:= StrToInt(ParamStr(2)); |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
592 |
GameType:= gmtLandPreview; |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
593 |
exit; |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
594 |
end |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
595 |
else |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
596 |
begin |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
597 |
initEverything(true); |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
598 |
if (ParamCount = 3) and (ParamStr(3) = '--stats-only') then |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
599 |
playReplayFileWithParameters() |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
600 |
else |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
601 |
if ParamCount = cDefaultParamNum then |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
602 |
internalStartGameWithParameters() |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
603 |
{$IFDEF USE_VIDEO_RECORDING} |
7848
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
604 |
else if ParamCount = cVideorecParamNum then |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
605 |
internalStartVideoRecordingWithParameters() |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
606 |
{$ENDIF} |
7848
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
607 |
else |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
608 |
playReplayFileWithParameters(); |
775a72905708
* fix initialisation, preload values and then read args
koda
parents:
7837
diff
changeset
|
609 |
end |
51 | 610 |
end; |
3021 | 611 |
|
155
401f4ea24715
Engine can generate land preview and send it via IPC
unc0rr
parents:
109
diff
changeset
|
612 |
//////////////////////////////////////////////////////////////////////////////// |
401f4ea24715
Engine can generate land preview and send it via IPC
unc0rr
parents:
109
diff
changeset
|
613 |
/////////////////////////////// m a i n //////////////////////////////////////// |
401f4ea24715
Engine can generate land preview and send it via IPC
unc0rr
parents:
109
diff
changeset
|
614 |
//////////////////////////////////////////////////////////////////////////////// |
401f4ea24715
Engine can generate land preview and send it via IPC
unc0rr
parents:
109
diff
changeset
|
615 |
begin |
2947 | 616 |
GetParams(); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
617 |
if (Length(cLocaleFName) > 6) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
618 |
cLocale := Copy(cLocaleFName,1,5) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
619 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
620 |
cLocale := Copy(cLocaleFName,1,2); |
2008 | 621 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
622 |
if GameType = gmtLandPreview then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
623 |
GenLandPreview() |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
624 |
else if GameType = gmtSyntax then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
625 |
DisplayUsage() |
2947 | 626 |
else Game(); |
3697 | 627 |
|
5565 | 628 |
// return 1 when engine is not called correctly |
7151 | 629 |
halt(LongInt(GameType = gmtSyntax)); |
2698 | 630 |
{$ENDIF} |
51 | 631 |
end. |