Définition de l'application

Pour créer une application il faut hériter de la classe odfaeg::core::Application.
(Il faut donc créer une nouvelle classe et la faire hériter de la classe odfaeg::core::Application.)
La classe odfaeg::core::Application possède deux constructeurs, un pour les applications graphique et
un autre pour les applications console.

Création d'une application graphique.

Pour créer une application graphique il vaut faudra appeler le constructeur avec arguments,
en lui passant un sf::VideoMode, ainsi que le titre de la fenêtreSFML, (un std::string), le style (sf::Style) ainsi que les paramètres opengl. (odfaeg::window::ContextSettings)

Méthodes virtuelles pouvant être redéfinie.

Par défaut l'application ne fait rien, elle affiche juste une fenêtre, si vous voulez dessiner dans la fenêtre
et gérer les événements, il va falloir redéfinir certaines fonctions membres de la classe odfaeg::core::Application.
La première méthode pouvant être redéfinie est la méthode onLoad, c'est dans cette méthode que ODFAEG va charger
les ressources externe à l'application.
(Par exemple, une image externe chargée à partir d'un fichier qui se trouve sur le disque dur.)
La seconde est la méthode onInit, dans cette méthode ODFAEG va initialisé toutes les entités qui devront être affichées
au démarrage de l'application.

La troisième méthode est la méthode onRender, elle prend en paramètre un pointeur sur un objet de
type RenderComponentManager. En fait dans cette méthode, odfaeg va décrire tout ce qui devra être affiché sur
des composants de rendus, nous verrons ce que sont les composants de rendu dans le prochain chapitre, pour l'instant,
considérer les simplements comme des couches sur lesquelles on va pouvoir dessiner différentes parties de notre scène.
(Par exemple un composant pour le sol et un autre pour le reste)

La quatrième méthode est la méthode onDisplay, elle prend en paramètre un pointeur sur la fenêtre de rendu,
c'est dans cette méthode que ODFAEG va dessiner sur la fenêtre de rendu!
La cinquième méthode est la méthode onUpdate, cette dernière prend un pointeur sur la fenêtre qui gère l'évènement et une référence sur un événement (IEvent),
à chaque fois qu'un événement est généré, ODFAEG appelle cette méthode, c'est donc dans cette méthode que ODFAEG
va remettre à jour tout les états de vos objets.
Et la dernière méthode est la méthode onExec, cette dernière fonction membre ne prend aucun paramètre,
c'est dans cette méthode que ODFAEG va effectué les derniers traitements en fonction des états défini dans la méthode
onUpdate, on aura par exemple dans cette méthode :
les déplacements et les mises à jour des positions des objets en temps réel.

Création d'une application console.

Il n'est parfois pas nécessaire de créer une application de type graphique, par exemple, pour le cas des applications
de type serveur.
Pour créer une application console, il suffit simplement d'appeler le constructeur par défaut de la classe
odfaeg::core::Application.

Méthode virtuelle pouvant être redéfinie.

La première méthode pouvant être redéfinie est la méthode onLoad, c'est dans cette méthode que ODFAEG va charger
les ressources externe à l'application. (Par exemple, une image externe chargée à partir d'un fichier qui se trouve
sur le disque dur.)
La seconde est la méthode onInit, dans cette méthode ODFAEG va initialisé toutes les entités qui devront être affichées
au démarrage de l'application.
Et la dernière méthode est la méthode onExec, cette dernière fonction membre ne prend aucun paramètre,
c'est dans cette méthode que ODFAEG va effectué les derniers traitements tels que la réception et l'envoi de message
sur un réseau.

Autres méthodes utiles.

Application::getTimeClock : cette méthode statique permet de récupérer l'horloge qui mesure le temps écoulé depuis le lancement
du programme.
getClock("ClockName") : cette méthode renvoie une horloge liée à l'application, par défaut, il y a une horloge d'ajoutée,
appelée LoopTime qui mesure le temps boucle, donc, le temps écoulé depuis le dernière appel à la méthode exec.
addClock(sf::Clock, std::string name) : ajoute une horloge liée à l'application, cette horloge sera référencée par un nom.

Pour l'instant ODFAEG utilise encore la classe sf::Clock mais par la suite elle sera remplacée par la classe Clock de ODFAEG.
onDisconnected(User* user) : Renvoie un pointeur vers un utilisateur qui se déconnecte du réseau.
app : pointeur vers l'application courante.
Ensuite il ne reste plus qu'à créer l'application dans le main, pour cela, il suffit d'appeler le constructeur
de la classe héritant de odfaeg::core::Application, et ensuite, d'appeler la méthode exec comme ceci :
(par exemple si la classe dérivée s'appelle MyAppli, sa donnera ceci, ici je passe les paramètres au constructeur
de la classe MyAppli dans le main)


            MyAppli app(sf::VideoMode(800, 600, 32), "Test odfaeg");
            return app.exec();
            

Et voilà maintenant vous savez créer une application ODFAEG!

Structure du framework ODFAEG.

Le framework odfaeg est décomposé en 7 parties :

  • odfaeg::core pour les fonctions utilitaires
  • odfaeg::math pour les opérations mathématique.
  • odfaeg::physics pour la physique.
  • odfaeg::window pour le fenêtrage.
  • odfaeg::graphic pour le graphisme.
  • odfaeg::network pour le réseau.
  • odfaeg::audio pour le son.
  • Chaque partie peut communiquer entre elle grâce à une classe statique, la classe World par exemple.
    Il y a cinq sortes d'objets importants dans ODFAEG :
  • Les entités, chaque objet dessinable et/ou transformable de ODFAEG (et non de SFML), la classe Tile par exemple.
  • Les "entity manager" qui contiennent les entités, par exemple, la classe map.
  • Les composants qui dessinent les entités, par exemple, la classe PerPixelLinkedListRenderComponent.
  • Les "entity systems" qui mettent à jour les entités, par exemple la classe AnimationUpdater.
  • Le "monde" (la classe World) qui contient tout ce qui a été cité précédemment.
  • Il y a deux type de composants, les composants de légés qui dessinent des interfaces graphiques et
    les composants lourd qui dessinet des entités ODFAEG à l'aide de shaders.