other controls implementation + sdlh revisited (once again)
authorkoda
Mon, 26 Oct 2009 10:39:20 +0000
changeset 2591 c6597b65caea
parent 2590 e7e87e3c67db
child 2592 d86618629e20
other controls implementation + sdlh revisited (once again)
hedgewars/SDLh.pas
hedgewars/hwengine.pas
hedgewars/uKeys.pas
--- a/hedgewars/SDLh.pas	Sun Oct 25 23:52:36 2009 +0000
+++ b/hedgewars/SDLh.pas	Mon Oct 26 10:39:20 2009 +0000
@@ -68,7 +68,42 @@
 	SDL_INIT_JOYSTICK = $00000200;
 
 	SDL_APPINPUTFOCUS = 2;
-
+	SDL_BUTTON_WHEELDUP = 4;
+	SDL_BUTTON_WHEELDOWN = 5;
+		
+{*begin sdl_event binding*}
+	SDL_NOEVENT = 0;
+	SDL_KEYDOWN = 2;
+	SDL_KEYUP = 3;
+{$IFDEF SDL13}
+        SDL_WINDOWEVENT = 1;
+        SDL_TEXTINPUT = 4;
+        SDL_TEXTEDITING = 5;
+	SDL_MOUSEMOTION  = 6;
+        SDL_MOUSEBUTTONDOWN = 7;
+	SDL_MOUSEBUTTONUP   = 8;
+        SDL_MOUSEWHEEL = 9;
+	SDL_JOYAXISMOTION = 10;
+	SDL_JOYBALLMOTION = 11;
+	SDL_JOYHATMOTION = 12;
+	SDL_JOYBUTTONDOWN = 13;
+	SDL_JOYBUTTONUP = 14;
+	SDL_QUITEV = 15;
+{$ELSE}
+        SDL_ACTIVEEVENT = 1;
+	SDL_MOUSEMOTION  = 4;
+       	SDL_MOUSEBUTTONDOWN = 5;
+	SDL_MOUSEBUTTONUP   = 6;
+	SDL_JOYAXISMOTION = 7;
+	SDL_JOYBALLMOTION = 8;
+	SDL_JOYHATMOTION = 9;
+	SDL_JOYBUTTONDOWN = 10;
+	SDL_JOYBUTTONUP = 11;
+	SDL_QUITEV = 12;
+	SDL_VIDEORESIZE = 16; // TODO: outdated? no longer in SDL 1.3?
+{$ENDIF}
+{*end sdl_event binding*}
+		
 {$IFDEF SDL13}
 	SDL_ASYNCBLIT   = $08000000;
 	SDL_ANYFORMAT   = $10000000;
@@ -95,39 +130,6 @@
 	SDL_RESIZABLE   = $00000010;
 {$ENDIF}
 
-{*begin sdl_event binding*}
-	SDL_NOEVENT = 0;
-	SDL_KEYDOWN = 2;
-	SDL_KEYUP = 3;
-	SDL_VIDEORESIZE = 16; // TODO: outdated? no longer in SDL 1.3?
-
-{$IFDEF SDL13}
-        SDL_WINDOWEVENT = 1;
-        SDL_TEXTINPUT = 4;
-        SDL_TEXTEDITING = 5;
-	SDL_MOUSEMOTION  = 6;
-        SDL_MOUSEBUTTONDOWN = 7;
-	SDL_MOUSEBUTTONUP   = 8;
-        SDL_MOUSEWHEEL = 9;  //different handling, should create SDL_MouseWheelEvent type
-	SDL_JOYAXIS = 10;
-	SDL_JOYHAT = 12;
-	SDL_JOYBUTTONDOWN = 13;
-	SDL_JOYBUTTONUP = 14;
-	SDL_QUITEV = 15;
-{$ELSE}
-        SDL_ACTIVEEVENT = 1;
-       	SDL_MOUSEBUTTONDOWN = 5;
-	SDL_MOUSEBUTTONUP   = 6;
-        SDL_BUTTON_WHEELDUP = 4;
-	SDL_BUTTON_WHEELDOWN = 5;
-	SDL_JOYAXIS = 7;
-	SDL_JOYHAT = 9;
-	SDL_JOYBUTTONDOWN = 10;
-	SDL_JOYBUTTONUP = 11;
-	SDL_QUITEV = 12;
-{$ENDIF}
-{*end sdl_event binding*}
-
 
 {$IFDEF ENDIAN_LITTLE}
 	RMask = $000000FF;
