rss

Jouons avec le P/Invoke (et pourquoi Linux est en manque)

Category : C#, Linux, Mono.Xna

La plupart du code relié aux gamepads Xbox a été commité sur le SVN, néanmoins il reste une méthode qui n’a pas été implémenté car elle est assez complexe (i.e. fortement dépendante de la plateforme) : SetVibration().

Pour Mono.Xna nous utilisons SDL.NET qui est un wrapper au niveau de Tao.Sdl qui est lui même un binding de la bien connue bibliothèque SDL. SDL est utile dans le sens où elle abstrait les opérations, comme le support des joysticks, sur pas mal de système différent. Le revers de tout ça est que ce qui est permis est assez limité : une fois qu’on a passé le cap de l’état des bouttons on peut difficilement faire plus.

Ainsi pour cette opération très spéciale qu’est le maniement des retours de force du gamepad de la 360, il faut utiliser les API natives. Pour Windows pas de souci, un peu de Googling et j’ai trouvé la lib XInput qui a été visiblement créée pour être utilisé en interne par XNA. Du côté de MacOS X j’ai aussi trouvé quelques pistes dans la documentation mais le maniement est plus délicat (l’API semble permettre des choses puissantes, les vibrations y sont représentés par des effets qui sont paramétrables etc…, mais elle est plus complexe). Et comme tout bon Linuxien qui se respecte je me devais de faire marcher l’histoire sous le système Pingouin jusqu’à que je ne trouve… rien. Le kernel (et pas Xorg comme je le pensais au début) supporte bien les joysticks mais bizarrement c’est le même ordre de fonctionnalité que SDL (étrange, étrange :-P ). Pour être plus honnête il semble bien y’avoir une fonction obscure qui permet d’envoyer des informations bas niveau au joystick mais elle est tellement bas-niveau qu’il faut manipuler directement les bits ce que je ne peux pas faire vu mon peu d’expérience assembleur/système ou simplement le fait que je n’ai pas de contrôleur XBox 360 (si vous avez un cadeau à faire … ;-) ). Bref Linux de ce côté là est à mon avis en retard (vis à vis de ces concurrents Windows et MacOS X).

Post a comment