27-03-2007 21:27:23
- Agar
- Membres

- Date d'inscription:
- Messages: 16
- IP: 86.69.84.84
- Courriel
Je ne savais pas trop où poster ça. Vu que c'est un projet sur lequel je bosse et qu'il est presque terminé (les 3/4 du code sont bouclés et ça devrait être fini d'ici un mois), j'ai opté pour la section "projets terminés". Je m'excuse d'avance pour la publicité mensongère.
Voici donc mon projet: AGE. AGE, pour Adaptable Game Engine.
Introduction
AGE est une bibliothèque DLL écrite en C# permettant la création de toutes formes de jeux/applications multimédia. Elle utilise IrrlichtNETCP pour la vidéo, Bass.NET (pas IrrKlang, qui n'offre pas assez de possibilités) pour le son et ODE.NET pour la physique.
L'utilisation du moteur est simple : il suffit de créer une instance de la classe AGEEngine (imaginez-la comme une sorte de IrrlichtDevice, la mère de tout le reste). Ensuite, cette classe a pour principale fonction de créer des entités via les diverses méthodes AddEntity().
1- Le concept d'entité
C'est quoi donc, une entité? En fait, tout élément du monde de AGE dérive de la classe abstraite AGEEntity. L'idée est de faire en sorte que cet objet soit la SEULE chose dont vous ayez besoin pour ajouter un élément à votre jeu. Vous voulez lui faire émettre un son? Pas de problème, le moteur gérera la stéréo et le volume automatiquement en fonction de sa position relative à la caméra. Vous préférez qu'il émettre un vrombissement permanent ? Très bien, AGE s'occupe de tout: quand l'entité passera à côté de vous, le volume et la stéréo évolueront automatiquement. Oui, l'effet Doppler est géré. De la même façon, plus besoin de se prendre la tête à "lier" l'objet du moteur physique à l'objet du moteur vidéo. Une entité a un modèle 3D (ou autre chose d'ailleurs, ça peut être un skydome, une fontaine de particules, un billboard, etc...), c'est un fait, mais elle a aussi une masse, une vitesse, etc... En gros c'est un « objet » complet, comme dans le monde réel. Quand je me casse la gueule de ma chaise, il n'y a pas mon modèle 3D d'un côté, ma physique de l'autre et un informaticien derrière qui se bagarre pour lier les deux : pourquoi cela devrait-il être différent dans un moteur de jeu ?
Mais le concept d'entité va plus loin : au delà du moteur de jeu, l'entité est donc supposée être un "objet" du monde. Pourquoi alors faudrait-il stocker ailleurs les éléments qui ne relèvent pas du moteur mais du gameplay ? La classe AGEEntity contient donc une sorte de hashtable (pour ceux qui ne connaissent pas, c'est un tableau qui lie une clé -ici une string- à une valeur) baptisée Properties. Vous voulez que votre entité ait des points de vie? Ajoutez une valeur health de type integer à ses propriétés. Pour y accéder, vous n'aurez qu'à faire MyAGEEntity.Property[health]. Une propriété peut être de n'importe quel type (même une autre entité ou une autre table de propriétés, mais là bon courage), et peut aussi être un tableau.
Maintenant, si vous voulez que votre entité reste tranquille à regarder les étoiles scintiller dans la skybox au dessus de sa tête, vous pouvez le faire. Mais si vous voulez qu'elle ait un comportement un peu plus dynamique, rien de plus simple. Tout se fait via des events et des delegates. Par exemple, l'évènement OnEachFrame est appelé 10 fois par seconde. Ecrivez une petite méthode d'intelligence artificielle, et hop, en une ligne de code (MyAGEEntity.OnEachFrame += MyAIRoutine()) vous pouvez l'assigner à toutes les entités qui doivent l'utiliser. D'autres évènements seront prévus pour tout ce qui peut se produire (clic sur l'entité, collisions, proximité, etc...)
En résumé : avant, un personnage c'était un node Irrlicht + un Geom ODE + tout un machin truc pour le son + une classe en plus qui gérait son comportement. Maintenant, c'est une entité AGE.
2- Autres fonctionnalités
En plus de cela, AGE contient (pour l'instant, ça va s'alourdir avec le temps) :
- Une classe
- Une classe
- Un nouveau type de caméra en plus de la caméra FPS et de la caméra "targeted" : la caméra "rotating". Sa rotation est passée via un
- AGE étend également les possibilités de Irrlicht en ce qui concerne les jeux 2D. Certes, Irrlicht a toujours permis de créer des jeux en 2D, mais bon, c'était pas pratique: il fallait, à chaque boucle "
3- L'espace AGE.Library
AGE contient également, dans le namespace AGE.Library, toute une batterie de classes "gadgets" qui peuvent servir pour divers types de jeux, entre autre (il y en a beaucoup) :
- La classe
- La classe
- La classe
- La classe
- La classe
4- Et maintenant ?
Et bien voilà... J'attends vos suggestions, vos conseils, vos critiques... Pensez-vous que tout ce projet est une bonne idée ou pas ? Qu'aimeriez vous y voir de plus ?
Tenez-moi informé, j'en ferai de même d'ici un mois environ, quand la version 0.1 de AGE sera mise en ligne. Je rechercherai alors des gens pour m'aider à écrire une API, tester tout ça à fond et m'aider à réaliser le plus vite possible une version totalement crossplatform (certains morceaux du code de la version actuelle, comme ceux utilisés pour le moment pour le son et le joystick sont windows only).
Voilà voilà. Merci d'avoir lu jusqu'ici !
Hors ligne
28-03-2007 14:23:05
- diOxy
- Membres

- Date d'inscription:
- Messages: 153
- IP: 41.223.30.150
- Courriel
Hé bé !!!
En voila un projet qui me plaît !
J'attend de pouvoir tester avec impatience ! ![]()
Hors ligne
28-03-2007 17:30:08
- izguit
- Administrateurs

- Date d'inscription:
- Messages: 306
- IP: 83.157.94.178
- Courriel Site web
J'ai tout lu ![]()
très très bon projet.
Ca se passe comment avec ODE? Tu charges un mesh et la géométrie entière de l'objet est prise en compte? ou c'est au choix box/sphere/... ?
Seul bémol : .NET
mais bon après c'est une question de goûts
Athlon 64 3000+ // 1Go RAM // Geforce 6600GT 128Mo
Turion 64 X2 // 1Go RAM // ATI X1250
Hors ligne
28-03-2007 18:34:31
- Jerry Kan
- Membres
- Date d'inscription:
- Messages: 265
- IP: 82.243.77.149
- Courriel
sympa le projet ![]()
si en plus yavais un wrapper C++
... (je plaisante, je plaisante, .. quoi que .. )
comment ca fonctionne au niveau du frame rate ?( c a d : ya des fonctionnalités prévues pour faire du time elapsed ? )
Hors ligne
29-03-2007 04:40:15
- DeusXL
- Membres

- Date d'inscription:
- Messages: 174
- IP: 82.66.209.23
- Courriel
Je te l'ai déjà dit en mail, je trouve ça très intéressant (d'autant plus que tu utilises Irrlicht .NET CP
)
Seul bémol : .NET hmm mais bon après c'est une question de goûts
Question d'avenir, pas question de goût
Fanatique d'Irrlicht + Fanatique de Mono + Fanatique de Linux => Créateur d'Irrlicht .NET CP bien sûr !
Version actuelle d'Irrlicht .NET CP : 0.8, Version en test : 0.9.
Hors ligne
29-03-2007 16:45:36
- Agar
- Membres

- Date d'inscription:
- Messages: 16
- IP: 86.69.84.245
- Courriel
Merci pour vos commentaires... Quelques réponses en vrac et après j'y retourne.
izguit Ecris:
Ca se passe comment avec ODE? Tu charges un mesh et la géométrie entière de l'objet est prise en compte? ou c'est au choix box/sphere/... ?
Pour le moment c'est au choix, via une "enum" passée en paramètre lors de la création de l'entité. L'implémentation de ODE est ce sur quoi je bosse actuellement, donc rien de défintif pour le moment (d'autant plus que j'apprends à me servir de ODE au fur et à mesure. Contrairement à Bass et IrrlichtNETCP avec lesquels j'ai beaucoup d'expérience, je n'avais jamais utilisé une bibliothèque physique avant).
izguit Ecris:
Seul bémol : .NETmais bon après c'est une question de goûts
Jerry Kan Ecris:
si en plus yavais un wrapper C++... (je plaisante, je plaisante, .. quoi que .. )
Vu que mon expérience C++ se limite à la réalisation de petits mods pour Quake III et Half-Life, faudra vous contenter de .NET, les gars
Jerry Kan Ecris:
comment ca fonctionne au niveau du frame rate ?( c a d : ya des fonctionnalités prévues pour faire du time elapsed ? )
Je ne suis pas sûr de comprendre ta question, alors voici plusieurs réponses, choisis celle qui te convient:
1- Si tu parles de performances, on perd 1% à 5% de FPS par rapport à du IrrlichtNETCP "pur". Mais je n'ai rien optimisé pour le moment, donc au final ça sera sans doute beaucoup moins.
2- Si tu parles de synchronisation (je penses que c'est ce que tu veux dire par "time elapsed"), il y a un timer inclus dans le moteur (donc tu peux toujours voir la différence entre la valeur actuelle du timer et la dernière valeur que tu as stockée). Sinon tu peux utiliser l'évènement "OnEachFrame", qui se produit 10 fois par seconde. J'introduirai peut-être une classe "timer" comme celle du namespace System.Windows.Forms (avec une propriété "interval" et un évènement "OnTick"), c'est à voir.
En tout cas, je suis content de voir que le projet vous intéresse. Je vais sans doute mettre mon travail sur le moteur de côté quelques jours le temps de créer une ébauche de site web ou tout sera bien présenté.
Je vous tiens au courant.
Hors ligne
29-03-2007 20:29:56
- kedu
- Modérateurs

- Date d'inscription:
- Messages: 155
- IP: 212.195.55.158
- Courriel
Génial ! C'est un excellent projet !!
Le fait de créer une "super-entité" rassemblant graphisme, physique et son... que du bonheur. Des classes bien propres dans un environnement 100% Objet... rien à redire. Si je peux t'aider dans cette entreprise, n'hésite pas...
(Je me permettrais de te contacter par e-mail si tu n'y vois pas d'inconvénient, histoire d'en discuter plus longuement)
Hors ligne
31-03-2007 08:38:28
- wizad
- Membres

- Date d'inscription:
- Messages: 106
- IP: 86.220.49.209
- Courriel
C'est effectivement des plus intérréssant. Je ne sais pas si ce serait faisable dans ta logique actuelle mais avoir une couche réseau avec pourrait être intérréssant (qui disposerait elle aussi d'un fonctionnement souple basé sur les event) parce que celle standart de c# est un peu lourde à implémenter (thread only). Eventuellement une GUI évoluée via ton système d'entity devrait aussi être faisable.
Ca permettrait de faire un belle librairie entièrement dédié au jeu.
Hors ligne
31-03-2007 20:43:47
- Agar
- Membres

- Date d'inscription:
- Messages: 16
- IP: 86.67.159.186
- Courriel
wizad Ecris:
Avoir une couche réseau avec pourrait être intérréssant (qui disposerait elle aussi d'un fonctionnement souple basé sur les event).
Oui, j'y avais déjà pensé, mais ça ne sera sans doute pas pour la première release vu que ça demandera BEAUCOUP de boulot.
Cela dit, à moyen/long terme, je crois que cela s'impose si je veux que AGE soit vraiment complet.
Hors ligne
02-04-2007 20:56:58
- Agar
- Membres

- Date d'inscription:
- Messages: 16
- IP: 86.67.159.139
- Courriel
Ca y est, le site est en ligne ici.
Il n'y a pas grand chose pour le moment, mais ça va bientôt changer, donc vous pouvez toujours le bookmarquer.
Le site est en anglais, mais une partie du forum est réservée aux discussions en français, donc les anglophobes sont les bienvenus.
Hors ligne
02-04-2007 21:21:34
- kedu
- Modérateurs

- Date d'inscription:
- Messages: 155
- IP: 212.195.55.158
- Courriel
Cool, on va pouvoir obtenir plus d'info sur ce projet fort sympathique !
Hors ligne
23-04-2007 22:46:44
- wizad
- Membres

- Date d'inscription:
- Messages: 106
- IP: 82.229.59.8
- Courriel
Pour ma part j'ai commencé une étude perso sur la fesabilité du couche supérieur à la couche socket du framework .net pour faciliter l'accés au système réseau. Pour ce qui est de l'utilisation coté dev je m'inspire de directPlay qui était assez bien conçu par sa simplicité de prise en main. Je donnerai des nouvelles à l'occasion.
Hors ligne
27-04-2007 05:55:34
- kedu
- Modérateurs

- Date d'inscription:
- Messages: 155
- IP: 212.194.247.123
- Courriel
Pitié Agar, donne nous des nouvelles :-)
Hors ligne
27-04-2007 10:15:43
- wizad
- Membres

- Date d'inscription:
- Messages: 106
- IP: 82.229.59.8
- Courriel
Mode flood ON
Agar!!!!!! reviens!!!!
Mode flood Off
Hors ligne
04-11-2008 19:50:58
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 86.202.111.32
- Courriel
Tiens ??? site plus accessible .
Dommage , la publicité était pourtant fort sympathique
...
enfin , c'est vrai que ça date un peu tout ça .Désolé pour le remontage de topic ...
Hors ligne
04-11-2008 20:07:51
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.218.186.197
- Courriel
Effectivement, j'ai fait quelques recherches sans succès, mais le blog d'Agar semble toujours ouvert, si interessé tu es, un p'tit message envoyé tu peux,
et si Agar tu passe par là, nouvelles donne nous...
Force et sagesse...
Hors ligne



