diff -r d24257910f8d -r aaefa587e277 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Sun Dec 02 00:03:16 2012 +0100 +++ b/hedgewars/hwengine.pas Tue Dec 25 04:45:22 2012 +0100 @@ -29,21 +29,23 @@ program hwengine; {$ENDIF} -uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler, - uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uLandTexture, uCollisions, - uAILandMarks, SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, - uLandPainted, uFloat, uPhysFSLayer +uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler + , uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions + , SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted + , uPhysFSLayer, uCursor {$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF} {$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF} {$IFDEF ANDROID}, GLUnit{$ENDIF} {$IFDEF WEBGL}, uWeb{$ENDIF} ; +var isInternal: Boolean; + {$IFDEF HWLIBRARY} procedure preInitEverything(); procedure initEverything(complete:boolean); procedure freeEverything(complete:boolean); -procedure Game(gameArgs: PPChar); cdecl; export; +procedure Game(argc: LongInt; argv: PPChar); cdecl; export; procedure GenLandPreview(port: Longint); cdecl; export; implementation @@ -53,6 +55,8 @@ procedure freeEverything(complete:boolean); forward; {$ENDIF} +{$INCLUDE "ArgParsers.inc"} + {$IFDEF WEBGL} procedure playFile(path: PChar); forward; function isEngineRunning():Integer; forward; @@ -185,7 +189,7 @@ {$ENDIF} SDL_PumpEvents(); - + while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do begin case event.type_ of @@ -199,7 +203,7 @@ SDL_KEYUP: if GameState <> gsChat then ProcessKey(event.key); - + SDL_WINDOWEVENT: if event.window.event = SDL_WINDOWEVENT_SHOWN then begin @@ -225,13 +229,13 @@ cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight); cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF}; end; - + SDL_FINGERMOTION: onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId); - + SDL_FINGERDOWN: onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); - + SDL_FINGERUP: onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); {$ELSE} @@ -243,13 +247,19 @@ SDL_KEYUP: if GameState <> gsChat then ProcessKey(event.key); - + SDL_MOUSEBUTTONDOWN: - ProcessMouse(event.button, true); - + if GameState = gsConfirm then + begin + resetPosition(); + ParseCommand('quit', true); + end + else + ProcessMouse(event.button, true); + SDL_MOUSEBUTTONUP: - ProcessMouse(event.button, false); - + ProcessMouse(event.button, false); + SDL_ACTIVEEVENT: if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then begin @@ -258,7 +268,7 @@ if prevFocusState xor cHasFocus then onFocusStateChanged() end; - + SDL_VIDEORESIZE: begin // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts @@ -354,7 +364,7 @@ {$ENDIF} /////////////////////////////////////////////////////////////////////////////// -procedure Game{$IFDEF HWLIBRARY}(gameArgs: PPChar); cdecl; export{$ENDIF}; +procedure Game{$IFDEF HWLIBRARY}(argc: LongInt; argv: PPChar); cdecl; export{$ENDIF}; var p: TPathType; s: shortstring; i: LongInt; @@ -365,24 +375,11 @@ begin {$IFDEF HWLIBRARY} preInitEverything(); - cShowFPS:= {$IFDEF DEBUGFILE}true{$ELSE}false{$ENDIF}; - ipcPort:= StrToInt(gameArgs[0]); - cScreenWidth:= StrToInt(gameArgs[1]); - cScreenHeight:= StrToInt(gameArgs[2]); - cReducedQuality:= StrToInt(gameArgs[3]); - cLocaleFName:= gameArgs[4]; - UserNick:= gameArgs[5]; - SetSound(gameArgs[6] = '1'); - SetMusic(gameArgs[7] = '1'); - cAltDamage:= gameArgs[8] = '1'; - PathPrefix:= gameArgs[9]; - UserPathPrefix:= '../Documents'; - recordFileName:= gameArgs[10]; + parseCommandLine(argc, argv); {$ENDIF} initEverything(true); + WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')'); - WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')'); - for i:= 0 to ParamCount do AddFileLog(inttostr(i) + ': ' + ParamStr(i)); @@ -402,7 +399,7 @@ InitOffscreenOpenGL() else {$ENDIF} - begin + begin // show main window if cFullScreen then ParseCommand('fullscr 1', true) @@ -460,7 +457,7 @@ exit; end; {$ENDIF} - + {$IFDEF WEBGL} l := generateResourceList(); clear_filelist_hook(); @@ -592,60 +589,6 @@ end; {$IFNDEF HWLIBRARY} -/////////////////////////////////////////////////////////////////////////////// -procedure DisplayUsage; -var i: LongInt; -begin - WriteLn(stdout, 'Wrong argument format: correct configurations is'); - WriteLn(stdout, ''); - WriteLn(stdout, ' hwengine [options]'); - WriteLn(stdout, ''); - WriteLn(stdout, 'where [options] must be specified either as:'); - WriteLn(stdout, ' --set-video [screen width] [screen height] [color dept]'); - WriteLn(stdout, ' --set-audio [volume] [enable music] [enable sounds]'); - WriteLn(stdout, ' --set-other [language file] [full screen] [show FPS]'); - WriteLn(stdout, ' --set-multimedia [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]'); - 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]'); - WriteLn(stdout, ' --stats-only'); - WriteLn(stdout, ''); - WriteLn(stdout, 'Read documentation online at http://code.google.com/p/hedgewars/wiki/CommandLineOptions for more information'); - WriteLn(stdout, ''); - Write(stdout, 'PARSED COMMAND: '); - - for i:=0 to ParamCount do - Write(stdout, ParamStr(i) + ' '); - - WriteLn(stdout, ''); -end; - -/////////////////////////////////////////////////////////////////////////////// -{$INCLUDE "ArgParsers.inc"} - -procedure GetParams; -begin - if (ParamCount < 3) then - GameType:= gmtSyntax - else - if (ParamCount = 3) and (ParamStr(3) = 'landpreview') then - begin - ipcPort:= StrToInt(ParamStr(2)); - GameType:= gmtLandPreview; - end - else - begin - if (ParamCount = 3) and (ParamStr(3) = '--stats-only') then - playReplayFileWithParameters() - else - if ParamCount = cDefaultParamNum then - internalStartGameWithParameters() -{$IFDEF USE_VIDEO_RECORDING} - else if ParamCount = cVideorecParamNum then - internalStartVideoRecordingWithParameters() -{$ENDIF} - else - playReplayFileWithParameters(); - end -end; /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////// m a i n /////////////////////////////////// @@ -667,9 +610,8 @@ if GameType = gmtLandPreview then GenLandPreview() - else if GameType = gmtSyntax then - DisplayUsage() - else Game(); + else if GameType <> gmtSyntax then + Game(); // return 1 when engine is not called correctly {$IFDEF PAS2C}