[Développement] Tableaux (array)

Bonjour à tous,

Suite aux demandes sur l’intégration de tableaux dans GD, j’ai commencé le développement d’une petite extension qui permettera de gérer des tableaux (à une dimension pour commencer, puis à deux). :smiley:
Je la sors pas tout de suite car il y a pour le moment 1 action et 1 expression. :stuck_out_tongue:
(L’extension n’utilise que la lib standard de C++ et la STL avec std::vector et std::map).
Je fais le maximum pour que son utilisation soit simplifiée, c’est-à-dire, pas besoin de déclarer le tableau ni sa taille, tout cela est fait à la volée.

Voilà un exemple d’événement :
[attachment=0]ExempleTableaux.png[/attachment]
Les deux 1ères actions donnent des valeurs au tableau “test”. Ce qui pourrait se traduire en C++ :

double test[2]; test[0] = 12; test[1] = 15

L’action d’affichage utilise une expression de l’extension qui retourne la valeur contenue à un endroit d’un tableau :

Array::NumberAt(nomDuTableau, Index)

Enfin, la dernière action ajoute 1 à la valeur de l’index 1 du tableau “test”.

EDIT :

Array::Count(nomDuTableau)

permettera de connaître la taille du tableau, qui est en fait l’index défini le plus grand + 1 .

Super, bonne continuation et bon développement ! :slight_smile:

Intéressant, j’ai hâte de voir comment ça va évoluer. :slight_smile:

Par contre, les tableaux seront forcément dépendants de la scène en cours, et donc, il n’y aura pas de tableaux globaux.
Enfin, je pense, j’ai pas testé ça.

4ian : Est-ce que l’extension est réinitialisée à chaque lancement de scène ? Parce que j’ai un ArrayManager qui est une singleton.
Aussi, pour compiler l’extension pour Linux, comment je compile les libs ?

Non, comme l’extension est chargée une unique fois au lancement, il n’y a pas de raison que ton singleton soit remis à zéro.
Tu peux proposer une action pour remettre les tableaux à zéro.
Si ça te gène trop, tu peux aussi passer à une vision différente des choses en créant un objet “Tableau” qu’il faudra placer sur la scène ( ou créer dynamiquement avec l’action appropriée ) pour chaque tableau que l’on souhaite avoir.

Ah oui, il faut que je mette en place un SDK pour Linux.

Je crois que je vais opter pour une action, car c’est pas plus mal qu’ils soient conservés (on n’est pas à quelques Ko de RAM).

Par contre, un truc qui est embêtant avec le singleton, plus que l’action de remise à zéro, c’est que les tableaux sont communs à tous les jeux ouverts avec GD.
Autant c’est pas génant pour une extension comme l’extension Réseau, qui a une classe singleton pour gérer les données envoyées/reçues, autant pour les tableaux, on s’attend plus à ce qu’ils soient limités au jeu.

Pour émuler des tableaux qui se restreignent au jeu voir à la scène, tu peux utiliser une std::map du style :

std::map<Scene*, Tableaux> tousLesTableaux

Ce que je veux dire, c’est que avec cette map, tu peux ranger tes tableaux par scène. ( Ou par jeux si tu fait une std::map<Game*, Tableaux )
Ensuite, quand tu utilise une action qui va modifier un tableau, il te suffit de passer à ta map le pointer vers la scène

bool ActionSurUnTableau( RuntimeScene & scene, ObjectsConcerned & objectsConcerned, const Instruction & action ) { taMapGerantLesTableaux[&scene].EtLaTuPeuxAccederAuTableauxDeLasceneCommeAvant... //Genre : taMapGerantLesTableaux[&scene].clear(); //Pour effacer tous les tableaux de la scène si tu les gère avec un std::vector. }

C’est cette solution que j’ai utilisé pour les fonctions par exemple, qui se limitent aux scènes. Regarde l’extension Function si tu souhaite, mettre en place une telle solution n’est pas très compliqué.

Ah, je corrige ça de suite.

J’ai corrigé, ça marche bien sans aucuns conflits avec les autres jeux ouverts. J’ai tout de même laissé cela en global.

C’est la 1ère fois que je vois un conteneur dans un conteneur dans un conteneur. :smiley:

Ok, c’est mieux ainsi :slight_smile:

J’avais oublié un détail : les valeurs de ma singleton ne sont pas réinitialisées à chaque Aperçu dans GD.
A part demander à l’utilisateur de mettre une action au lancement de la scène, n’y a-t-il pas moyen de faire autrement ?

J’ai crée un petit exemple permettant de montrer les capacités de l’extension avec ici un tableau à une dimension numérique :
Indisponible
(Il est conseillé de ne pas utiliser la fonction insérer (touche I) sur des index qui n’existe pas encore (qui ne sont pas affichés à l’écran), ça ne marche pas.).

La première version de l’extension Tableau est disponible : http://levasseursoftware.comxa.com/index.php?file=kop7.php
Elle n’est disponible que pour Windows, car je n’ai pas de SDK pour Linux…

Merci ! :smiley:
J’essaierai quand j’aurai un peu de temps (j’avais pas vu assez tôt que tu faisais ça).

Ce n’est pas le même SDK? (le code source se compile sur les 2non? )

Oui, mais le SDK dispo en ligne ne contient pas les fichiers compilés pour linux nécessaires, seulement ceux de Windows, pour le moment.

Oui, c’est sur, en attendant que la version linux soit utilisable :slight_smile:

Une nouvelle version de l’extension tableau est disponible :
http://levasseursoftware.comxa.com/?file=kop7.php
Version 1.0b.

[size=150]Nouveautés : [/size]

  • Installation de l’extension avec un installateur
  • Actions pour copier le contenu d’un tableau vers un autre.
  • Amélioration diverses.
  • Documentation dans le dossier : Game Develop/res/Array/Help/doc.htm
  • Exemple dans le dossier Game Develop/Exemples/Array

La version 1.1 est sortie : [url][Extension][4.0.1] Extension Tableaux - #34 by victor]

Bonjour à tous !

Je poste ce message car :
j’ai téléchargé l’extension tableau 1.1 (stable)
J’utilise Game Develop 1.5.9980.50345
J’ai installé l’extension dans le dossier “extension” de GD.
mais à l’ouverture du logiciel, un message m’annonce un problème et que l’extension tableau n’a pas pu être chargée.
Victor, ou 4ian, pourriez-vous m’aider ?

merci d’avance ! :wink: