Jump to content

Archived

This topic is now archived and is closed to further replies.

OE3GSU

Dataref gesucht

Recommended Posts

Hallo Freunde!

Ich suche eine DataRef, die mir anzeigt, ob ein XP-Menu geöffnet ist.

Damit könnte ich die LOD-Berechnung aussetzen, während das Menu offen ist.

Leider finde ich keine passende. Hat wer einen Tip für mich?

gerhard

Share this post


Link to post
Share on other sites

Wenn ein Menü angezeigt wird ist die Ausführung von Plugins unterbrochen. Selbst wenn es ein solches DataRef gäbe, du könntest es nicht sehen bzw. es würde immer "kein Menü" anzeigen.

Share this post


Link to post
Share on other sites

Hallo Carsten!

Ich danke für die Bestätigung meiner Befürchtung. na da muss ich halt damit leben, dass das LOD-Script "in den Keller" fährt, wenn ich im Flug ein Menu öffne.

vlG Gerhard

Share this post


Link to post
Share on other sites

Warum sollte ein Skript in den Keller fahren? Man kann doch die Zeit, die seit dem letzten Aufruf (Frame) vergangen ist in einem DataRef ablesen. Wenn die länger als eine Sekunde ist würde ich einfach die Ausführung des Skripts für diesen Durchgang (Frame) aussetzen. Im Grunde ganz einfach.

Um das LOD Skript zu beruhigen könnte man auch eine Tabelle aus den letzten fünf Werten für sim/operation/misc/frame_rate_period bilden und den Median bestimmen (nicht Mittelwert!). Möchtest du ein Codebeispiel? Ich habe gerade nicht die Zeit es zu testen, denn morgen referiere ich auf der Flugsimulatorkonferenz in Paderborn und muss noch packen. :)

Es könnte vermutlich auf sowas hinauslaufen (ungetestet):

dataref("FRP", "sim/operation/misc/frame_rate_period")

--Tabelle fuer Framezeiten
local FRAMETABLE = {0.05, 0.05, 0.05, 0.05, 0.05}
local ACTUAL_FRAME = 1


-- Die globale Variable zur Nutzung innerhalb do_every_frame()
FRAMERATE = 20

-- Berechnung der Framerate
function calculate_framerate()
   ACTUAL_FRAME = ACTUAL_FRAME + 1
   if ACTUAL_FRAME > 5 then ACTUAL_FRAME = 1 end
   FRAMETABLE[ACTUAL_FRAME] = FRP
   local frametime_sorted = {}
   for k,v in pairs(FRAMETABLE) do
      table.insert( frametime_sorted, v )
   end
   table.sort(frametime_sorted)
   FRAMERATE = 1 / frametime_sorted[3]
end

-- das muss zuerst angemeldet werden!
do_every_frame("calculate_framerate()")

-- dann kann das "normale" Skript folgen
function hier_legt_die_Henne_das_Ei()
   -- der individuelle Code, der
   -- die als Median berechnete Framerate
   -- verwendet.
end

-- danach kann man seinen eigentlichen Code anmelden
do_every_frame("hier_legt_die_Henne_das_Ei()")

Jetzt müsste es der Nutzer schaffen innerhalb von fünf aufeinander folgenden Frames mehr als zweimal ein Menü aufzurufen. Das halte ich für so unwahrscheinlich, dass der Beispielcode vermutlich funktionieren wird.

Bitte berichte ob meine Idee dein Problem lösen kann.

LG Carsten

Share this post


Link to post
Share on other sites

×
×
  • Create New...