Description des fichiers dans le dossier neo/framework.
- Chaque section prend le nom des deux fichiers C++ (.h et .cpp) auquelle elle fait référence. Ainsi, Common indique les fichiers Common.h et Common.cpp.
- Certaines sections ajouteront l'extension pour signaler un fichier unique, tel CVarSystem.h.
- Une note « + description » indique que le fichier contient une description détaillée pour une ou plusieurs classes.
- Une classe entre parenthèses indique qu'elle est héritée : SousClasse (ClasseDeBase).
=Common
La classe abstraite idCommon est héritée par idCommonLocal, et déclare des méthodes pour :
- l'initialisation et la fermeture du jeu
- la boucle du jeu : la fonction idCommon::Frame() est appelée sans arrêt dans la fonction principale (WinMain()) dans neo/sys/win32/win_main.cpp
idCommonLocal
- idCommonLocal::DPrintf() n'affiche un message dans la console que si la CVar
developer
(com_developer
dans le C++) a une valeur de 1.
=Console
idConsole (classe virtuelle pure) et sa sous-classe, idConsoleLocal.
Contient les commandes spéciales (Entrée, Ctrl + L, PageUp, etc.) pour la console.
=CVarSystem.h (+ description)
idCVar est la classe utilisée pour toutes les variables qu'on peut modifier avec la console.
=DeclManager (+ description)
Classes (.h) :
- idDeclBase
- idDecl
- idDeclManager
Classes (.cpp) :
- idDeclType
- idDeclFolder
- idDeclLocal
- idDeclFile
- idDeclManagerLocal
Beaucoup de fichiers ont accès à un objet de type idDeclManager nommé declManager
(Game_local.cpp). Grâce à cet objet, on peut faire référence à la méthode idDeclManagerLocal::FindMaterial(), qui permet de trouver un matériel dans le dossier base.
Note : declManager
est un objet idDeclManager, et sa méthode FindMaterial() est une fonction virtuelle pure. Par contre, il est initialisé avec un objet idDeclManagerLocal (DeclManager.cpp, ligne ~249), ce qui lui permet d'utiliser l'implémentation idDeclManagerLocal::FindMaterial().
Si un objet idDeclManager est initialisé avec un idDeclManagerLocal, c'est possiblement parce que certaines fonctions attendent un idDeclManager ; par contre, je n'en suis pas certain.
=DeclPDA
Classes (.h) :
- idDeclEmail
- idDeclVideo
- idDeclAudio
- idDeclPDA (idDecl) : classe principale qui regroupe toutes les fonctions du PDA. Je ne crois pas que cette classe affiche elle-même quoi que ce soit à l'écran, car il n'y a aucun objet idUserInterface ou semblable dans les fichiers DeclPDA.h/cpp.
=EventLoop
Classe : idEventLoop
idEventLoop reçoit des événements et les envoie aux parties concernées du moteur.
De plus, cette classe s'occupe des journaux. La journalisation est une méthode d'enregistrement de données : un fichier temporaire enregistre les nouvelles données et ne les transfère à leur destination finale que lorsqu'elles sont complètes. Ceci permet d'éviter les erreurs d'écriture et la corruption de données si l'application à laquelle elles appartiennent plante.
Un seul objet de type idEventLoop est créé, dans EventLoop.cpp.
idEventLoop eventLoopLocal;
idEventLoop *eventLoop = &eventLoopLocal;
Note : Ce genre de code apparaît ailleurs dans le moteur, mais habituellement, le premier objet est une occurrence d'une classe « locale » et le second, de sa classe mère, par exemple dans neo/game/Game_local.cpp :
idGameLocal gameLocal;
idGame * game = &gameLocal; // statically pointed at an idGameLocal
Par contre, dans ce dernier extrait, la classe idGame est une interface abstraite qui sert à limiter les fonctions publiques accessibles, alors que dans EventLoop.cpp, on dirait qu'eventLoopLocal
est créé localement tout simplement pour être supprimé automatiquement à la fermeture du programme (il n'est pas utilisé ailleurs).
=File
Classes :
- idFile
- idFile_Memory (idFile)
- idFile_BitMsg (idFile)
- idFile_Permanent (idFile)
- idFile_InZip (idFile)
La classe idFile représente un fichier et permet de le parcourir, y lire le contenu ou le modifier, entre autres.
=FileSystem (+ description)
Classes (.h) :
- idFileList
- idModList
- idFileSystem
Classes (.cpp) :
- idDEntry (idStrList)
- idFileSystemLocal (idFileSystem)
- idInitExclusions
Structures notables :
- pack_t : contient (probablement) des informations sur un fichier .pak.
- directory_t : deux chaînes, une pour le chemin racine de Doom (
path
), et l'autre pour le sous-dossier des ressources (gamedir
). Ce type d'objet est utilisé presque exclusivement par la structure searchpath_s. - searchpath_s / searchpath_t : comme directory_t et pack_t, cette structure n'est utilisée que dans FileSystem.cpp. Elle contient deux pointeurs : un pour un objet directory_t et un autre pour un pack_t.
idFileSystemLocal
- idFileSystemLocal::AddGameDirectory() ajoute un répertoire de ressources. Cette fonction est appelée dans idFileSystemLocal::SetupGameDirectories() pour déterminer les quatres dossiers de ressources par défaut (
fs_basepath
,fs_cdpath
,fs_devpath
etfs_savepath
).
=KeyInput
Définition de toutes les touches utilisées par le jeu (enum keyNum_t). Comprend les caractères internationaux.
Toutes les méthodes d'idKeyInput sont statiques.
- idKeyInput::SetBinding() associe une touche à une action (utilisée pour le réglage des touches).
- idKeyInput::GetUsercmdAction() retourne l'index (int) de l'action reliée à une touche appuyée. Par exemple, la touche W signifie marcher à l'avant, la touche Espace signifie sauter...
- idKeyInput::KeysFromBinding() retourne le nom (const char *) de l'action associée avec une touche (cette fonction est appelée plusieurs fois durant l'initialisation).
=Licensee
Ce fichier ne contient aucune classe. Il sert plutôt à déclarer des constantes qui seront utilisées partout, comme le nom du jeu (GAME_NAME
), le dossier principal des ressources (CD_BASEDIR
), le fichier de configuration (CONFIG_FILE
), etc.
Constantes notables :
BASE_GAMEDIR
: le dossier des ressources (base par défaut). Remarquer que Doom cherchera ce dossier dans le répertoire de l'exécutable, même si on règle la CVarfs_basepath
à un autre dossier.
=Session
-
idSessionLocal::Draw() serait le frontal (front end) du moteur de rendu : elle vérifie d'ailleurs si
guiTest
(un objet idUserInterface) a une valeur ; si oui, elle le rend à l'écran avec l'instruction suivante :guiTest->Redraw( com_frameTime );
- idSessionLocal::StartMenu() est appelée non seulement à l'affichage du menu au démarrage du jeu, mais aussi lorsqu'on met le jeu en pause (car le menu principal est aussi utilisé comme menu Pause).
- idSessionLocal::TestGUI() est appelée quand on tape
testgui
dans la console ; elle règle la valeur d'un objet idUserInterface,guiTest
. (Voir idSessionLocal::Draw().)
=UsercmdGen
idUsercmdGen (abstraite) et sa sous-classe, idUsercmdGenLocal.
L'énumération usercmdButton_t (dans UsercmdGen.cpp) contient les types d'action disponibles (avancer, reculer, sauter...).
La classe usercmd_t est définie UsercmdGen.h.