[opengl - sdl] système de menus a partir d'un fichier texte

Description

Longtemps après GLIB (pour ceux qui se souviennent :p), j'ai décidé pour les besoins d'un jeu de refaire un système de menus presque intégralement chargés a partir d'un fichier texte.
Seulement, sous OpenGL impossible d'afficher du texte sans faire sa propre lib donc au passage j'en ai fait une qui
  • Charge des bmp 24 bits et ajoute la trasparence si le paramètres alpha vaut true
  • SplittBMP divise un bmp en partie de meme taille passé en paramètres et renvoie un tableau de GLuint correspondant aux texures (utiles pour les sprites et compagnie) ajoute la transparence par défaut.
  • DrawText permet d'afficher du texte a l'endroit voulu et prend en compte le formatage printf ainsi que le changement de couleur de la forme <r;g;b> (par ex <255;255;255> mettra le texte en blanc)
  • une structure Font dont on a besoin pour afficher du texe qui charge les données des lettres â partir d'un bmp de font (16 caractères x 16 caractères). La police doit avoir la meme largeur pour chaque carctère.

Ensuite la classe CMenu proprement dite gère
  • les boutons (centre automatiquemetn le texte)
  • les edits (assez évolué je pense meme si c'est pas encore les text box de win)
  • et les check (assez moyens)

Cepandant il faut passer les coordonées de la souris dans une fonction les boutons de la sorusi dans un autre,.. Si voustravaillez avec SDL il y a
CManu::Gere'(SDl_Event,int,int);
qui s'occupe de retrouver les bons paramètres et des les envoyer au bonne fonction les deux int sont la pour indiquer la résolution pour le calcul des vraies coordonées
vous devez utiliser la fonction gluortho2D(-w/2,w/2,-h/2,h/2) sinon le progr se trompe dans le calcul des coordonées.
Ensuite un système d'interface avec le programmeur assez simplifié
GetElement(char* nale) retourne un pointeur sur le control qui a le nom name
ainsi qu'un membre event qui est une structure contenant :
event.type qui contient le type du message(MOUSE_ON,MOUSE_OUT,GOT_FOCUS,LOST_FOUS,PRESSED,RELEASED,CHANGE )
et event.cause l'item qui a généré ce message exemple vous voulez savoir si la souris est sur l'edit nommé edit il suffit de faire :
MENU_Event event = Menu.GetEvent();
if(event.type==MOUSE_ON && event.cause==Menu.GetElement("Edit")
// le code en conséquence

Atention cepedant l'appel à Getevent réinitalise l'evenement c'est a dire qu'il faut le stocker dans une variable et ne pas faire plusieurs appel.
En outre j'ai eu besoin d'une lsite donc j'en ai fait une assez perfectionée doublement chainée.

Conclusion :


La texture carac.bmp n'est pas demoi elle est de remram44 et les texture s button_none,button_mouse_on,et button_pressed sont issus du jeu Battle For Wesnoth sous license GPL.
Je vais bientot ajotuer de nouveaux controls comboboc,.. quand j'aurais le temps
Si vous trouvez des bugs n'hésitez pas à m'en faire part ou si vous avez des suggestions,..

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.