Ce tuto sera compléter au fur et à mesure.
Après avoir publier les qqs screenshots sur ce que j'avais fait sur ma PSP, plusieurs personnes sont venues me voir pour me demander comment faire si ou ca. De plus je voudrai apporter ma toute petite expérience et mes travaux pour que cela puisse aider quelqu'un pouvant rencontrer les mêmes problèmes que moi.

Quelques références:
--> http://www.lua.org/
--> http://lua-users.org/wiki/TutorialDirectory

Pour commencer

Tout d'abord il faut activer l'export de données.
Pour cela, éditez le fichier config.lua situé dans le répertoire Config/export.
Passez le booléen EnableExportScript de false à true.

Ensuite, pour améliorer le confort de codage, mieux vaut utiliser un éditeur suportant le LUA comme LuaEdit.

Maintenant, nous pouvons attaqué le fichier export.lua.


Les fonctions de gestion de l'export

LISTES
  • LuaExportStart() -- Comme son nom l'indique, cette fonction est appelée à chaque lancement de vol. Elle permet entre autre l'initialisation des moyens d'export tel que le socket ou le fichier.
  • LuaExportBeforeNextFrame() -- Cette fonction est appelée avant chaque rafraichissement de l'écran. Elle est similaire à LuaExportAfterNextFrame()
  • LuaExportAfterNextFrame() -- Cette fonction est appelée après chaque rafraichissement de l'écran. Si vous tourner à 50 fps, elle sera appelée 50 fois par seconde. Elle est dangereuse et pas très utile.
  • LuaExportActivityNextEvent(t) -- Cette fonction est appelée perodiquement. C'est vous qui déterminer la fréquence à laquelle vous l'appelée.
  • LuaExportStop() -- Elle est appelée à chaque fin de mission.
UTILISATIONS

La plus part du temps on se servira que de 3 fonctions pour gérer l'export:

LuaExportStart() -- On initalise ce qu'on a besoin pour exporter les données

Boucle
LuaExportActivtyNexEvent(t) -- Appel toutes les X secondes
Fin de boucle

LuaExportStopt() -- On termine l'export


EN DETAILS


Avant d'expliquer comment ce servir de ces 3 fonctions, quels moyens d'export avons nous ?
Deux! Soit par le réseau (socket) soit par des fichiers. L'export via une socket est de loin la meilleur méthode si vous voulez exporter des données temp réels. L'export vers un fichier ressemble plus à de l'archivage. C'est également moins pratique à utiliser.

CODE
function LuaExportStart()
-- La fonction est appelée au début de la mission. On va initialiser les moyens d'export

-- Solution 1: on export vers un fichier
--    local file = io.open("./Temp/Export.log", "w") -- On créer une instance de fichier
--    if file then --On peut considérer io comme un flux. Si l'initialisation du fichier c'est bien passer alors on donne l'instance du fichier au flux de sortie
--        io.output(file)
--    end
-- Solution2: on utilise un socket. C'est la meilleur solution pour l'utilisation en temps réels de l'export
--  dofile "lua.lua" --Utilisation d'une librairie
--  socket = require("socket")
--  host = 127.0.0.1 -- Adresse IP de l'ordinateur qui va récuprer les données
--  port = 8000 -- Le port
--  c = socket.try(socket.connect(host, port)) -- Instanciation du socket
--  c:setoption("tcp-nodelay",true) -- Ce paramètre est comme un flush auto pour envoyer immédiatement les données, sans attendre

end



CODE
function LuaExportActivityNextEvent(t)
-- Cete fonction est applée toutes les X secondes

local tNext = t

--Si on utilise un fichier, on exportera comme ca:
io.write("BLABLABLA")

--Si on utilise un socket
socket.try(c:send("BLABLABLA"))

tNext = tNext + 1.0 -- Ici on détermine la fréquence d'appel de la fonction. Dans nôtre cas toute les secondes.

return tNext
end



CODE
function LuaExportStop()
-- Fonction appelée à la fin de la mission
-- On ferme le fichier et/ou le socket


io.close() -- Pour le fichier
c:close() -- Pour le socket

end



Les indispensables

Formater une chaîne

Lorsqu'on aura récupérer toutes les données qu'on a besoin, on va foramter nôtre message final comme on le souhaite. On va utiliser la fonction string.format().

Voici un exemple d'utilisation: string.Format("%d;%s", unNombre, uneString)
Entre "" on indique le format de la donnée et après la donnée elle même. On sépare souvent avec des ; ou / ou : bref, des caractères de ponctuation.
%d --> un entier
%s --> une chaîne
%f --> un nombre flottan (a virgule, simple précision).
%.4f --> un nombre flottant avec 4 chiffres apres la virgules
Avec ca, vous avez tous ce qu'il vous faut.

Formater une chaîne

Si l'export sur le serveur est désactivé ou si rien a été renvoyé par une fonction, vous aller vous retrouver avec des variable ne vallant rien (null). Il convient de faire des test pour éviter tout problèmes.

if maVariable then
-- Je fait mon traitement
else
-- Aie aie, ma variable vaut null (ou false si c'est c'est un booléen)
end

De cette manière j'évite pas mal de blèmes.