@@ -242,14 +244,45 @@
 		unicode: Word;
 		end;
 
+
+{* SDL_event type definition *}
+
+{$IFDEF SDL13}
+	TSDL_WindowID = LongInt;
+
+	TSDL_WindowEvent = record
+{$ELSE}
 	TSDL_ActiveEvent = record
+{$ENDIF}
 		type_: byte;
 		gain: byte;
 		state: byte;
+{$IFDEF SDL13}
+		windowID: TSDL_WindowID;
+		data1, data2: LongInt;
+{$ENDIF}
 		end;
 
+//SDL_TextEditingEvent + SDL_TextInputEvent for sdl13
+
+	TSDL_MouseMotionEvent = record
+                             type_: byte;
+                             which: byte;
+                             state: byte;
+{$IFDEF SDL13}
+                             x, y, xrel, yrel : LongInt;
+			     pressure, pressure_max, pressure_min,
+			     rotation, tilt, cursor: LongInt; 
+{$ELSE}
+                             x, y, xrel, yrel : word;
+{$ENDIF}
+                             end;
+
 	TSDL_KeyboardEvent = record
 		type_: Byte;
+{$IFDEF SDL13}
+		windowID: TSDL_WindowID;
+{$ENDIF}
 		which: Byte;
 		state: Byte;
 		keysym: TSDL_KeySym;
@@ -260,9 +293,115 @@
 		which,
 		button,
 		state: byte;
+{$IFDEF SDL13}
+		x, y: LongInt;
+{$ELSE}
 		x, y: word;
+{$ENDIF}
 		end;
 
+{$IFDEF SDL13}
+	TSDL_MouseWheelEvent = record
+		type_: Byte;
+		windowID: TSDL_WindowID;
+		which: Byte;
+		x, y: LongInt;
+		end;
+{$ENDIF}
+
+     TSDL_JoyAxisEvent = record
+		type_: Byte;
+		which: Byte;
+		axis: Byte;
+{$IFDEF SDL13}
+		value: LongInt;
+{$ELSE}
+		value: word;
+{$ENDIF}	
+		end;
+			
+     TSDL_JoyBallEvent = record
+		type_: Byte;
+		which: Byte;
+		ball: Byte;
+{$IFDEF SDL13}
+		xrel, yrel: LongInt;
+{$ELSE}
+		xrel, yrel: word;
+{$ENDIF}
+		end;
+
+     TSDL_JoyHatEvent = record
+		type_: Byte;
+		which: Byte;
+		hat: Byte;
+		value: Byte;
+		end;
+	
+     TSDL_JoyButtonEvent = record
+		type_: Byte;
+		which: Byte;
+		button: Byte;
+		state: Byte;
+		end;
+
+     TSDL_QuitEvent = record
+                type_: Byte;
+                end;
+
+{$IFNDEF SDL13}
+     TSDL_ResizeEvent = record
+		type_: Byte;
+		w, h: LongInt;
+		end;
+{$ENDIF}
+
+	PSDL_Event = ^TSDL_Event;
+	TSDL_Event = record
+                  case Byte of
+	SDL_NOEVENT: (type_: byte);
+{$IFDEF SDL13}
+	SDL_WINDOWEVENT: (active: TSDL_WindowEvent);
+	SDL_KEYDOWN,
+        SDL_KEYUP: (key: TSDL_KeyboardEvent);
+	SDL_TEXTEDITING,
+	SDL_TEXTINPUT: (txtin: byte);
+	SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
+	SDL_MOUSEBUTTONDOWN,
+	SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
+        SDL_MOUSEWHEEL: (wheel: TSDL_MouseWheelEvent);
+	SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
+	SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
+	SDL_JOYBALLMOTION: (jball: TSDL_JoyBallEvent);
+	SDL_JOYBUTTONDOWN,
+	SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
+	SDL_QUITEV: (quit: TSDL_QuitEvent);
+{$ELSE}
+        SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
+	SDL_KEYDOWN,
+        SDL_KEYUP: (key: TSDL_KeyboardEvent);
+	SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
+	SDL_MOUSEBUTTONDOWN,
+	SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
+	SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
+	SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
+	SDL_JOYBALLMOTION: (jball: TSDL_JoyBallEvent);
+	SDL_JOYBUTTONDOWN,
+	SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
+	SDL_QUITEV: (quit: TSDL_QuitEvent);
+	//SDL_SYSWMEVENT,SDL_EVENT_RESERVEDA,SDL_EVENT_RESERVEDB
+	//SDL_VIDEORESIZE: (resize: TSDL_ResizeEvent);
+{$ENDIF}
+		end;
+
+     PByteArray = ^TByteArray;
+     TByteArray = array[0..65535] of Byte;
+     PLongWordArray = ^TLongWordArray;
+     TLongWordArray = array[0..16383] of LongWord;
+
+     PSDL_Thread = Pointer;
+     PSDL_mutex = Pointer;
+
 	TSDL_GLattr = (
 		SDL_GL_RED_SIZE,
 		SDL_GL_GREEN_SIZE,
@@ -284,7 +423,6 @@
 		SDL_GL_CONTEXT_MAJOR_VERSION,
 		SDL_GL_CONTEXT_MINOR_VERSION
 		);
