# HG changeset patch # User koda # Date 1256061311 0 # Node ID 02ff5f9510b5870b77666509eb98dd01d1897224 # Parent 54296af65fe9b0ba5c2a5329b9c3bcd719943db3 WE HAVE TOUCH INPUT diff -r 54296af65fe9 -r 02ff5f9510b5 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Tue Oct 20 11:49:10 2009 +0000 +++ b/hedgewars/SDLh.pas Tue Oct 20 17:55:11 2009 +0000 @@ -126,6 +126,20 @@ {$ENDIF} {*end sdl_event binding*} +{$IFDEF SDL13} +{*#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2)*} +{$ENDIF} + RMask = $000000FF; GMask = $0000FF00; BMask = $00FF0000; diff -r 54296af65fe9 -r 02ff5f9510b5 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Tue Oct 20 11:49:10 2009 +0000 +++ b/hedgewars/hwengine.pas Tue Oct 20 17:55:11 2009 +0000 @@ -163,13 +163,15 @@ var PrevTime, CurrTime: Longword; event: TSDL_Event; + mouseState, whichMouse: byte; + x, y, x_up, y_up, x_down, y_down: LongInt; + oldy: LongInt = 240; begin PrevTime:= SDL_GetTicks; repeat while SDL_PollEvent(@event) <> 0 do case event.type_ of {$IFDEF IPHONEOS} - SDL_MOUSEMOTION: WriteLnToConsole('mouse number ' + inttostr(SDL_SelectMouse(event.motion.which)) + ' over ' + inttostr(SDL_GetNumMice())); SDL_WINDOWEVENT: {$ELSE} SDL_KEYDOWN: if GameState = gsChat then KeyPressChat(event.key.keysym.unicode); @@ -178,7 +180,65 @@ if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then cHasFocus:= event.active.gain = 1; //SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450)); -{$IFNDEF IPHONEOS} +{$IFDEF IPHONEOS} + {*MoveCamera is in uWord.pas -- conflicts with other commands*} + {*Keys are in uKeys.pas*} + SDL_MOUSEBUTTONDOWN: begin + mouseState:= SDL_GetMouseState(0, @x, @y); + if x <= 50 then + begin + AddFileLog('Wheel -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + {* sliding *} + if oldy - y > 0 then uKeys.wheelUp:= true + else uKeys.wheelDown:= true; + {* update value only if movement is consistent *} + // if (y > oldy - 10 ) or (y > oldy + 10 ) then oldy:= y + // oldy:= y; + end; + + {* keys *} + {* if (x > 50) then + begin + AddFileLog('Arrow Key -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + + if (y <= 50) and (x > 135) and (x <= 185) then uKeys.upKey:= true; + if (y > 430) and (x > 135) and (x <= 185) then uKeys.downKey:= true; + if (x > 270) and (y > 215) and (y > 265) then uKeys.rightClick:= true; + if (x <= 100) and (y > 215) and (y > 265) then uKeys.leftClick:= true; + end; + + if (y > 430) and (x > 50) and (x <= 135) then + begin + AddFileLog('Space -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + uKeys.spaceKey:= true; + end; + if (y > 430) and (x > 185) and (x <= 270) then + begin + AddFileLog('Enter -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + uKeys.enterKey:= true; + end;*} + end; + SDL_MOUSEBUTTONUP: begin + mouseState:= SDL_GetMouseState(0, @x, @y); + x_up:= x; + y_up:= y; + + {* open ammo menu *} + if (y > 430) and (x > 270) then + begin + AddFileLog('Right Click -- x: ' + inttostr(x) + ' y: ' + inttostr(y) ); + uKeys.rightClick:= true; + end; + {* reset zoom *} + if (x > 270) and (y <= 50) then + begin + AddFileLog('Middle Click -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + uKeys.middleClick:= true; + end; + + + end; +{$ELSE} SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then uKeys.wheelDown:= true; SDL_MOUSEBUTTONUP: if event.button.button = SDL_BUTTON_WHEELDUP then uKeys.wheelUp:= true; {$ENDIF} diff -r 54296af65fe9 -r 02ff5f9510b5 hedgewars/uKeys.pas --- a/hedgewars/uKeys.pas Tue Oct 20 11:49:10 2009 +0000 +++ b/hedgewars/uKeys.pas Tue Oct 20 17:55:11 2009 +0000 @@ -22,8 +22,9 @@ {$INCLUDE options.inc} type TBinds = array[0..cKeyMaxIndex] of shortstring; +type TKeyboardState = array[0..cKeyMaxIndex] of Byte; -function KeyNameToCode(name: string): word; +function KeyNameToCode(name: string): word; procedure ProcessKbd; procedure ResetKbd; procedure FreezeEnterKey; @@ -41,7 +42,19 @@ var hideAmmoMenu: boolean; wheelUp: boolean = false; wheelDown: boolean = false; +{$IFDEF IPHONEOS} + leftClick: boolean = false; + middleClick: boolean = false; + rightClick: boolean = false; +upKey: boolean = false; +downKey: boolean = false; +rightKey: boolean = false; +leftKey: boolean = false; + +spaceKey: boolean = false; +enterKey: boolean = false; +{$ENDIF} ControllerNumControllers: Integer; ControllerEnabled: Integer; ControllerNumAxes: array[0..5] of Integer; @@ -56,7 +69,6 @@ implementation uses SDLh, uTeams, uConsole, uMisc, uStore; const KeyNumber = 1024; -type TKeyboardState = array[0..cKeyMaxIndex] of Byte; var tkbd, tkbdn: TKeyboardState; KeyNames: array [0..cKeyMaxIndex] of string[15]; @@ -111,6 +123,33 @@ tkbdn[5]:= ord(wheelUp); wheelUp:= false; wheelDown:= false; +{$IFDEF IPHONEOS} +tkbdn[1]:= ord(leftClick); +tkbdn[2]:= ord(middleClick); +tkbdn[3]:= ord(rightClick); +leftClick:= false; +middleClick:= false; +rightClick:= false; + +{* +//sdl1.3 for these keys is messed up +tkbdn[273]:= ord(upKey); +tkbdn[274]:= ord(downKey); +tkbdn[275]:= ord(rightKey); +tkbdn[276]:= ord(leftKey); + +tkbdn[32]:= ord(spaceKey); +tkbdn[13]:= ord(enterKey); + +upKey:= false; +downKey:= false; +rightKey:= false; +leftKey:= false; + +spaceKey:= false; +enterKey:= false; +*} +{$ENDIF} // Controller(s) k:= j; // should we test k for hitting the limit? sounds rather unlikely to ever reach it @@ -162,10 +201,10 @@ {$IFDEF SDL13} pkbd:= SDL_GetKeyboardState(@j); -k := SDL_GetMouseState(0, nil, nil); +k:= SDL_GetMouseState(0, nil, nil); {$ELSE} pkbd:= SDL_GetKeyState(@j); -k := SDL_GetMouseState(nil, nil); +k:= SDL_GetMouseState(nil, nil); {$ENDIF} TryDo(j < cKeyMaxIndex, 'SDL keys number is more than expected (' + inttostr(j) + ')', true); @@ -187,6 +226,32 @@ tkbdn[5]:= ord(wheelUp); wheelUp:= false; wheelDown:= false; +{$IFDEF IPHONEOS} +tkbdn[1]:= ord(leftClick); +tkbdn[2]:= ord(middleClick); +tkbdn[3]:= ord(rightClick); +leftClick:= false; +middleClick:= false; +rightClick:= false; + +{* +tkbdn[273]:= ord(upKey); +tkbdn[274]:= ord(downKey); +tkbdn[275]:= ord(rightKey); +tkbdn[276]:= ord(leftKey); + +tkbdn[32]:= ord(spaceKey); +tkbdn[13]:= ord(enterKey); + +upKey:= false; +downKey:= false; +rightKey:= false; +leftKey:= false; + +spaceKey:= false; +enterKey:= false; +*} +{$ENDIF} // Controller(s) k:= j; // should we test k for hitting the limit? sounds rather unlikely to ever reach it @@ -305,7 +370,7 @@ procedure FreezeEnterKey; begin tkbd[13]:= 1; -tkbd[271]:= 1 +tkbd[271]:= 1; end; var Controller: array [0..5] of PSDLJoystick; diff -r 54296af65fe9 -r 02ff5f9510b5 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Tue Oct 20 11:49:10 2009 +0000 +++ b/hedgewars/uStore.pas Tue Oct 20 17:55:11 2009 +0000 @@ -589,7 +589,7 @@ procedure DrawCentered(X, Top: LongInt; Source: PTexture); begin -DrawTexture(X - Source^.w div 2, Top, Source) +DrawTexture(X - Source^.w shr 1, Top, Source) end; procedure DrawHedgehog(X, Y: LongInt; Dir: LongInt; Pos, Step: LongWord; Angle: real); diff -r 54296af65fe9 -r 02ff5f9510b5 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Tue Oct 20 11:49:10 2009 +0000 +++ b/hedgewars/uWorld.pas Tue Oct 20 17:55:11 2009 +0000 @@ -319,6 +319,8 @@ tdx, tdy: Double; grp: TCapGroup; s: string[15]; + x,y: LongInt; + offset: LongInt; begin if ZoomValue < zoom then begin @@ -338,6 +340,11 @@ //glPushMatrix; //glScalef(1.0, 1.0, 1.0); +{$IFDEF IPHONEOS} +{* see the code in MainLoop *} +SDL_GetMouseState(0, @x, @y); +if (x > 100) and (x < 220) and (y > 200) and (y < 280) then +{$ENDIF} if not isPaused then MoveCamera; if not cReducedQuality then @@ -388,7 +395,7 @@ // Waves DrawWaves( 1, 25, - cWaveHeight); -DrawWaves(-1, 50, - (cWaveHeight div 2)); +DrawWaves(-1, 50, - (cWaveHeight shr 1)); DrawWaves( 1, 75, 0); @@ -399,6 +406,11 @@ {$WARNINGS ON} SetScale(2.0); +{$IFDEF IPHONEOS} +offset:= 465; +{$ELSE} +offset:= 48; +{$ENDIF} // Turn time if TurnTimeLeft <> 0 then begin @@ -406,16 +418,17 @@ if i>99 then t:= 112 else if i>9 then t:= 96 else t:= 80; - DrawSprite(sprFrame, -cScreenWidth div 2 + t, cScreenHeight - 48, 1); + DrawSprite(sprFrame, -cScreenWidth div 2 + t, cScreenHeight - offset, 1); while i > 0 do begin dec(t, 32); - DrawSprite(sprBigDigit, -cScreenWidth div 2 + t, cScreenHeight - 48, i mod 10); + DrawSprite(sprBigDigit, -cScreenWidth div 2 + t, cScreenHeight - offset, i mod 10); i:= i div 10 end; - DrawSprite(sprFrame, -cScreenWidth div 2 + t - 4, cScreenHeight - 48, 0); + DrawSprite(sprFrame, -cScreenWidth div 2 + t - 4, cScreenHeight - offset, 0); end; +{$IFNDEF IPHONEOS} // Timetrial if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then begin @@ -459,9 +472,14 @@ // left frame DrawSprite(sprFrame, -cScreenWidth div 2 + t - 4, 8, 0); end; - +{$ENDIF} + // Captions +{$IFDEF IPHONEOS} +i:= 53; +{$ELSE} if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then i:= 48 else i:= 8; +{$ENDIF} for grp:= Low(TCapGroup) to High(TCapGroup) do with Captions[grp] do @@ -497,10 +515,15 @@ end; // Lag alert -if isInLag then DrawSprite(sprLag, 32 - cScreenWidth div 2, 32, (RealTicks shr 7) mod 12); +if isInLag then DrawSprite(sprLag, 32 - (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); // Wind bar -DrawSprite(sprWindBar, cScreenWidth div 2 - 180, cScreenHeight - 30, 0); +{$IFDEF IPHONEOS} +offset:= 450; +{$ELSE} +offset:= 30; +{$ENDIF} +DrawSprite(sprWindBar, (cScreenWidth shr 1) - 180, cScreenHeight - offset, 0); if WindBarWidth > 0 then begin {$WARNINGS OFF} @@ -509,7 +532,7 @@ r.y:= 0; r.w:= WindBarWidth; r.h:= 13; - DrawSpriteFromRect(sprWindR, r, cScreenWidth div 2 - 103, cScreenHeight - 28, 13, 0); + DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1) - 103, cScreenHeight - offset - 2, 13, 0); end else if WindBarWidth < 0 then begin @@ -519,7 +542,7 @@ r.y:= 0; r.w:= - WindBarWidth; r.h:= 13; - DrawSpriteFromRect(sprWindL, r, cScreenWidth div 2 - 106 + WindBarWidth, cScreenHeight - 28, 13, 0); + DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1) - 106 + WindBarWidth, cScreenHeight - offset - 2, 13, 0); end; // AmmoMenu @@ -529,10 +552,13 @@ if isCursorVisible and bShowAmmoMenu then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8); +{$IFNDEF IPHONEOS} +{* do not draw the chat because a) no input b) too little space*} DrawChat; +{$ENDIF} -if fastUntilLag then DrawCentered(0, cScreenHeight div 2, SyncTexture); -if isPaused then DrawCentered(0, cScreenHeight div 2, PauseTexture); +if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); +if isPaused then DrawCentered(0, (cScreenHeight shr 1), PauseTexture); inc(Frames); if cShowFPS then @@ -550,7 +576,7 @@ SDL_FreeSurface(tmpSurface) end; if fpsTexture <> nil then - DrawTexture(cScreenWidth div 2 - 50, 10, fpsTexture); + DrawTexture((cScreenWidth shr 1) - 50, 10, fpsTexture); end; inc(SoundTimerTicks, Lag); @@ -615,7 +641,7 @@ {$ELSE} SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); {$ENDIF} - CursorPoint.X:= CursorPoint.X - cScreenWidth div 2; + CursorPoint.X:= CursorPoint.X - (cScreenWidth shr 1); CursorPoint.Y:= cScreenHeight - CursorPoint.Y; end; @@ -690,7 +716,7 @@ end; prevPoint:= CursorPoint; -if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight - CursorPoint.Y); +if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight - CursorPoint.Y); if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; if WorldDy < wdy then WorldDy:= wdy; if WorldDx < - LAND_WIDTH - 1024 then WorldDx:= - LAND_WIDTH - 1024;