1 points par GN⁺ 2024-02-21 | 1 commentaires | Partager sur WhatsApp
  • Moteur gratuit et open source permettant aux développeurs Pascal de créer des jeux 3D/2D et des interfaces utilisateur dans un même projet, puis de les déployer sur plusieurs plateformes
  • L’éditeur visuel et le système de composants gèrent ensemble les éléments de jeu et d’UI comme les scènes, caméras, navigation, éclairages, boutons, images et libellés
  • Prend en charge les workflows basés sur les modèles 3D, les animations 2D et les sprite sheets, avec la possibilité d’exploiter glTF, X3D, IFC ainsi que les intégrations avec Blender et Sketchfab
  • Propose des fonctions de rendu comme les effets de shaders, les ombres, les miroirs, le rendu physiquement réaliste, le bump mapping et la correction gamma, permettant diverses expressions graphiques avec le moteur de base
  • Sa structure, avec outil de build en ligne de commande, images Docker et documentation pour les principaux CI, facilite son utilisation pour des applications open source comme commerciales

Éditeur et mode de développement

  • Castle Game Engine est un moteur de jeu 3D/2D destiné au desktop, au mobile, aux consoles et au web
  • L’éditeur visuel permet de concevoir des jeux 3D/2D et des interfaces utilisateur
    • Prend en charge la mise à l’échelle automatique de l’UI et les ancres
    • Peut s’intégrer à plusieurs IDE, dont Visual Studio Code, Lazarus et Delphi
  • Les composants distinguent la composition du viewport et celle de l’UI
    • Les mondes 3D/2D peuvent utiliser des scènes, caméras, navigation, primitives, éclairages, etc.
    • L’UI peut utiliser des boutons, images, libellés, etc.
  • La base de code repose sur modern Object Pascal, avec des builds rapides et une exécution rapide fournis par défaut

Assets, graphismes et déploiement

  • Le mode de définition des données inclut les modèles 3D, les animations 2D et les sprite sheets
  • Utilise les standards ouverts glTF et X3D pour s’intégrer à des outils de création et dépôts d’assets comme Blender et Sketchfab
  • Les fonctions graphiques comprennent des effets de shaders combinables, les ombres, les miroirs, le rendu physiquement réaliste, le bump mapping et la correction gamma
  • Les cibles multiplateformes sont Windows, Linux, macOS, FreeBSD, Raspberry Pi, Android, iOS, Nintendo Switch et le web
    • Il est possible de travailler depuis n’importe quelle plateforme desktop
  • La compatibilité avec l’open source et la CI est assurée par un outil de build en ligne de commande et des images Docker
    • Fournit une documentation et des fichiers prêts à l’emploi pour GitHub Actions, GitLab CI, Jenkins, Woodpecker CI et d’autres CI
    • Le moteur est entièrement open source et peut être utilisé pour créer tout type d’application, y compris des applications propriétaires