-	
 
 {$IFDEF SDL13}
 	TSDL_ArrayByteOrder = (  // array component order, low byte -> high byte 
@@ -296,84 +434,8 @@
 		SDL_ARRAYORDER_BGRA,
 		SDL_ARRAYORDER_ABGR
 		);
-
-	TSDL_MouseMotionEvent = record
-                             type_: byte;
-                             which: byte;
-                             state: byte;
-                             x    : LongInt;
-                             y    : LongInt;
-                             xrel : LongInt;
-                             yrel : LongInt;
-                             end;
 {$ENDIF}
 
-     TSDL_QuitEvent = record
-                      type_: Byte;
-                      end;
-     TSDL_ResizeEvent = record
-			type_: Byte;
-			w, h: LongInt;
-			end;
-
-     TSDL_JoyAxisEvent = record
-			type_: Byte;
-			which: Byte;
-			axis: Byte;
-			value: LongInt;
-			end;
-			
-     TSDL_JoyHatEvent = record
-			type_: Byte;
-			which: Byte;
-			hat: Byte;
-			value: Byte;
-			end;
-	
-     TSDL_JoyButtonEvent = record
-			type_: Byte;
-			which: Byte;
-			button: Byte;
-			state: Byte;
-			end;
-	 
-	PSDL_Event = ^TSDL_Event;
-	TSDL_Event = record
-                  case Byte of
-{$IFDEF SDL13}
-			//doublecheck the type of WINDOWEVENT TEXTINPUT
-			SDL_NOEVENT: (type_: byte);
-			SDL_WINDOWEVENT: (active: TSDL_ActiveEvent);
-			SDL_KEYDOWN,
-                        SDL_KEYUP: (key: TSDL_KeyboardEvent);
-			SDL_TEXTINPUT: (txtin: byte);
-			SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
-			SDL_MOUSEBUTTONDOWN,
-			SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
-{$ELSE}
-			SDL_NOEVENT: (type_: byte);
-			SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
-			SDL_KEYDOWN,
-			SDL_KEYUP: (key: TSDL_KeyboardEvent);
-			SDL_QUITEV: (quit: TSDL_QuitEvent);
-			SDL_VIDEORESIZE: (resize: TSDL_ResizeEvent);
-			SDL_MOUSEBUTTONDOWN,
-			SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
-{$ENDIF}
-			SDL_JOYAXIS: (jaxis: TSDL_JoyAxisEvent);
-			SDL_JOYHAT: (jhat: TSDL_JoyHatEvent);
-			SDL_JOYBUTTONDOWN,
-			SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
-     		 end;
-
-     PByteArray = ^TByteArray;
-     TByteArray = array[0..65535] of Byte;
-     PLongWordArray = ^TLongWordArray;
-     TLongWordArray = array[0..16383] of LongWord;
-
-     PSDL_Thread = Pointer;
-     PSDL_mutex = Pointer;
-
 function  SDL_Init(flags: Longword): LongInt; cdecl; external SDLLibName;
 procedure SDL_Quit; cdecl; external SDLLibName;
 function  SDL_VideoDriverName(var namebuf; maxlen: LongInt): PChar; cdecl; external SDLLibName;
