Ah ben dis donc, la dernière MAJ de ce topic date
Bon, histoire d'annoncer ça, j'ai commencé (Il y a quelques mois) une refonte générale du moteur.
Le lua a été modifié, j'ai pu ajouter les opérateurs suivant :
i+=n (incrémente i de n)
i-=n (décrémente i de n)
i*=n (multiplie i par n)
i/=n (divide i par n)
i%=n (calcule le reste de la division euclidienne i/n, renvoi le résultat sur i)
i..=n (concatène i et n, renvoi sur i)
i ^=n (calcule i puissance n, stocke le résultat dans n)
i >> n (Right-Shift i de n)
i << n (Left-Shift i de n)
i := n (copie n dans i, la différence se fait avec les classes)
Les opérateurs +=,-=,/=,*=,%=,..=,^= proviennent d'un patch que j'ai trouvé, j'ai plus la source je poste dès que je retrouve
La grosse avancée, c'est la gestion orienté objet.
Le moteur bosse plus qu'avec un état lua globale, avant j'en avais un par objet
Le système marche avec des classes, il y a la gestion des dérivés, par exemple :
- Code:
-
a = class();
function a:init()
self.x = 17;
end
b = class(a);
function b:init()
self.y = 20;
end
Ce bout de code créé deux classes, une nommé 'a', le constructeur (init) initialise la variable 'x' de l'instance à 17. La deuxième class 'b' est une classe dérivée de a, son constructeur initialise sa variable y à 20.
Donc si je fais
- Code:
-
c = b();
c est une instance de la classe 'b', et a deux variables : x=17,y=20, youpi.
Le soucis avec lua, c'est qu'on ne peut pas copier simplement de tables, ce sont des pointeurs, en gros :
- Code:
-
d = c;
d.x = 0;
En écrivant ça, je modifie la variable 'x' de c, tandis que si j'écris d := c, je copie c dans d, chaque valeurs des tables deviennent indépendantes.
Pour les positions/vitesses/tailles, il y a les vecteurs, les opérateurs sont surchargés (addition, soustraction, concaténation,etc). Aussi une petite idée piquée de l'UnrealEngine :
V = vector(10,0);
V = V << 90;
Les opérateurs << et >> permettent de faire des rotations sur ces vecteurs, donc V aura pour valeur (0,-10). Le << correspond à une rotation vers la gauche, et le >> correspond à une rotation vers la droite. (Noté ma flème d'ajouter les opérateurs '<<=' et '>>='
)
Le moteur gère aussi les aliases, ça permet d'éditer les touches en modifiant un fichier ini (UserDefined.ini):
[Input]
Clef = Touche1|Touche2|..
La 'Clef' est le nom de la variable dans le moteur, les touches correspondent à quelle touche correspond cette clef (Le moteur gère le joystick, donc on peut jouer avec une manette de play)
Par exemple :
Left = Y|Left|Joy1.13
La fonction "CheckAlias(Key.Left)" renverra vrai si la flèche gauche est appuyé, ou la touche 'Y' ou le bouton 13 du joystick n°1.
Le système d'objet marche par package, c'est un ensemble de fichier lua "bytecodés".
On créé un dossier, on y créé nos fichier lua, et on execute le Raymake, qui génère le package tout prêt pour le moteur
Pour ce qui est des éditeurs, j'ai recommencé l'éditeur de niveaux :
http://data.imagup.com/11/1154327995.jpg (j'le met en lien, l'image est assez grande)
Les morceaux afficher en haut sont les "types", c'est ce qui permet de définir les collisions sur la carte, ou des blocs spéciaux (comme des blocs rebondissant, des blocs qui tue, etc)
Ces types peuvent être modifié, leur propriété sont dans un fichier ini. On choisit leur type de collision (pas de collision ou solide, ça veut dire pas passe-bas) et des flags spéciaux, qui peuvent ensuite être retrouvé en Lua.
Le système de mapping est simple, on a une fenêtre "template", qui est une source de laquelle on copie-colle des blocs de cartes. Si un tileset n'a pas de template associé, il est afficher tel quel et on peut créé le template directement.
La liste d'objets est affiché par classe mère/fille, par exemple Rayman est une classe étendue de player, qui est étendue d'event qui est étendue d'objet.
On pourra aussi afficher par package, pour ceux qui préfère. (j'me suis tellement embêté à générer les items en fonctions de la hiérarchie que vous devrez l'utiliser !
)
L'éditeur permet de paramétrer certaines variables, le système de propriété par défaut de l'unreal engine (honte à moi, je fais rien qu'à copiter mon voisin
)
Ça permet de créer des variations d'objet (par exemple des AI qui n'auront que des couleurs qui changent) sans avoir à recréer une nouvelle classe :p
Enfin, histoire de clore le tout, le système online a été revu.
Il y a une gestion de liste des serveurs (stockés sur une base de donnée MySQL), et la gestion de la réplication. La réplication permet de prévenir les autres clients qu'une fonction a été appelée, elle sera alors appelée côté client avec les même paramètres, chouette hein ?
Sur ce, j'ai encore pas mal de boulot, faut que je finisse l'éditeur de cartes (placer les objets/gestion des paramétrages, et d'autre trucs moins important) pour m'attaquer au nouveau logiciel d'animation
A dans 90 ans !