Javelin Studio X-Plane 12 English

Xplane Scripting House · X-Plane 12 Sort en premier

Le scripting visuel et Lua pour X-Plane

Scriptez X-Plane avec des graphes, du Lua, ou les deux.

  • Gratuit
  • Open source · MIT
  • X-Plane 12
  • Windows 10/11
Une partie d'un graphe dans l'éditeur : des événements reliés à des nœuds Create Object, Follow Spline et Show Notice
-- chaque graphe peut s'en servir comme nœud
xsh.export("distance_to_aircraft", {
    inputs = { "pos:vec3" },
    outputs = { "metres:float" },
    pure = true,
}, function(pos)
    return pos:distance(xsh.aircraft().position)
end)
Un graphe, et quelques lignes de Lua qui lui ajoutent un nœud.

Deux façons de scripter, une seule extension

À égalité : l'un, l'autre ou les deux, pour tout.

Des graphes, sans code

Scripting visuel

Par exemple

  • Véhicules sur des trajets
  • Zones où entre l'avion
  • Séquences pas à pas
  • Scènes vivantes, sans code
  • …et tout ce que vous imaginerez
L'éditeur de graphes →

Du code, aussi loin que vous voulez

Scripting Lua

Par exemple

  • Logique lourde ou mathématique
  • Vos propres datarefs et commandes
  • Fichiers, JSON, tables
  • De nouveaux nœuds pour les graphes
  • …et tout ce que vous imaginerez
Le côté Lua →

Encore mieux ensemble

Lua
  • Nouveaux nœudsxsh.export
  • Variables partagéesxsh.graph.get / set
  • Événements, dans les deux sensxsh.events.send / on
  • Erreurs Lua dans le journal de l'éditeur
Graphes
local xsh = require("xsh")

-- un nœud Call Lua : le graphe attend pendant que la voiturette suit le trajet
xsh.export("demo.tow_to", {
    inputs = { "role:string", "speed:float" },
    outputs = { "spline:string", "seconds:float" },
}, function(role, speed)
    local ref = assert(xsh.spline.find({ role = role }))
    local cart = assert(xsh.object.create("crew/golf_cart.obj"))
    local t0 = xsh.time.sim()
    local m = assert(cart:follow(ref, { speed = speed }))
    xsh.wait_until(function() return m.done end)
    return ref, xsh.time.sim() - t0
end)

-- changer une variable que le graphe partage
xsh.graph.set("tow.cmgraph", "carts", 2)

-- lancer le On Event "tow_ready" des graphes
xsh.events.send("tow_ready")
Raccourci de l'exemple graph_bridge.lua fourni avec XSH.

Scripting visuel : l'éditeur de graphes

Les événements à gauche, les actions à droite. Proche des Blueprints d'Unreal.

L'éditeur de graphes avec un graphe qui envoie un camion-citerne sur un trajet

Lancé dans le simulateur

F5 le lance, F6 le débogue en direct.

Une bibliothèque de nœuds

Tab pour ajouter, glisser pour relier.

Global, par scène ou par avion

Chaque vol, près d'un aéroport, ou dans un avion.

Ils connaissent le monde

Suit les trajets, réagit aux volumes.

Fonctions et graphes rangés

Fonctions et rangement automatique.

Traduits

Messages dans la langue du pilote.

Scripting Lua

  • LuaJIT 2.1
  • sandbox
  • VS Code
  • Événements, minuteries, attente
  • Rechargement à l'enregistrement
  • Fichier et ligne des erreurs, chien de garde
  • Isolé, sans conflit avec XLua ou FlyWithLua
  • Complétion dans VS Code
-- scripts/hello.lua: tourne à chaque vol,
-- et se recharge dès que vous l'enregistrez
local xsh = require("xsh")
local agl = xsh.dataref("sim/flightmodel/position/y_agl")

xsh.on("start", function(info)
    xsh.state.runs = (xsh.state.runs or 0) + 1
    xsh.notice("Hello from Lua (" .. xsh.state.runs .. ")", 0, 4)
end)

xsh.events.on("tow_coming", function()
    xsh.log("tow coming, " .. math.floor(agl.value) .. " m AGL")
end)
Un script global, rechargé à l'enregistrement.

Où il en est

  1. La VM
  2. L'API
  3. Graphes + Lua
  4. 4
    En coursSystèmes avion
  5. 5
    Écrans de cockpit

Télécharger

Pas encore publié

Sort en premier.

Code source

  • C++17 core
  • LuaJIT (no FFI)
  • Qt 6 editor
  • X-Plane plugin

Code source sur GitHub : bientôt