@@ -453,35 +515,36 @@
 
 
 // Joystick/Controller support
-type PSDLJoystick = ^TSDLJoystick;
-     TSDLJoystick = record
+type PSDL_Joystick = ^TSDL_Joystick;
+     TSDL_Joystick = record
 	                end;
 
-function SDL_NumJoysticks: LongInt; cdecl; external SDLLibName;
-function SDL_JoystickName(idx: LongInt): PChar; cdecl; external SDLLibName;
-function SDL_JoystickOpen(idx: LongInt): PSDLJoystick; cdecl; external SDLLibName;
-function SDL_JoystickOpened(idx: LongInt): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickIndex(joy: PSDLJoystick): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickNumAxes(joy: PSDLJoystick): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickNumBalls(joy: PSDLJoystick): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickNumHats(joy: PSDLJoystick): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickNumButtons(joy: PSDLJoystick): LongInt; cdecl; external SDLLibName;
+const	SDL_HAT_CENTERED  = $00;
+	SDL_HAT_UP        = $01;
+	SDL_HAT_RIGHT     = $02;
+	SDL_HAT_DOWN      = $04;
+	SDL_HAT_LEFT      = $08;
+	SDL_HAT_RIGHTUP   = SDL_HAT_RIGHT or SDL_HAT_UP;
+	SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN;
+	SDL_HAT_LEFTUP    = SDL_HAT_LEFT or SDL_HAT_UP;
+	SDL_HAT_LEFTDOWN  = SDL_HAT_LEFT or SDL_HAT_DOWN;
+
+function  SDL_NumJoysticks: LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickName(idx: LongInt): PChar; cdecl; external SDLLibName;
+function  SDL_JoystickOpen(idx: LongInt): PSDL_Joystick; cdecl; external SDLLibName;
+function  SDL_JoystickOpened(idx: LongInt): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickIndex(joy: PSDL_Joystick): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickNumAxes(joy: PSDL_Joystick): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickNumBalls(joy: PSDL_Joystick): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickNumHats(joy: PSDL_Joystick): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickNumButtons(joy: PSDL_Joystick): LongInt; cdecl; external SDLLibName;
 procedure SDL_JoystickUpdate; cdecl; external SDLLibName;
-function SDL_JoystickEventState(state: LongInt): LongInt; cdecl; external SDLLibName;
-function SDL_JoystickGetAxis(joy: PSDLJoystick; axis: LongInt): Word; cdecl; external SDLLibName;
-const SDL_HAT_CENTERED  = $00;
-      SDL_HAT_UP        = $01;
-	  SDL_HAT_RIGHT     = $02;
-	  SDL_HAT_DOWN      = $04;
-	  SDL_HAT_LEFT      = $08;
-	  SDL_HAT_RIGHTUP   = SDL_HAT_RIGHT or SDL_HAT_UP;
-	  SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN;
-	  SDL_HAT_LEFTUP    = SDL_HAT_LEFT or SDL_HAT_UP;
-	  SDL_HAT_LEFTDOWN  = SDL_HAT_LEFT or SDL_HAT_DOWN;
-function SDL_JoystickGetBall(joy: PSDLJoystick; ball: LongInt; dx: PInteger; dy: PInteger): Word; cdecl; external SDLLibName;
-function SDL_JoystickGetHat(joy: PSDLJoystick; hat: LongInt): Byte; cdecl; external SDLLibName;
-function SDL_JoystickGetButton(joy: PSDLJoystick; button: LongInt): Byte; cdecl; external SDLLibName;
-procedure SDL_JoystickClose(joy: PSDLJoystick); cdecl; external SDLLibName;
+function  SDL_JoystickEventState(state: LongInt): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickGetAxis(joy: PSDL_Joystick; axis: LongInt): LongInt; cdecl; external SDLLibName;
+function  SDL_JoystickGetBall(joy: PSDL_Joystick; ball: LongInt; dx: PInteger; dy: PInteger): Word; cdecl; external SDLLibName;
+function  SDL_JoystickGetHat(joy: PSDL_Joystick; hat: LongInt): Byte; cdecl; external SDLLibName;
+function  SDL_JoystickGetButton(joy: PSDL_Joystick; button: LongInt): Byte; cdecl; external SDLLibName;
+procedure SDL_JoystickClose(joy: PSDL_Joystick); cdecl; external SDLLibName;
 
 (*  TTF  *)
 
