Chapitre 20 Plate-forme de OR-programme

Open Rails Plate-forme logicielle


20.1 Architecture



Pour mieux comprendre le fonctionnement, les performances et les fonctions du jeu Open Rails, le schéma d'architecture ci-dessous explique comment le code logiciel est organisé. L'architecture du logiciel Open Rails permet une extension et un développement modulaires, tout en fournissant des méthodes standardisées pour personnaliser l'expérience de simulation.


Remarque : Veuillez noter que ce diagramme comprend de nombreuses capacités et fonctions qui doivent encore être implémentées.

20.2 Moteur de jeu Open Rails


Le logiciel Open Rails est construit sur la plateforme MonoGame. MonoGame est une implémentation open source du framework Microsoft XNA 4 et fournit :


• Cadre de jeu


• Rendu 2D et 3D


• Effet sonore et lecture de musique


• Entrées clavier, souris, tactile et contrôleur


• Création et optimisation de contenu


• Bibliothèque mathématique optimisée pour les jeux


20.3 Images par seconde (FPS) Performances


Le taux FPS est par défaut non lié au taux de synchronisation du moniteur. Cependant, avec cette option, le taux FPS peut être défini à la valeur du taux de rafraîchissement du moniteur.


20.4 Horloge de jeu et horloge interne


Comme les autres logiciels de simulation, le logiciel Open Rails utilise deux horloges internes ; une horloge de jeu et une horloge interne. L'horloge de jeu est nécessaire pour synchroniser le mouvement des trains, l'état du signal et présenter le bon environnement de jeu. L'horloge interne sert à synchroniser le processus logiciel pour une efficacité optimale et un affichage correct de l'environnement de jeu.


L'équipe d'Open Rails s'assure que l'horloge de jeu gère correctement le temps dans la simulation, afin qu'un train parcoure la bonne distance au bon moment. L'équipe de développement considère cet aspect vital pour une simulation précise en s'assurant que les activités s'exécutent de manière cohérente sur les systèmes informatiques des membres de la communauté.


20.5 Utilisation des ressources


Étant donné que le logiciel Open Rails est conçu pour le framework MonoGame, il exploite nativement la capacité des cartes graphiques actuelles à décharger une grande partie de la charge de travail de rendu d'affichage du processeur de l'ordinateur.


20.6 Codage multithread


Le logiciel Open Rails est conçu dès le départ pour prendre en charge jusqu'à 4 processeurs, en tant qu'unités virtuelles ou physiques. Au lieu d'un seul thread bouclant et mettant à jour tous les éléments de la simulation, le logiciel utilise quatre threads pour les fonctions principales du logiciel.


• Thread 1 - Boucle de rendu principale (RenderProcess)


• Fil 2 – Physique et animation (UpdaterProcess)


• Fil 3 – Chargement/déchargement de la forme et de la texture (LoaderProcess)


• Fil 4 – Son


Il existe d'autres threads utilisés par le code multijoueur car chaque communication ouverte est gérée par un thread.


Le RenderProcess s'exécute dans le thread principal du jeu. Lors de son initialisation, il démarre deux threads subsidiaires, dont l'un exécute le UpdaterProcess et l'autre le LoaderProcess. Il est important que l'Updater-Process garde une image d'avance sur RenderProcess, préparant toutes les mises à jour de la caméra, du ciel, du terrain, des trains, etc. nécessaires avant que la scène puisse être correctement rendue. S'il n'y a pas suffisamment de ressources de calcul pour que l'UpdaterProcess prépare l'image suivante pour le RenderProcess, le logiciel réduit la fréquence d'images jusqu'à ce qu'il puisse rattraper son retard.


Les tests initiaux indiquent que les saccades sont considérablement réduites car le processus (LoaderProcess) associé au chargement des formes et des textures lors du franchissement des limites des tuiles n'entre pas en concurrence avec la boucle de rendu principale (RenderProcess) pour les mêmes cycles CPU. Les problèmes de sécurité des threads sont traités principalement par le partitionnement des données plutôt que par des verrous ou des sémaphores pour optimiser les performances.


