Visto Nasal, tengo que decir que me gusta y creo que valdrá para la finalidad de este proyecto.
En un fichero de texto plano llamado test.nas y guardado en la carpeta Nasal de FlightGear, he creado el siguiente código nasal para mostrar en la consola y por pantalla, las coordenadas actuales.
Modificarlo para crear un fichero temporal no cuesta nada y así, puede usarse para ir leyendo y saber dónde está el aparato en cada momento o mejor aún, modificar para que la función, simplemente retorne las coordenadas cuando el motor lo precise y él se encargará de pasar los valores a las funciones apropiadas para lanzar los eventos en los momentos oportunos.
Sea como sea, aquí va el código por partes...
Función que mostrará el mensaje en consola y pantalla:
var show_message = func(msg) {
print(msg);
var window = screen.window.new(nil, -100, 3, 10);
window.fg = [1, 1, 1, 1];
window.align = "left";
window.write(msg);
}
Simplemente lanza el mensaje pasado por argumento a la función en consola y después lo representa en pantalla usando la función window del fichero screen.nas (localizado en la misma carpeta que test.nas).
Con esto, creo un bucle que se ejecuta cada 2 segundos:
var loopid = 0;
var loop = func(id) {
id == loopid or return;
# El código va aquí
settimer(func { loop(id) }, 2);
}
var stop_all = func {
loopid += 1;
}
Se lanza el loop:
Visto esto y un post anterior en esta web, hago lo siguiente en dónde pone "# El código va aquí":
var lat = getprop("/position/latitude-deg");
var lon = getprop("/position/longitude-deg");
var info = geodinfo(lat, lon);
var alt = "0 m";
if (info != nil)
var alt = info[0] ~ " m";
show_message("Coordenadas: lat: " ~ lat ~ " lon: " ~ lon ~ " alt: " ~ alt);
Ya, yo también me he quedado raro. La concatenación de cadenas se hace con ~ y no veas lo que me ha costado encontrarlo en la documentación.
Lo pego todo junto aquí, pero también está como descarga en los adjuntos.
# Sistema de coordenadas y mostrado en pantalla y consola
var loopid = 0;
var show_message = func(msg) {
print(msg);
var window = screen.window.new(nil, -100, 3, 10);
window.fg = [1, 1, 1, 1];
window.align = "left";
window.write(msg);
}
var loop = func(id) {
id == loopid or return;
var lat = getprop("/position/latitude-deg");
var lon = getprop("/position/longitude-deg");
var info = geodinfo(lat, lon);
var alt = "0 m";
if (info != nil)
var alt = info[0] ~ " m";
show_message("Coordenadas: lat: " ~ lat ~ " lon: " ~ lon ~ " alt: " ~ alt);
settimer(func { loop(id) }, 2);
}
# Llamar en caso de parada de emergencia
var stop_all = func {
# Parar loop y todos los anteriores (pendientes de terminar)
# loopid += 1;
loopid += 1;
}
# Comenzar loop
loop(loopid);
Solo queda colocar el fichero en la carpeta Nasal del juego y lanzarlo, verás el mensaje en pantalla (y en consola también si lo lanzas desde ahí, muy recomendado).
Comentarios recientes
hace 1 año 10 semanas
hace 1 año 10 semanas
hace 1 año 29 semanas
hace 1 año 29 semanas
hace 1 año 43 semanas
hace 2 años 23 semanas
hace 2 años 23 semanas
hace 2 años 23 semanas
hace 2 años 39 semanas
hace 2 años 47 semanas