Library globals

Source windsock.nas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
###############################################################################
##
## Windsock turbulence animation
##
###############################################################################

# SPDX-License-Identifier: GPL-2.0-or-later
#
# NOTE! This copyright does *not* cover user models that use these Nasal
# services by normal function calls - this is merely considered normal use
# of the code, and does *not* fall under the heading of "derived work."
#
# Copyright (C) 2017-2020 by Erik Hofman

var dt = 0.0;
var windsock = func {
  var wind = getprop("/environment/wind-speed-kt") or 0;
  var mag1 = getprop("/environment/turbulence/magnitude-norm") or 0;
  var mag2 = getprop("/environment/turbulence/raw-magnitude-norm") or 0;
  var sens = getprop("/environment/turbulence/sensitivity") or 1.0;
  var rateHz = getprop("/environment/turbulence/rate-hz") or 0;
  var rate = 3.1514 * rateHz;
  var tot1 = math.sin(dt*rate)*mag1*mag1;
  var tot2 = math.sin(3.33*dt*rate/sens)*sens*mag2*mag2;
  tot2 = mag2*tot2 + (1-mag2)*math.tan(dt/10)/5;
  var total = wind + tot2 + tot1*tot2;

  interpolate("/environment/windsock/wind-speed-kt", total, 0.3);

  total += 5*mag2;
  interpolate("/environment/windsock/wind-speed-12.5kt", total, 0.1);

  dt += 0.08 + 0.02*(math.sin(dt)+math.cos(dt/(mag2+0.01))*0.33);
}
windsockTimer = maketimer(0.25, windsock);
windsockTimer.simulatedTime = 1;
windsockTimer.start();