Les tests en cours par l'équipe Open Rails et la communauté détermineront quelles sont les limites pratiques du logiciel et où se situent. Au fur et à mesure que l'équipe de développement reçoit les commentaires de la communauté, des améliorations et une meilleure optimisation du logiciel contribueront à de meilleures performances globales, permettant potentiellement des modèles à polygones élevés avec des itinéraires densément peuplés à des fréquences d'images acceptables.


20.7 Serveur Web


Le jeu utilise un serveur Web intégré pour fournir des pages Web standard et personnalisées à n'importe quel navigateur. Cela peut être exécuté sur le même PC qu'Open Rails ou sur un autre PC ou un autre appareil connecté à votre réseau local.


Le moyen le plus simple d'accéder à ces exemples est de démarrer le jeu puis de lancer un navigateur sur le même PC. Entrez ensuite "localhost:2150" dans la barre d'adresse de votre navigateur. (2150 est le numéro de port par défaut défini dans Menu > Options > Général)


20.7.1 Exemples de pages Web


Un certain nombre de pages Web sont incluses dans l'installation d'Open Rails comme exemples de ce qui peut être fait avec les API.


Certains de ces exemples de pages répètent les données des panneaux du jeu pour fournir un affichage plus pratique. Les exemples de pages se trouvent dans le sous-dossier Content\Web du dossier du programme OR et le serveur Web est par défaut Content\Web\index.html.


Si vous choisissez de développer vos propres pages, pensez à les partager avec la communauté Open Rails.


• La page Web HUD répète la superposition F5.

• La page Track Monitor répète le panneau F4 et est également disponible avec un fond sombre pour une utilisation nocturne.


• La page Train Driving propose un panneau qui n'est pas encore disponible dans la version officielle d'Open Rails.


• Une autre page propose ces deux éléments et les panneaux peuvent être déplacés pour obtenir le meilleur agencement.

• La page Heure affiche l'heure de la simulation sous forme d'horloge numérique et renvoie à 3 versions d'une horloge analogique.

• La page Carte montre la position et la direction du train dans le monde réel sur OpenRailwayMap https://www.openrailwaymap.org. Différentes couches OpenRailwayMap sont disponibles. La convivialité dépend de l'itinéraire, la position du train n'est pas toujours correcte à 100%.

20.7.2 Interfaces de programmation d'applications (API)


Le serveur Web dispose d'une API simple pour obtenir des données du simulateur. Les réponses sont des structures de données OU sérialisées au format JSON.


Vous pouvez voir les données JSON simplement en naviguant. Par exemple : pour APISample, accédez à http://localhost:2150/API/APISAMPLE

Remarque : La partie API de cette adresse est sensible à la casse.


Remarque : Pour éviter de surcharger le simulateur, veuillez limiter les appels d'API à une ou deux fois par seconde.

Méthode Appel d'API Description Type de réponse
GET /API/HUD/<n> Récupère les informations rendues sur le HUD <F5>, ligne par ligne, page par page, où <n> est le numéro de page HUD 0 à 7. Orts.Viewer3D.WebServices .WebServer.ORTSApiController .HudApiArray
GET /API/ TRAINMONITOR or /API/TRAININFO Récupère les informations rendues sur le moniteur de piste, telles que la vitesse, l'accélération, la pente et les dangers à venir. Orts.Simulation.Physics .Train.TrainInfo
GET /API/TIME Récupère uniquement le temps de simulation en secondes depuis minuit. Orts.Viewer3D.WebServices .WebServer.ORTSApiController .ApiTime
GET /API/MAP Récupère la position et la direction du train. À côté de diverses données d'itinéraire Open Rails. Orts.Viewer3D.WebServices .WebServer.ORTSApiController .ApiMap
GET /API/ CABCONTROLS Récupère un tableau des contrôles cab pour le joueur localhost TypeName, MinValue, MaxValue, RangeFraction. Orts.Viewer3D.WebServices .WebServer.ORTSApiController .ApiCabControls
GET /API/APISAMPLE Un objet de test qui illustre la sérialisation JSON de divers types de données. Orts.Viewer3D.WebServices .WebServer.ORTSApiController .ApiSampleData
Share by: