diff --git a/Models/followmeEV.xml b/Models/followmeEV.xml index d9a1eeb..f1aad74 100644 --- a/Models/followmeEV.xml +++ b/Models/followmeEV.xml @@ -256,8 +256,8 @@ rotate steeringwheel - sim/multiplay/generic/float[14] - -100 + sim/multiplay/generic/float[18] + -1
1.50 -0.33 diff --git a/Nasal/steering.nas b/Nasal/steering.nas new file mode 100644 index 0000000..2900055 --- /dev/null +++ b/Nasal/steering.nas @@ -0,0 +1,115 @@ +#//Followme EV steering system by Sidi Liang +var Steering = { + + new: func() { + print("Steering system initialized!"); + return {parents:[Steering]}; + }, + + mode: 0, #//0: direct; 1: advanced + + debugMode: 0, + + input: 0, #//-1: left, 1:right, 0: none + command: 0, #//Steering command, range from -1 to 1 + steeringAngle: 0, #//in rad + steeringAngleDeg: 0, #//in degrees + + steeringLimit: 15.707963, #// 5 * 3.1415926 + steeringStep : func(rad){ + return 0.1 * math.pow(math.abs(rad), 0.5)+0.05; + }, + neutralStep : func(rad){ + var speed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]"); + return 0.01 * math.pow(math.abs(speed), 0.5) * math.abs(rad); + }, + + mainLoop: func(){ + if(math.abs(me.steeringAngle) < 0.1 and me.input == 0) me.steeringAngle = 0; + if(me.input == 0 and me.steeringAngle == 0){ + me.stopTimer(); + return 0; + }else if(me.input == 0 and me.steeringAngle > 0.1){ + me.steeringAngle -= me.neutralStep(me.steeringAngle); + }else if(me.input == 0 and me.steeringAngle < 0.1){ + me.steeringAngle += me.neutralStep(me.steeringAngle); + }else if(me.input == 1 and me.steeringAngle < me.steeringLimit){ + me.steeringAngle += me.steeringStep(me.steeringAngle) * me.input; + }else if(me.input == -1 and me.steeringAngle > me.steeringLimit * -1){ + me.steeringAngle += me.steeringStep(me.steeringAngle) * me.input; + } + + me.command = me.steeringAngle / me.steeringLimit; #//The steering wheel could rotate for two circles and a half + me.steeringAngleDeg = me.steeringAngle * R2D; + props.getNode("/",1).setValue("/controls/flight/rudder", me.command); + props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg); + if(me.debugMode) print("Steering system command:" ~ me.command); + if(me.debugMode) print("Steering system angle rad:" ~ me.steeringAngle); + if(me.debugMode) print("Steering system angle degrees:" ~ me.steeringAngleDeg); + }, + + inputLeft: func(){ + me.input = -1; + if(!me.mode){ + me.command = -0.5; + me.steeringAngleDeg = me.steeringLimit * me.command * R2D; + props.getNode("/",1).setValue("/controls/flight/rudder", me.command); + props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg); + }else if(me.mode and !me.timerStarted){ + me.startTimer(); + } + }, + inputRight: func(){ + me.input = 1; + if(!me.mode){ + me.command = 0.5; + me.steeringAngleDeg = me.steeringLimit * me.command * R2D; + props.getNode("/",1).setValue("/controls/flight/rudder", me.command); + props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg); + }else if(me.mode and !me.timerStarted){ + me.startTimer(); + } + }, + neutral: func(){ + me.input = 0; + if(!me.mode){ + me.command = 0; + me.steeringAngleDeg = me.steeringLimit * me.command * R2D; + props.getNode("/",1).setValue("/controls/flight/rudder", me.command); + props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg); + }else if(me.mode and !me.timerStarted){ + me.startTimer(); + } + }, + + steeringTimer: nil, + timerCreated: 0, + timerStarted: 0, + startTimer: func(){ + if(!me.timerCreated){ + me.steeringTimer = maketimer(0.01, func me.mainLoop()); + me.timerCreated = 1; + me.steeringTimer.simulatedTime = 1; + if(me.debugMode) print("Steering system timer created!"); + } + me.steeringTimer.start(); + me.timerStarted = 1; + if(me.debugMode) print("Steering system timer started!"); + }, + stopTimer: func(){ + me.steeringTimer.stop(); + me.timerStarted = 0; + if(me.debugMode) print("Steering system timer stopped!"); + }, +}; + + +var steeringAssistance = Steering.new(); +addcommand("enableAdvancedSteering", func() { + steeringAssistance.mode = 1; + print("Advanced Steering Enabled"); +}); +addcommand("disableAdvancedSteering", func() { + steeringAssistance.mode = 0; + print("Advanced Steering Disabled"); +}); diff --git a/followme-sound.xml b/followme-sound.xml index 74e49ee..6372fb9 100644 --- a/followme-sound.xml +++ b/followme-sound.xml @@ -124,6 +124,22 @@ + + + music + once + Aircraft/followme_e-tron/MusicPlayer/Music/Example/Inspiration_mono.wav + + + /controls/music_player/control + 1 + + + + /controls/music_player/volume + + + diff --git a/followme_e-tron-set.xml b/followme_e-tron-set.xml index 468ccff..74e0959 100644 --- a/followme_e-tron-set.xml +++ b/followme_e-tron-set.xml @@ -292,11 +292,11 @@ a - Steer left 50% + Steer left d - Steer right 50% + Steer right space @@ -425,6 +425,8 @@ + + @@ -539,17 +541,15 @@ a rudder-left false - - property-assign - /controls/flight/rudder - -0.5 - + + nasal + + - - property-assign - /controls/flight/rudder - 0 - + + nasal + + @@ -565,17 +565,15 @@ d rudder-right false - - property-assign - /controls/flight/rudder - 0.5 - + + nasal + + - - property-assign - /controls/flight/rudder - 0 - + + nasal + + @@ -657,7 +655,8 @@ Aircraft/followme_e-tron/Nasal/electrical.nas - Aircraft/followme_e-tron/Nasal/systems.nas + Aircraft/followme_e-tron/Nasal/systems.nas + Aircraft/followme_e-tron/Nasal/steering.nas + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Follow Me EV + Batteries and Systems + + + + + + Center of Gravity + 100 + 200 + 300 + 400 + (mm behind leading edge) + + out of permitted range! + + + Gross Weight + + Empty Weight + Battery Pack Front + Battery Pack Rear + Pilot + Copilot + Baggage + + Gross Weight + 379 kg + 836 lbs + 53 kg + 53 kg + 000 kg + 000 kg + 00 kg + 000 kg + 117 lbs + 117 lbs + 000 lbs + 000 lbs + 000 lbs + 0000 lbs + MTOW + 550 kg + 1213 lbs + Gross weight exceeds MTOW! + + + Battery + + + + 000 + 000 + + + + + + + + + + + + + + + + + + diff --git a/gui/dialogs/vehicle-dialog.xml b/gui/dialogs/vehicle-dialog.xml index 895dfe6..d57235e 100755 --- a/gui/dialogs/vehicle-dialog.xml +++ b/gui/dialogs/vehicle-dialog.xml @@ -1,17 +1,5 @@ - - vehicle-dialog @@ -110,7 +98,49 @@ + + + + + + + + hbox + + +