Listes
Framework NonIA

Page principale NonIA

Développement

Jalons de développement
Suggestion de changements de l'API

Programmation de l'IA

Documentation API
Introduction
Fichier info.nut
Fichier main.nut
Principes de base
Détermination de chemin routier
Détermination de chemin ferroviaire
Sauver / Charger des données
Choses à savoir
Squirrel
Page principale
Erreurs courantes
Listes
Traiter les erreurs OTTD
Tramways
Bibliothèques de l'IA
Forum
FAQ du forum
Comportement de l'IA

IAs

TestAI
WrightAI
Convoy
Voir le forum
Voir BaNaNaS
Tous les articles de la catégorie NonIA

Les listes sont un élément de base de l'API NonIA. Elles permettent une manipulation rapide et facile de toutes sortes de données. Cette page expliquera de façon simple comment les utiliser et ce que vous pouvez en attendre.

Contents

Clés / Valeurs

Une AIList est un ensemble de couples clé-valeur. La clé est en général la donnée que vous voulez stocker dans la liste; par exemple, les identifiants de ville. La valeur est une information qui est relative à cette clé. Par exemple, vous pouvez avoir la population de la ville comme valeur.

Évaluateurs

Pour filtrer, vous pouvez appliquer des évaluateurs sur la liste en utilisant <list>.Valuate(<valuator>); ils modifient la valeur de l'entrée de la liste en conséquence. Le premier paramètre de cette fonction est la fonction que vous voulez utiliser pour évaluer les clés de la liste. Elle doit accepter au moins un entier qui sera mis à la valeur de la clé, et renverra un entier qui deviendra la valeur de la clé. Des paramètres additionnels sont possibles; vous devrez alors les ajouter aussi à l'évaluateur. Exemple:

list.Valuate(AIBridge.GetPrice, 5);
list.Valuate(AIBridge.GetMaxLength);
function MyVal(bridge_id, myparam)
{
   return myparam * bridge_id; // C'est stupide
}
list.Valuate(MyVal, 12);

Après avoir appliqué un évaluateur, vous pouvez modifier (supprimer des clés, trier, etc.) la liste en utilisant les fonctions trouvées dans les docs de l'API.

Exemples de listes

AIList()

Pour commencer, AIList() est la liste la plus basique dont nous disposons. Elle ne dépend en aucune manière du cœur de OpenTTD. C'est une liste simple que vous pouvez remplir avec des clés et faire des évaluateurs pour elles. Comme AITownList() est un bon exemple d'une AIList() un peu plus complexe, nous allons discuter de celle-ci plutôt que de AIList().

AITownList()

Bien entendu, vous voudrez savoir quelles villes sont sur la carte, et plus vraisemblablement, quelles villes ont quelle population, et à quel endroit elles se situent. Pour cela, nous avons AITownList(). Si vous créez une instance de celle-ci, elle se remplira immédiatement avec toutes les villes. Vous pouvez les parcourir ainsi:

foreach (town, value in townlist) { }

Cela bouclera sur toutes les villes dans la liste. Bien entendu, connaître les villes n'est qu'une partie de AITownList(); vous pouvez aussi lui faire trouver des données pour vous. Par exemple, nous voulons connaître toutes les villes avec une population supérieure à 500. Tout d'abord, nous appelons un évaluateur qui récupère la population par ville pour nous, puis nous filtrons toutes les villes avec une population inférieure à 500 hors de la liste. Une fois ceci fait, nous avons une liste des villes qui contiennent plus de 500 personnes.

townlist.Valuate(AITown.GetPopulation);
townlist.KeepAboveValue(500);

Si vous voulez maintenant afficher la liste, vous ne verrez que les villes avec une population supérieure à 500. Bien sûr, vous pouvez obtenir la position de ces villes par:

townlist.Valuate(AITown.GetLocation);

La seule chose que cela veut dire est que la population par ville est perdue, et est remplacée par son emplacement.

Les AIList()s sont triées automatiquement. Normalement, cela est fait par valeur décroissante (la plus grande d'abord, donc). Vous pouvez modifier l'ordre de tri avec les fonctions Sort() (voir la documentation de l'API). Vous pouvez voir si une liste est vide avec Empty(), ou trouver le nombre de villes avec Count(). Pour plus de détails, voyez la documentation de l'API.

AITileList()

Outre la liste des villes, la liste des industries, et listes semblables, nous avons aussi une AITileList(). C'est en fait la même chose que AITownList(), mais elle garde trace des cases. Vous pouvez ajouter des cases à la liste puis, par exemple, voir leur acceptation pour une certaine cargaison; ou filtrer les cases non constructibles. Cela veut dire que vous pouvez rapidement trouver un bon emplacement pour une gare pour laquelle vous saurez pouvoir obtenir une bonne quantité de marchandises. Assurez-vous également qu'elle est connectée aux routes de la ville, par exemple, avec l'évaluateur AIRoad.GetNeighbourRoadCount().