--- a/hedgewars/hwengine.pas	Sun Oct 25 23:52:36 2009 +0000
+++ b/hedgewars/hwengine.pas	Mon Oct 26 10:39:20 2009 +0000
@@ -163,20 +163,21 @@
 var PrevTime,
     CurrTime: Longword;
     event: TSDL_Event;
-{$IFDEF IPHONEOS}
+{$IFDEF TOUCHINPUT}
 type TDirection = (nodir, left, right);
-var x, y: LongInt;
-        dx, dy, mouseState: LongInt;
+var x, y, dx, dy, mouseState: LongInt;
+    tiltValue: LongInt;
     direction: TDirection = nodir;
-    havetrace: boolean = false;
+    movedbybuttons: boolean = false;
 {$ENDIF}
 begin
 PrevTime:= SDL_GetTicks;
 repeat
 while SDL_PollEvent(@event) <> 0 do
 {$IFDEF TOUCHINPUT}
-if direction <> nodir then
+if (direction <> nodir) and (movedbybuttons = true) then
 begin
+	AddFileLog('* Hedgehog moving *');
         uKeys.isWalking:= true;
         if direction = left then uKeys.leftKey:= true
         else if direction = right then uKeys.rightKey:= true;
@@ -243,17 +244,15 @@
                         if (x <= 50) and (y <= 50) then
                         begin
                                 AddFileLog('Left Arrow Key DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y));
-                            //    uKeys.leftKey:= true;
-                            //    uKeys.isWalking:= true;
                                 direction:= left;
+				movedbybuttons:= true;
                         end;
                         
                         if (x > 270) and (y <= 50) then
                         begin
                                 AddFileLog('Right Arrow Key DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y));
-                            //    uKeys.rightKey:= true;
-                            //    uKeys.isWalking:= true;
                                 direction:= right;
+				movedbybuttons:= true;
                         end;
 
                         {* high jump *}                        
@@ -303,40 +302,46 @@
                         AddFileLog('Arrow Keys UP | Space UP -- x: ' + inttostr(x) + ' y: ' + inttostr(y) );
 {$ENDIF}
                         direction:= nodir;
+			movedbybuttons:= false;
                         uKeys.isAttacking:= false;
-                end;
+		end;
 {$ENDIF}
 {$IFDEF IPHONEOS}
-{* might be masked by above events
-		SDL_JOYAXIS: begin
+		SDL_JOYAXISMOTION: begin
                 {* axis 0 = left and right;
                    axis 1 = up and down;
                    axis 2 = back and forth; *}
-                        if (event.jaxis.axis = 0) and (CurrentTeam <> nil) then
+
+{$IFDEF DEBUGFILE}
+                        AddFileLog('*********************************************       accelerometer');
+{$ENDIF}
+			
+			tiltValue:= SDL_JoystickGetAxis(uKeys.theJoystick, 0);
+
+                        if (CurrentTeam <> nil) then
                         begin
-                                if event.jaxis.value > 1500 then
+				AddFileLog('Joystick: 0; Axis: 0; Value: ' + inttostr(tiltValue));
+
+                                if tiltValue > 1500 then
                                 begin
-                                        direction:= right;
+					uKeys.rightKey:= true;
+					uKeys.isWalking:= true;
                                 end
                                 else
-                                        if event.jaxis.value <= -1500 then
+                                        if tiltValue <= -1500 then
                                         begin 
-                                                direction:= left
+						uKeys.leftKey:= true;
+						uKeys.isWalking:= true;
                                         end
                                         else
-                                                if (event.jaxis.value  > -1500) and (event.jaxis.value <= 1500) then direction:= nodir;
-{$IFDEF DEBUGFILE}
-                                AddFileLog('Joystick value: ' + inttostr(event.jaxis.value));
-{$ENDIF}
+                                                if (tiltValue  > -1500) and (tiltValue <= 1500) and (movedbybuttons = false) then uKeys.isWalking:= false;  
                         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;
-		SDL_JOYAXIS: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value);
-		SDL_JOYHAT: ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value);
+		SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value);
+		SDL_JOYHATMOTION: ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value);
 		SDL_JOYBUTTONDOWN: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true);
 		SDL_JOYBUTTONUP: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false);
 {$ENDIF}
--- a/hedgewars/uKeys.pas	Sun Oct 25 23:52:36 2009 +0000
+++ b/hedgewars/uKeys.pas	Mon Oct 26 10:39:20 2009 +0000
@@ -18,7 +18,7 @@
 
 unit uKeys;
 interface
-uses uConsts;
+uses uConsts, SDLh;
 {$INCLUDE options.inc}
 
 type TBinds = array[0..cKeyMaxIndex] of shortstring;
@@ -39,7 +39,7 @@
 procedure ControllerHatEvent(joy, hat, value: Byte);
 procedure ControllerButtonEvent(joy, button: Byte; pressed: Boolean);
 
-var hideAmmoMenu: boolean;
+var	hideAmmoMenu: boolean;
 	wheelUp: boolean = false;
 	wheelDown: boolean = false;
 {$IFDEF TOUCHINPUT}
@@ -47,24 +47,26 @@
         middleClick: boolean = false;
         rightClick: boolean = false;
 
-upKey: boolean = false;
-downKey: boolean = false;
-rightKey: boolean = false;
-leftKey: boolean = false;
+	upKey: boolean = false;
+	downKey: boolean = false;
+	rightKey: boolean = false;
+	leftKey: boolean = false;
 
-backspaceKey: boolean = false;
-spaceKey: boolean = false;
-enterKey: boolean = false;
-tabKey: boolean = false;
+	backspaceKey: boolean = false;
+	spaceKey: boolean = false;
+	enterKey: boolean = false;
+	tabKey: boolean = false;
 
-isAttacking: boolean = false;
-isWalking: boolean = false;
-
+	isAttacking: boolean = false;
+	isWalking: boolean = false;
+{$ENDIF}
+{$IFDEF IPHONEOS}
+	theJoystick: PSDL_Joystick;
 {$ENDIF}
 	ControllerNumControllers: Integer;
-    ControllerEnabled: Integer;
-    ControllerNumAxes: array[0..5] of Integer;
-    //ControllerNumBalls: array[0..5] of Integer;
+	ControllerEnabled: Integer;
+	ControllerNumAxes: array[0..5] of Integer;
+	//ControllerNumBalls: array[0..5] of Integer;
 	ControllerNumHats: array[0..5] of Integer;
 	ControllerNumButtons: array[0..5] of Integer;
 	ControllerAxes: array[0..5] of array[0..19] of Integer;
@@ -73,7 +75,7 @@
 	ControllerButtons: array[0..5] of array[0..19] of Byte;
 
 implementation
-uses SDLh, uTeams, uConsole, uMisc, uStore;
+uses uTeams, uConsole, uMisc, uStore;
 const KeyNumber = 1024;
 
 var tkbd, tkbdn: TKeyboardState;
@@ -400,7 +402,7 @@
 tkbd[271]:= 1;
 end;
 
-var Controller: array [0..5] of PSDLJoystick;
+var Controller: array [0..5] of PSDL_Joystick;
 	
 procedure ControllerInit;
 var i, j: Integer;
@@ -456,6 +458,9 @@
 	end
 else	
 	WriteLnToConsole('Not using any game controller');
+{$IFDEF IPHONEOS}
+theJoystick:= Controller[0];
+{$ENDIF}
 end;
 
 procedure ControllerClose;