 |
zeldaroth.fr le site officiel de Zelda ROTH
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
linuxprocess Spectre

Inscrit le: 24 Aoû 2017
Messages: 2
|
Posté le: Jeu Aoû 24, 2017 22:25 Sujet du message: Support Joystick |
|
|
Hello,
On va dire que je suis du genre développeur pressé
Ancien fan de zelda sur snes, je suis tombé avec enthousiasme sur ce site.
J'ai donc commencé à me lancer dans ces nouvelles aventures de Link (je n'en suis qu'au tout début !).
J'ai trouvé un peu dommage de ne pas pouvoir utiliser mon joypad (xbox360 tres bien supporté sous Linux).
Du coup, j'ai codé un patch rapide.
Je le poste ici, à toute fin utile, sans aucune garantie
Il est possible que ca soit directement utilisable pour les autres jeux ... j'ai même pas regardé
Moi, pour le moment, ca me suffit.
Au passage : merci pour le travail réalisé !
A+
Code: |
diff -uw srcorig/Keyboard.cpp src/Keyboard.cpp
--- srcorig/Keyboard.cpp 2009-02-18 23:30:03.000000000 +0100
+++ src/Keyboard.cpp 2017-08-23 12:19:43.946258781 +0200
@@ -69,16 +69,68 @@
int Keyboard::getMode() {return mode;}
void Keyboard::setMode(int i) {mode=i;}
+/* joystick */
+
+/* configuration ideale(?) pour manette XBOX */
+unsigned int joyconfig[]={
+ SDLK_w, /* bouton A */
+ SDLK_c, /* bouton B */
+ SDLK_SPACE, /* bouton X */
+ SDLK_x, /* bouton Y */
+ SDLK_LSHIFT,/* bouton L */
+ SDLK_LCTRL, /* bouton R */
+ SDLK_p, /* bouton back */
+ SDLK_RETURN,/* bouton start */
+ SDLK_F1 /* bouton middle */
+};
+
int Keyboard::gererClavier() {
+
+ keys = SDL_GetKeyState(NULL);
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT : return -1;
case SDL_KEYDOWN :
if (pollKey(event) == -1) return -1;
break;
+ case SDL_JOYAXISMOTION:
+ if(event.jaxis.axis == 0) // horizontal
+ { if(event.jaxis.value<-10000)
+ { keys[SDLK_LEFT]=1;
+ keys[SDLK_RIGHT]=0;
+ }
+ else if(event.jaxis.value>10000)
+ { keys[SDLK_LEFT]=0;
+ keys[SDLK_RIGHT]=1;
+ }
+ else
+ { keys[SDLK_LEFT]=0;
+ keys[SDLK_RIGHT]=0;
+ }
+ }
+ if(event.jaxis.axis == 1) // vertical
+ { if(event.jaxis.value<-10000)
+ { keys[SDLK_UP]=1;
+ keys[SDLK_DOWN]=0;
+ }
+ else if(event.jaxis.value>10000)
+ { keys[SDLK_UP]=0;
+ keys[SDLK_DOWN]=1;
+ }
+ else
+ { keys[SDLK_UP]=0;
+ keys[SDLK_DOWN]=0;
+ }
+ }
+ break;
+ case SDL_JOYBUTTONDOWN:
+ keys[joyconfig[event.jbutton.button]]=1;
+ break;
+ case SDL_JOYBUTTONUP:
+ keys[joyconfig[event.jbutton.button]]=0;
+ break;
}
}
- keys = SDL_GetKeyState(NULL);
pollKeys(keys);
return 0;
diff -uw srcorig/main.cpp src/main.cpp
--- srcorig/main.cpp 2008-12-10 20:10:20.000000000 +0100
+++ src/main.cpp 2017-08-23 10:47:17.804232513 +0200
@@ -26,6 +26,14 @@
atexit(SDL_Quit);
//if(SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) *SOUND = false;
+ static SDL_Joystick *js=NULL;
+
+ if( SDL_InitSubSystem(SDL_INIT_JOYSTICK) != -1
+ && SDL_NumJoysticks()
+ && (js=SDL_JoystickOpen(0)) )
+ printf("Joystick 0 activated\n");
+
+
SDL_WM_SetCaption("Return of the Hylian",NULL);
SDL_Surface* icon = SDL_LoadBMP("data/images/logos/triforce.ico");
SDL_SetColorKey(icon,SDL_SRCCOLORKEY,SDL_MapRGB(icon->format,0,0,0));
|
|
|
Revenir en haut de page |
|
 |
Vincent Administrateur
 Primé d'or
 Héros

Inscrit le: 05 Oct 2006 Age: 40
Messages: 4571
|
Posté le: Dim Aoû 27, 2017 14:58 Sujet du message: |
|
|
Bonjour,
beau boulot, ça semble plutôt pas mal !
Par contre pour info la manette xbox (et d'autres) sont déjà gérées par la dernière version du jeu mais que je ne l'ai pour le moment compilée que pour windows (parce que pas le temps ^^) |
|
Revenir en haut de page |
|
 |
linuxprocess Spectre

Inscrit le: 24 Aoû 2017
Messages: 2
|
Posté le: Lun Aoû 28, 2017 22:03 Sujet du message: |
|
|
Bonjour,
Merci, mais ca reste du quick'n dirty, je suis sûr que tu as fais mieux
Il y a moyen de suivre les mises à jour des sources dans un repos publique ? |
|
Revenir en haut de page |
|
 |
Vincent Administrateur
 Primé d'or
 Héros

Inscrit le: 05 Oct 2006 Age: 40
Messages: 4571
|
Posté le: Jeu Aoû 31, 2017 18:46 Sujet du message: |
|
|
Hélas non, je gère mes sources suivant la célèbre méthodologie dite "à l'arrache" ^^ Tu peux juste récupérer la dernière version sur le site.
Un jour je verrai à me motiver pour mettre ça sur un GIT, mais ce n'est pas fait pour le moment. |
|
Revenir en haut de page |
|
 |
|
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|