1 commentaires

 
GN⁺ 2024-02-21
Avis sur Hacker News
  • https://castle-engine.io/why_pascal

    Je vais devoir jeter un peu d’eau froide là-dessus. La plupart des raisons énumérées — sécurité, multiplateforme, bibliothèques — se retrouvent aussi dans d’autres langages modernes, et l’une d’elles est la lisibilité, ce que j’ai du mal à accepter.
    Je travaille 8 heures par jour sur du code Pascal, et je ne le trouve pas plus facile à lire que la syntaxe C classique ; au contraire, je le trouve bien moins lisible. Comme il faut utiliser des mots entiers pour exprimer la syntaxe, le cerveau a du mal à distinguer immédiatement « ceci est la structure du code » de « ceci est le code proprement dit », et il faut réellement lire les mots. Je trouve que c’est une conception très improductive.
    Cette page donne l’impression d’avoir été écrite il y a 20 ans. Des arguments comme la sécurité de typage, en particulier, auraient été bien plus convaincants à l’époque.

    • Je suis d’accord pour dire que cela devient un peu ennuyeux quand on en lit tous les jours, mais à part Pascal, je n’ai jamais vu de langage dans lequel on puisse revenir trois ans plus tard et relire immédiatement sans problème.
      Je ne sais pas si c’est possible avec d’autres langages.
    • J’ai du mal à être d’accord avec ça. J’ai travaillé sur plusieurs projets Free Pascal, C, C++ et autres, et dans de gros projets, le code écrit par d’autres était plus facile à suivre en Free Pascal qu’en C/C++/Java, etc.
      Sauf dans des cas extrêmes — par exemple si l’on essaie d’écrire du code orienté objet dans un langage ésotérique ou un langage basé sur XML qui ne propose que des fonctionnalités impératives —, je pense que la lisibilité dépend du lecteur.
      Go est le seul autre langage que j’ai trouvé facile à suivre alors que je ne le connaissais pas très bien, mais ses fonctionnalités sont beaucoup plus simples et limitées. À l’inverse, Free Pascal est un langage “évier de cuisine” qui contient à peu près tout, et reste pourtant assez facile à lire.
      Cela dit, la principale raison d’utiliser Free Pascal n’est pas tant le langage lui-même que Lazarus IDE, ainsi que les frameworks FCL et LCL. Son compilateur rapide, son optimiseur correct, son nouveau backend LLVM utilisable quand on a besoin de plus de performances, et le grand nombre de plateformes prises en charge sont aussi des atouts.
      La rétrocompatibilité est également très importante. Si du code qui fonctionnait bien il y a quelques années se casse sans facteur externe, peu importe que le langage soit propre, cohérent et élégant : ce qui compte pour moi, c’est que le code qui fonctionnait continue de fonctionner.
    • D’abord, il y a la coloration syntaxique.
      Et après avoir vu certains mots quelques fois, on ne les « lit » plus vraiment au sens décrit ici : on les associe à des images, comme d’autres mots présents dans son vocabulaire mental. À condition que le vocabulaire du langage n’utilise pas des mots très similaires entre eux, lire des mots n’est pas plus difficile que lire des accolades.
    • Pour les personnes qui n’aiment pas les symboles, les mots peuvent aider. C est très concis, Pascal est verbeux. C’est un peu comme la différence entre C et Python.
      Les symboles d’un seul caractère peuvent être difficiles à appréhender pour certaines personnes, tout comme les mots le sont pour vous. Avec un bon IDE et une bonne structure de code, il devient aussi plus facile de distinguer la structure du code du code lui-même.
    • Savoir lequel de C ou Pascal est le plus lisible est une question de goût. Comme pour les couleurs d’un éditeur, selon l’humeur ou l’heure de la journée, l’un peut sembler plus lisible que l’autre.
      Cela dit, la principale raison pour laquelle j’aurais envie d’utiliser un moteur de jeu en Pascal pour un jeu, c’est de pouvoir éviter le garbage collection.
  • Articles liés :

    Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - juillet 2023, 307 commentaires
    Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - juin 2023, 3 commentaires
    Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - juin 2023, 10 commentaires
    Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - août 2021, 3 commentaires
    Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - juillet 2020, 20 commentaires
    Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - janvier 2018, 2 commentaires

  • Je ne me souviens même plus de la dernière fois que j’ai utilisé un langage de la famille Pascal. En 2001, dans un cours de programmation à l’université, il fallait utiliser Delphi ; l’école avait Delphi 4, mais moi j’avais acheté Delphi 5. J’ai sans doute encore bricolé avec pendant un an ou deux, mais après 2005 je pense ne l’avoir quasiment plus utilisé
    À l’université, on devait créer un programme de gestion de stock. Comme c’était un cursus IT, la plupart avaient du mal parce que la programmation n’était pas vraiment leur voie, mais moi j’étais presque un « prodige de la programmation », donc je me suis adapté à Delphi tout de suite
    Je ne connaissais pas vraiment Delphi en soi, mais dès que j’ai commencé à coder et que j’ai tapé var, begin, end, :=, etc., j’ai compris que c’était de la famille Pascal. Le fait d’avoir eu Turbo C et Turbo Pascal au lycée m’a permis d’avoir un peu d’avance
    La partie difficile, c’était de stocker les données d’inventaire dans un fichier binaire et de les retrouver avec une recherche binaire. Le tuteur était old school ; il y avait peut-être déjà dans Delphi davantage de solutions intégrées que l’on considère aujourd’hui comme évidentes en Go ou en C#
    Tout le monde galérait à faire passer le build, et avec le recul c’est un bon souvenir. Aujourd’hui, je mets Pascal dans la même catégorie que Basic. Le projet a l’air intéressant, mais je n’ai aucune envie d’utiliser Pascal, donc c’est un critère bloquant pour moi
    Cela dit, ça ne m’étonnerait pas qu’il existe encore un assez gros noyau de défenseurs de Pascal. Dans ce cas, tant mieux pour eux

    • On a sans doute à peu près le même âge. Au lycée, je faisais de petits jeux et des applis graphiques avec Turbo Pascal, puis plus tard j’ai créé des applis métier avec Delphi. Du point de vue de la conception du langage, je ne trouve pas que Pascal et C soient si différents
      À l’époque, quand je portais du code Pascal vers C, je remplaçais begin/end par des accolades, je déplaçais les déclarations d’interface dans des fichiers d’en-tête, et je remplaçais des fonctions bien nommées par des appels cryptiques à strtok. En comparaison, c’était inutilement moche
      Aujourd’hui, C est mon langage préféré, mais la propreté de Pascal et la convivialité de Delphi me rappellent encore ce qu’est une excellente expérience développeur
      J’utilise Android Studio depuis dix ans, mais ça n’arrive absolument pas à la cheville de l’expérience Borland Delphi Architect d’il y a vingt ans. Il y a peut-être aujourd’hui des fonctionnalités plus avancées, mais en comparaison c’est plutôt un bazar d’éléments déconnectés
    • Aujourd’hui, quel langage aurais-tu davantage envie d’utiliser ?
  • Après avoir appris Basic à la maison, le premier « vrai » langage de programmation que j’ai appris au lycée a été Pascal
    Mais un an ou deux plus tard, après avoir découvert C, je n’ai plus jamais regardé Pascal. C avait l’air plus « pro », plus flexible, plus proche du matériel. Pascal me semblait davantage adapté au développement d’applis GUI, tandis que C paraissait pouvoir tout faire, des entrailles d’un système d’exploitation aux drivers, en passant par les jeux et les applis GUI
    Bien sûr, c’était idiot, puisque Pascal pouvait aussi faire tout ce que C faisait, mais pour le jeune que j’étais, il semblait moins « sérieux » et moins « pro »

    • J’ai eu une expérience similaire
      Vers 1996-1997, je m’amusais à créer des effets de feu avec Turbo Pascal, mais la plupart des tutoriels utilisaient asm et mode 13h, et je n’avais que Turbo Pascal 5.5, qui ne prenait pas en charge le mot-clé asm
      J’ai bidouillé un peu, puis j’ai découvert C fin 1997, et après avoir vu la boucle for de C, je n’ai plus retouché à Pascal
  • Sympa. J’espère que le projet marchera bien. Le choix du langage est intéressant ; j’ai toujours vu Pascal comme un vieux langage, mais manifestement je me trompais

    • En fait, Go est grosso modo du Pascal avec des accolades, et personne ne traite Go de dépassé
  • J’étais curieux de voir à quoi ressemble une grosse base de code Pascal, alors j’ai regardé le code. Je n’avais pas vu de code Pascal d’une taille significative depuis environ 2001
    Ce qui m’a frappé, ce sont les noms de fichiers : je n’aime pas cette façon de préfixer tous les fichiers source par castle. Cela rend plus difficile de comprendre de quoi parle le fichier et donne l’impression qu’ils se ressemblent tous
    Pour le code lui-même, difficile à dire puisque je n’ai jamais utilisé Pascal, mais le moteur en lui-même a l’air chouette

    • Ce n’est pas différent du préfixe yy dans les fichiers yacc. Ça permet de repérer facilement quels fichiers sont des fichiers Castle, et d’éviter les collisions avec des fichiers ou des unités d’autres bibliothèques
      C’est quasiment chercher la petite bête pour rien
  • J’ai l’impression que ces développeurs Pascal doivent abattre un travail incroyablement productif

    • Si tu parcours les bibliothèques Delphi/FPC disponibles, il n’y a pratiquement rien qui manque. Il y a de tout, des widgets de dessin CAD aux frameworks pour construire des systèmes SCADA. La plupart ne sont pas sur GitHub, et quand elles y sont, elles n’ont pas des centaines d’étoiles
      À l’inverse, dans des langages plus populaires que j’utilise pour mes projets, comme Rust, j’ai l’impression que beaucoup de projets relèvent du genre « on a recréé grep pour la millième fois, mais cette fois correctement »
    • Object Pascal est un langage de programmation moderne. Il prend en charge tout ce qu’on attend d’un langage orienté objet moderne : classes, unités, propriétés, génériques, interfaces, réflexion, closures, etc.
  • Il est vraiment dommage que le produit Delphi ait été aussi mal géré par Borland/Embarcadero.
    Object Pascal est un excellent langage. Aujourd’hui, il permet de produire du code natif pour presque toutes les plateformes. Les binaires générés sont petits et rapides ; on peut considérer que c’est proche du niveau du C, et généralement 100 à 10 000 fois plus rapide qu’un code Python équivalent.
    Castle Engine est un énorme projet, qui permet de créer très facilement des jeux et des applications 3D selon une approche RAD. Contrairement à d’autres grands frameworks Pascal, ce n’est pas un produit legacy : il est en développement très actif. J’ai énormément de respect pour ses développeurs.
    Dans le même genre de projet vaste et impressionnant, il y a Mormot, un framework ORM/SOA/MVC basé sur du code hautement optimisé.
    Créer des applications serveur avec Object Pascal et Mormot est facile, et dans une situation où NodeJS peut traiter 500 requêtes par seconde, du code Pascal peut entrer dans la zone des plus de 10 000 requêtes par seconde.
    Ainsi, là où d’autres langages exigeraient des dizaines de serveurs pour encaisser la charge, un serveur écrit en Object Pascal peut facilement tourner sur une seule machine. Utiliser ce langage permet de réduire fortement les coûts.
    Beaucoup de gens se souviennent d’Object Pascal uniquement comme d’un langage pédagogique, mais le langage a évolué et possède encore des fonctionnalités absentes d’autres langages. L’une des plus importantes est la RTTI, c’est-à-dire la réflexion. Il n’y a qu’un seul domaine où il est en retard sur les tendances modernes : le multithreading/les coroutines ne sont pas intégrés au langage lui-même, comme en Go.
    Enfin, du code écrit il y a 40 ans peut encore être compilé et exécuté aujourd’hui. Pendant ces 40 années, d’innombrables langages ont été à la mode puis ont disparu, mais Pascal est toujours là.
    Pour revenir à Castle Engine, même si vous n’êtes pas familier avec Object Pascal, je recommande vraiment d’essayer leur éditeur visuel. Il est vraiment impressionnant.

  • L’époque où je programmais en Pascal (Turbo/Borland) a été la plus amusante. Les « Units », les unités de compilation, fonctionnaient tout simplement bien, et la hiérarchie des dépendances n’autorisait qu’une forme de DAG. La compilation et l’utilisation étaient très rapides, tout comme l’édition et le débogage.
    Avec le passage à Delphi, j’ai eu l’impression qu’on avait perdu quelque chose. Cela ne veut pas dire que c’était un mauvais produit, mais les gens ont commencé à regarder ailleurs.
    Malgré tout, je garde précieusement le souvenir de cette époque où Pascal m’a servi de point de départ pour passer d’Apple Basic à C/C++, et où j’ai aussi pu apprendre peu à peu en utilisant un peu d’assembleur inline.