From 16818db739441eb8a69df9dda4b0dfb17c3ca06e Mon Sep 17 00:00:00 2001 From: vmmeazza <vmmeazza> Date: Sun, 5 Oct 2008 22:41:39 +0000 Subject: [PATCH] Add generic tyre smoke --- Nasal/aircraft.nas | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/Nasal/aircraft.nas b/Nasal/aircraft.nas index 1280e9bd5..6bf79d6f1 100644 --- a/Nasal/aircraft.nas +++ b/Nasal/aircraft.nas @@ -988,4 +988,81 @@ _setlistener("/sim/signals/nasal-dir-initialized", func { } }); +# tyre smoke +# ============================================================================= +# Provides a property which can be used to contol particles used to simulate tyre +# smoke on landing. Weight on wheels, vertical speed, ground speed, ground friction factor +# are taken into account. Tyre slip is simulated be low pass filters. +# +# Modifications to the model file are required. +# +# Generic XML particle files are available, but are not mandatory +# (see Hawker Seahawk for an example). +# +# SYNOPSIS: +# aircraft.tyresmoke.new(<gear index>) +# <gear index> - the index of the gear to which the tyre smoke is attached +# aircraft.tyresmoke.update() +# +# EXAMPLE: +# var tyresmoke_0 = aircraft.tyresmoke.new(0); +# tyresmoke_0.update(); +# + +var tyresmoke = { + new : func (number, + ){ + var obj = {parents : [tyresmoke] }; + m.name = "tyre-smoke " ~ number; + m.wow = props.globals.getNode("gear/gear[" ~ number ~"]/wow", 1); + m.tyresmoke = props.globals.getNode("gear/gear[" ~ number ~"]/tyre-smoke", 1); + m.tyresmoke.setBoolValue(0); + m.vertical_speed = props.globals.getNode("velocities/vertical-speed-fps", 1); + m.speed = props.globals.getNode("velocities/groundspeed-kt", 1); + m.friction_factor = props.globals.getNode("gear/gear[" ~ number ~"]/ground-friction-factor", 1); + m.friction_factor.setValue(1); + m.rollspeed = props.globals.getNode("gear/gear[" ~ number ~"]/rollspeed-ms", 1); + m.rollspeed.setValue(0); + m.lp = lowpass.new(2); +# print ("initialising ", obj.name," ", obj.tyresmoke.getValue()); + return obj; + }, + + update: func { # set the smoke value according to the conditions + + var vert_speed = me.vertical_speed.getValue(); + var groundspeed = me.speed.getValue(); + var friction_factor = me.friction_factor.getValue(); + var wow = me.wow.getValue(); + var rollspeed = me.rollspeed.getValue(); + var filtered_rollspeed = me.lp.filter(me.rollspeed.getValue()); + + var diff_norm = 0; + +# print (me.name, " rollspeed ", rollspeed, " filtered_rollspeed ",filtered_rollspeed); + + var diff = math.abs(rollspeed - filtered_rollspeed); + + if (diff > 0) + diff_norm = diff/rollspeed; + else + diff_norm = 0; + + if (wow == nil or diff_norm == nil or rollspeed == nil) + return; + + if (wow and vert_speed < -0.05 and diff_norm > 0.05 + and friction_factor > 0.7 and groundspeed > 50){ + me.tyresmoke.setValue(1); + } + else{ + me.tyresmoke.setValue(0); + } + +# print("updating ", me.name, " diff ", diff, +# " diff_norm ", diff_norm, " ", me.tyresmoke.getValue()); + + }, # end function + +}; #