2019-07-25 20:31:30 +08:00
|
|
|
#### Follow Me ####
|
2019-09-01 10:59:45 +08:00
|
|
|
#### Gijs de Rooy (Original) ####
|
|
|
|
#### Sidi Liang ####
|
2019-07-25 20:31:30 +08:00
|
|
|
|
2020-05-01 10:44:44 +08:00
|
|
|
io.include("library.nas");
|
|
|
|
|
2020-03-08 12:03:19 +08:00
|
|
|
props.getNode("/sim/gui/dialogs/vehicle_config/dialog",1);
|
|
|
|
var configDialog = gui.Dialog.new("/sim/gui/dialogs/vehicle_config/dialog", "Aircraft/followme_e-tron/gui/dialogs/config-dialog.xml");
|
|
|
|
|
2020-02-05 10:57:00 +08:00
|
|
|
var tyreSmoke_0 = aircraft.tyresmoke.new(0, auto = 1, diff_norm = 0.4, check_vspeed = 0);
|
|
|
|
var tyreSmoke_1 = aircraft.tyresmoke.new(1, auto = 1, diff_norm = 0.4, check_vspeed = 0);
|
|
|
|
var tyreSmoke_2 = aircraft.tyresmoke.new(2, auto = 1, diff_norm = 0.4, check_vspeed = 0);
|
|
|
|
var tyreSmoke_3 = aircraft.tyresmoke.new(3, auto = 1, diff_norm = 0.4, check_vspeed = 0);
|
|
|
|
|
|
|
|
|
2019-07-25 20:31:30 +08:00
|
|
|
var frontleft_door = aircraft.door.new("/controls/doors/frontleft", 1);
|
|
|
|
var frontright_door = aircraft.door.new("/controls/doors/frontright", 1);
|
|
|
|
var rearleft_door = aircraft.door.new("/controls/doors/rearleft", 1);
|
|
|
|
var rearright_door = aircraft.door.new("/controls/doors/rearright", 1);
|
2020-01-20 17:00:18 +08:00
|
|
|
aircraft.door.toggle = func(){
|
|
|
|
var pos = me.getpos();
|
|
|
|
if(pos == 0){
|
|
|
|
me.open();
|
2020-01-28 14:31:43 +08:00
|
|
|
playAudio('door_open.wav');
|
2020-01-20 17:00:18 +08:00
|
|
|
}
|
|
|
|
if(pos == 1){
|
|
|
|
me.close();
|
2020-01-28 14:31:43 +08:00
|
|
|
playAudio('door_shut.wav');
|
2020-01-20 17:00:18 +08:00
|
|
|
}
|
|
|
|
}
|
2019-07-25 20:31:30 +08:00
|
|
|
|
|
|
|
beacon_switch = props.globals.getNode("controls/switches/warninglight", 2);
|
|
|
|
var beacon = aircraft.light.new( "/sim/model/lights/warning", [0.5, 0.5], "/controls/lighting/warning" );
|
|
|
|
beacon_switch = props.globals.getNode("controls/switches/indicator-left", 2);
|
2020-05-01 10:52:10 +08:00
|
|
|
var beacon = aircraft.light.new( "/sim/model/lights/indicator-left", [0.5, 0.5], "/controls/lighting/indicator-left");
|
2019-07-25 20:31:30 +08:00
|
|
|
beacon_switch = props.globals.getNode("controls/switches/indicator-right", 2);
|
2020-05-01 10:52:10 +08:00
|
|
|
var beacon = aircraft.light.new( "/sim/model/lights/indicator-right", [0.5, 0.5], "/controls/lighting/indicator-right");
|
2019-07-26 17:59:54 +08:00
|
|
|
|
2020-08-16 14:04:32 +08:00
|
|
|
#//Wiper
|
|
|
|
var wiperMode = 0;
|
|
|
|
var wiper = aircraft.light.new( "/controls/wiper/frontwiper", [1, 1], "/controls/wiper/frontwiper_switch");
|
|
|
|
var wiperStop = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 0);
|
|
|
|
wiperMode = 0;
|
|
|
|
}
|
|
|
|
var wiperFast = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 1);
|
|
|
|
wiperMode = 1;
|
|
|
|
wiper.del();
|
|
|
|
wiper = aircraft.light.new( "/controls/wiper/frontwiper", [1, 1], "/controls/wiper/frontwiper_switch");
|
|
|
|
}
|
|
|
|
var wiperMid = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 1);
|
|
|
|
wiperMode = 2;
|
|
|
|
wiper.del();
|
|
|
|
wiper = aircraft.light.new( "/controls/wiper/frontwiper", [2, 1], "/controls/wiper/frontwiper_switch");
|
|
|
|
}
|
|
|
|
var wiperSlow = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 1);
|
|
|
|
wiperMode = 3;
|
|
|
|
wiper.del();
|
|
|
|
wiper = aircraft.light.new( "/controls/wiper/frontwiper", [2, 1, 4], "/controls/wiper/frontwiper_switch");
|
|
|
|
}
|
|
|
|
var toggleWiper = func(){
|
|
|
|
if(wiperMode == 0){
|
|
|
|
wiperSlow();
|
|
|
|
}else if(wiperMode == 1){
|
|
|
|
wiperStop();
|
|
|
|
}else if(wiperMode == 2){
|
|
|
|
wiperFast();
|
|
|
|
}else if(wiperMode == 3){
|
|
|
|
wiperMid();
|
|
|
|
}
|
|
|
|
}
|
2021-04-25 20:43:36 +08:00
|
|
|
wiper.stateN = wiper.node.initNode("state", 0, "DOUBLE");
|
|
|
|
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 0);
|
2019-07-27 15:05:00 +08:00
|
|
|
#var Led = {
|
2020-02-05 10:57:00 +08:00
|
|
|
#
|
2019-07-27 15:05:00 +08:00
|
|
|
# new: func() { return { parents:[Led] },
|
|
|
|
# node: props.getNode("/sim/model/livery/texture",1),
|
|
|
|
# blankTexture: "Messages/blanco.png",
|
|
|
|
# currentMessage: "",
|
|
|
|
# messageHistory : [],
|
2020-02-05 10:57:00 +08:00
|
|
|
#
|
2019-07-27 15:05:00 +08:00
|
|
|
# display: func(content){
|
|
|
|
# me.node.setValue(content);
|
|
|
|
# },
|
2020-02-05 10:57:00 +08:00
|
|
|
#
|
|
|
|
#
|
2019-07-27 15:05:00 +08:00
|
|
|
#};
|
|
|
|
|
|
|
|
var Indicator = {
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
# Usage: #
|
|
|
|
# var leftIndicator = Indicator.new("left"); #
|
|
|
|
# var rightIndicator = Indicator.new("right"); #
|
|
|
|
# #
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
type: "",
|
|
|
|
new: func(type) { return { parents:[Indicator], type: type}; },
|
|
|
|
state: 0,
|
|
|
|
switchOn: func(){
|
|
|
|
props.getNode("/", 1).setValue("/controls/lighting/indicator-"~me.type, 1);
|
|
|
|
me.state = 1;
|
|
|
|
},
|
|
|
|
switchOff: func(){
|
|
|
|
props.getNode("/", 1).setValue("/controls/lighting/indicator-"~me.type, 0);
|
|
|
|
me.state = 0;
|
|
|
|
},
|
|
|
|
isOn: func(){
|
|
|
|
return me.state;
|
|
|
|
},
|
|
|
|
isOff: func(){
|
|
|
|
if(me.state){
|
|
|
|
return 0;
|
|
|
|
}else{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
var IndicatorController = {
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
#
|
|
|
|
# Usage:
|
|
|
|
# mode:
|
|
|
|
# 0:Off
|
|
|
|
# 1:Right without led
|
|
|
|
# 2:Left without led
|
|
|
|
# 3:both without led
|
|
|
|
# 4:Right with led
|
|
|
|
# 5:Left with led
|
|
|
|
# 6:both with led(WIP)
|
|
|
|
# getMode(): Get currrent mode
|
|
|
|
# setMode(mode): Set mode(0,1,2), return 0 if fail
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
new: func() { return { parents:[IndicatorController]}; },
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
leftIndicator : Indicator.new("left"),
|
|
|
|
rightIndicator : Indicator.new("right"),
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2021-04-26 22:04:12 +08:00
|
|
|
leftIndicatorSwitchNode: vehicleInformation.lighting.indicator.leftSwitch,
|
|
|
|
rightIndicatorSwitchNode: vehicleInformation.lighting.indicator.rightSwitch,
|
2020-07-31 14:04:02 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
mode:0,
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
falseLight: 0,
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
ledMessage: props.getNode("/sim/model/livery/texture",1),
|
2020-02-23 12:11:34 +08:00
|
|
|
ledMessageName: props.getNode("/sim/model/livery/name",1),
|
|
|
|
|
|
|
|
savedMessage:{
|
|
|
|
texture: "",
|
|
|
|
name: "",
|
|
|
|
},
|
2020-02-29 22:03:39 +08:00
|
|
|
|
2020-02-23 12:11:34 +08:00
|
|
|
textureRight: {
|
|
|
|
texture:"Messages/right.png",
|
|
|
|
name: "Right",
|
|
|
|
},
|
|
|
|
textureLeft: {
|
|
|
|
texture:"Messages/left.png",
|
|
|
|
name: "Left",
|
|
|
|
},
|
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
saveLedMessage: func(){
|
2020-02-23 12:11:34 +08:00
|
|
|
me.savedMessage.texture = me.ledMessage.getValue();
|
|
|
|
me.savedMessage.name = me.ledMessageName.getValue();
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
getSavedMessage: func(){
|
2020-02-23 12:11:34 +08:00
|
|
|
return me.savedMessage;
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
clearSavedMessage: func(){
|
2020-02-23 12:11:34 +08:00
|
|
|
me.savedMessage.texture = "";
|
|
|
|
me.savedMessage.name = "";
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
setLedMessage: func(content){
|
2020-06-18 22:38:29 +08:00
|
|
|
me.ledMessage.setValue(content.texture or " ");
|
|
|
|
me.ledMessageName.setValue(content.name or " ");
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
resumeLedMessage: func(){
|
2020-02-29 22:03:39 +08:00
|
|
|
if(me.getSavedMessage().name != ""){
|
2019-07-27 15:05:00 +08:00
|
|
|
me.setLedMessage(me.getSavedMessage());
|
|
|
|
me.clearSavedMessage();
|
|
|
|
}
|
|
|
|
},
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
getMode: func(){
|
|
|
|
return me.mode;
|
|
|
|
},
|
|
|
|
setMode: func(targetMode){
|
|
|
|
if(targetMode == 0){
|
|
|
|
me.resumeLedMessage();
|
|
|
|
me.rightIndicator.switchOff();
|
|
|
|
me.leftIndicator.switchOff();
|
|
|
|
me.mode = targetMode;
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
if(me.falseLight == 1){
|
|
|
|
me.setMode(3);
|
|
|
|
}
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
}else if(targetMode == 1){
|
|
|
|
me.resumeLedMessage();
|
|
|
|
me.rightIndicator.switchOn();
|
|
|
|
me.leftIndicator.switchOff();
|
|
|
|
me.mode = targetMode;
|
|
|
|
}else if(targetMode == 2){
|
|
|
|
me.resumeLedMessage();
|
|
|
|
me.rightIndicator.switchOff();
|
|
|
|
me.leftIndicator.switchOn();
|
|
|
|
me.mode = targetMode;
|
|
|
|
}else if(targetMode == 3){
|
|
|
|
me.resumeLedMessage();
|
|
|
|
me.rightIndicator.switchOn();
|
|
|
|
me.leftIndicator.switchOn();
|
|
|
|
me.mode = targetMode;
|
|
|
|
}else if(targetMode == 4){
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.resumeLedMessage();
|
|
|
|
me.saveLedMessage();
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.rightIndicator.switchOn();
|
|
|
|
me.leftIndicator.switchOff();
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.setLedMessage(me.textureRight);
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.mode = targetMode;
|
|
|
|
}else if(targetMode == 5){
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.resumeLedMessage();
|
|
|
|
me.saveLedMessage();
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.rightIndicator.switchOff();
|
|
|
|
me.leftIndicator.switchOn();
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.setLedMessage(me.textureLeft);
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
me.mode = targetMode;
|
|
|
|
}else if(targetMode == 6){
|
|
|
|
me.mode = targetMode;
|
|
|
|
}else{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
},
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
right_indicator_toggle : func(){
|
2020-01-28 14:31:43 +08:00
|
|
|
if(isInternalView()) playAudio('IndicatorEnd.wav');
|
2019-07-27 15:05:00 +08:00
|
|
|
if(me.getMode() != 4){
|
|
|
|
me.setMode(4);
|
2020-07-31 14:04:02 +08:00
|
|
|
me.rightIndicatorSwitchNode.setValue(1);
|
|
|
|
me.leftIndicatorSwitchNode.setValue(0);
|
2019-07-27 15:05:00 +08:00
|
|
|
}else if(me.getMode() == 4){
|
|
|
|
me.setMode(0);
|
2020-07-31 14:04:02 +08:00
|
|
|
me.rightIndicatorSwitchNode.setValue(0);
|
2019-07-27 15:05:00 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
left_indicator_toggle : func(){
|
2020-01-28 14:31:43 +08:00
|
|
|
if(isInternalView()) playAudio('IndicatorEnd.wav');
|
2019-07-27 15:05:00 +08:00
|
|
|
if(me.getMode() != 5){
|
|
|
|
me.setMode(5);
|
2020-07-31 14:04:02 +08:00
|
|
|
me.leftIndicatorSwitchNode.setValue(1);
|
|
|
|
me.rightIndicatorSwitchNode.setValue(0);
|
2019-07-27 15:05:00 +08:00
|
|
|
}else if(me.getMode() == 5){
|
|
|
|
me.setMode(0);
|
2020-07-31 14:04:02 +08:00
|
|
|
me.leftIndicatorSwitchNode.setValue(0);
|
2019-07-27 15:05:00 +08:00
|
|
|
}
|
|
|
|
},
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
falseLightOn : func(){
|
2020-04-04 21:02:22 +08:00
|
|
|
if(isInternalView()) playAudio("electric_handbrake.wav");
|
2019-07-27 15:05:00 +08:00
|
|
|
me.falseLight = 1;
|
2019-08-01 09:14:12 +08:00
|
|
|
if(me.mode == 1 or me.mode == 2 or me.mode == 4 or me.mode == 5){
|
|
|
|
print("falseLight mode on");
|
|
|
|
}else{
|
|
|
|
me.setMode(3);
|
|
|
|
print("falseLight turned on");
|
|
|
|
}
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
falseLightOff : func(){
|
2020-04-04 21:02:22 +08:00
|
|
|
if(isInternalView()) playAudio("electric_handbrake.wav");
|
2019-07-27 15:05:00 +08:00
|
|
|
me.falseLight = 0;
|
2019-08-01 09:14:12 +08:00
|
|
|
if(me.mode == 1 or me.mode == 2 or me.mode == 4 or me.mode == 5){
|
|
|
|
print("falseLight mode off");
|
|
|
|
}else{
|
|
|
|
me.setMode(0);
|
|
|
|
print("falseLight turned off");
|
|
|
|
}
|
2019-07-27 15:05:00 +08:00
|
|
|
},
|
|
|
|
false_light_toggle : func(){
|
|
|
|
if(me.falseLight == 0){
|
|
|
|
me.falseLightOn();
|
|
|
|
}else if(me.falseLight == 1){
|
|
|
|
me.falseLightOff();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
var indicatorController = IndicatorController.new();
|
2019-07-26 17:59:54 +08:00
|
|
|
|
2020-04-12 10:21:09 +08:00
|
|
|
var BrakeController = {
|
|
|
|
new: func() { return { parents:[BrakeController]}; },
|
|
|
|
leftBrakeNode: props.getNode("/controls/gear/brake-left",1),
|
|
|
|
rightBrakeNode: props.getNode("/controls/gear/brake-right",1),
|
|
|
|
parkingBrakeNode: props.getNode("/controls/gear/brake-parking",1),
|
|
|
|
|
2020-04-18 23:46:50 +08:00
|
|
|
applyingFeetBrake: 0,
|
2020-04-12 10:21:09 +08:00
|
|
|
handBrakeIsOn: 0,
|
|
|
|
leftBrakeValue: 0,
|
|
|
|
rightBrakeValue: 0,
|
|
|
|
|
|
|
|
applyLeftBrake: func(value){
|
2020-05-01 10:44:44 +08:00
|
|
|
#For internal use
|
2020-04-12 10:21:09 +08:00
|
|
|
me.leftBrakeNode.setValue(value);
|
|
|
|
me.leftBrakeValue = value;
|
|
|
|
},
|
|
|
|
applyRightBrake: func(value){
|
2020-05-01 10:44:44 +08:00
|
|
|
#For internal use
|
2020-04-12 10:21:09 +08:00
|
|
|
me.rightBrakeNode.setValue(value);
|
|
|
|
me.rightBrakeValue = value;
|
|
|
|
},
|
|
|
|
applyBrakes: func(value){
|
2020-05-01 10:44:44 +08:00
|
|
|
#For internal use
|
|
|
|
me.rightBrakeNode.setValue(value);
|
|
|
|
me.rightBrakeValue = value;
|
|
|
|
me.leftBrakeNode.setValue(value);
|
|
|
|
me.leftBrakeValue = value;
|
|
|
|
},
|
|
|
|
applyFeetBrakes: func(value){
|
|
|
|
#For feet brakes
|
|
|
|
if(value) applyingFeetBrake = 1;
|
|
|
|
else applyingFeetBrake = 0;
|
2020-04-12 10:21:09 +08:00
|
|
|
me.rightBrakeNode.setValue(value);
|
|
|
|
me.rightBrakeValue = value;
|
|
|
|
me.leftBrakeNode.setValue(value);
|
|
|
|
me.leftBrakeValue = value;
|
2020-05-23 15:39:38 +08:00
|
|
|
if(value == 1) safety.emergencyMode();
|
2020-04-12 10:21:09 +08:00
|
|
|
},
|
|
|
|
|
2020-08-16 14:04:32 +08:00
|
|
|
activeHandBrake: func(){
|
|
|
|
#for internal use
|
2020-08-16 22:58:03 +08:00
|
|
|
me.handBrakeIsOn = 1;
|
|
|
|
if(isInternalView()) playAudio("handbrake_on.wav");
|
2020-08-07 18:49:35 +08:00
|
|
|
settimer(func(){ #Delay for 0.5 seconds
|
2020-05-01 10:44:44 +08:00
|
|
|
me.parkingBrakeNode.setValue(1);
|
2020-08-07 18:49:35 +08:00
|
|
|
}, 0.5);
|
2020-04-12 10:21:09 +08:00
|
|
|
},
|
2020-08-16 14:04:32 +08:00
|
|
|
deactiveHandBrake: func(){
|
|
|
|
#for internal use
|
2020-08-16 22:58:03 +08:00
|
|
|
me.handBrakeIsOn = 0;
|
|
|
|
if(isInternalView()) playAudio("handbrake_off.wav");
|
2020-08-07 18:49:35 +08:00
|
|
|
settimer(func(){ #Delay for 0.5 seconds
|
2020-05-01 10:44:44 +08:00
|
|
|
me.parkingBrakeNode.setValue(0);
|
2020-08-07 18:49:35 +08:00
|
|
|
}, 0.5);
|
2020-04-12 10:21:09 +08:00
|
|
|
},
|
2020-08-16 14:04:32 +08:00
|
|
|
enableHandBrake: func(){
|
|
|
|
#enable handbrake from button
|
2020-08-16 22:58:03 +08:00
|
|
|
if(!me.handBrakeIsOn){
|
|
|
|
me.activeHandBrake();
|
|
|
|
}
|
2020-08-16 14:04:32 +08:00
|
|
|
},
|
|
|
|
disableHandBrake: func(){
|
|
|
|
#disable handbrake from button
|
2020-08-16 22:58:03 +08:00
|
|
|
if(me.handBrakeIsOn){
|
|
|
|
me.deactiveHandBrake();
|
|
|
|
}
|
2020-08-16 14:04:32 +08:00
|
|
|
},
|
2020-04-12 10:21:09 +08:00
|
|
|
toggleHandBrake: func(){
|
2020-05-01 10:44:44 +08:00
|
|
|
#Toggle handbrake from button
|
2020-04-12 10:21:09 +08:00
|
|
|
if(isInternalView()) playAudio("electric_handbrake.wav");
|
|
|
|
if(!me.handBrakeIsOn){
|
|
|
|
me.enableHandBrake();
|
|
|
|
}else{
|
|
|
|
me.disableHandBrake();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
activeEmergencyBrake: func(){
|
|
|
|
me.applyLeftBrake(1);
|
|
|
|
me.applyRightBrake(1);
|
|
|
|
me.enableHandBrake();
|
|
|
|
safety.emergencyMode();
|
|
|
|
},
|
|
|
|
keyboardBrake: func(){
|
2020-05-01 10:44:44 +08:00
|
|
|
me.applyFeetBrakes(0.8);
|
2020-04-12 10:21:09 +08:00
|
|
|
},
|
|
|
|
keyboardBrakeRelease: func(){
|
2020-05-01 10:44:44 +08:00
|
|
|
me.applyFeetBrakes(0);
|
2020-04-12 10:21:09 +08:00
|
|
|
},
|
|
|
|
releaseBrake: func(){
|
|
|
|
me.applyLeftBrake(0);
|
|
|
|
me.applyRightBrake(0);
|
2020-05-03 11:08:28 +08:00
|
|
|
},
|
2020-04-12 10:21:09 +08:00
|
|
|
releaseAllBrakes: func(){
|
|
|
|
me.applyLeftBrake(0);
|
|
|
|
me.applyRightBrake(0);
|
|
|
|
me.disableHandBrake();
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
var brakeController = BrakeController.new();
|
|
|
|
|
2020-01-28 14:31:43 +08:00
|
|
|
var toggleHandBrake = func(){
|
2020-04-12 10:21:09 +08:00
|
|
|
#//Depreciated as BrakeController has it internally now
|
2020-01-28 14:31:43 +08:00
|
|
|
if(isInternalView()) playAudio("electric_handbrake.wav");
|
2020-04-12 10:21:09 +08:00
|
|
|
if(!brakeController.handBrakeIsOn){
|
|
|
|
brakeController.enableHandBrake();
|
2020-01-28 14:31:43 +08:00
|
|
|
}else{
|
2020-04-12 10:21:09 +08:00
|
|
|
brakeController.disableHandBrake();
|
2020-01-28 14:31:43 +08:00
|
|
|
}
|
|
|
|
}
|
2019-07-26 17:59:54 +08:00
|
|
|
|
2019-07-31 14:07:05 +08:00
|
|
|
var chargeBatterySec = func(){
|
2019-09-01 10:59:45 +08:00
|
|
|
#//var battery = props.getNode("/systems/electrical/e-tron/battery-kWs");
|
|
|
|
#//var currentBattery = battery.getValue();
|
2020-01-23 00:12:38 +08:00
|
|
|
var battery = circuit_1.parallelConnection[0].units[0];
|
|
|
|
var batteryRemaining = battery.remaining;
|
|
|
|
var batteryElecForce = battery.ratedElectromotiveForce;
|
|
|
|
if(batteryRemaining >= battery.electricalCapacity){
|
2019-07-31 14:07:05 +08:00
|
|
|
screen.log.write("Battery is Successfully recharged!", 0, 0.584, 1);
|
2020-01-23 00:12:38 +08:00
|
|
|
chargeBatteryStop(batteryElecForce);
|
2019-07-31 14:07:05 +08:00
|
|
|
}
|
2019-09-01 10:59:45 +08:00
|
|
|
#//battery.setValue(currentBattery+240);
|
|
|
|
#//batteryRemaining += 240;
|
|
|
|
circuit_1.parallelConnection[0].units[0].addToBattery(240);
|
2019-07-31 14:07:05 +08:00
|
|
|
}
|
|
|
|
var chargeTimer = maketimer(1, chargeBatterySec);
|
|
|
|
var chargeBatteryStart = func(){
|
2019-09-01 10:59:45 +08:00
|
|
|
var battery = circuit_1.parallelConnection[0].units[0];
|
|
|
|
var batteryRemaining = battery.remaining;
|
|
|
|
var batteryTotal = battery.electricalCapacity;
|
|
|
|
var batteryElecForce = battery.electromotiveForce;
|
2019-07-31 14:23:50 +08:00
|
|
|
if(!props.getNode("/controls/is-recharging", 1).getValue()){
|
2019-07-31 14:22:33 +08:00
|
|
|
if(props.getNode("/",1).getValue("services/service-truck/connect") == 1 and props.getNode("/",1).getValue("/controls/engines/engine/started") == 0){
|
2019-09-01 10:59:45 +08:00
|
|
|
var deltaBattery = batteryTotal - batteryRemaining;
|
|
|
|
battery.electromotiveForce = 0;
|
2019-07-31 14:22:33 +08:00
|
|
|
var remainingTime = sprintf("%.0f", (deltaBattery / 240) / 60); #Based on 20 mins from 0 to full
|
2019-08-01 09:14:12 +08:00
|
|
|
screen.log.write("Recharging. About "~remainingTime~" mins remaining.", 0, 0.584, 1);
|
2019-07-31 14:22:33 +08:00
|
|
|
setprop("/sim/sound/voices/pilot", "Recharging. About "~remainingTime~" mins remaining.");
|
|
|
|
chargeTimer.start();
|
|
|
|
props.getNode("/controls/is-recharging", 1).setValue(1);
|
|
|
|
}else if(!props.getNode("/",1).getValue("services/service-truck/connect")){
|
|
|
|
screen.log.write("Cannot recharge. Call service truck and connect the cable first.", 0, 0.584, 1);
|
|
|
|
setprop("/sim/sound/voices/pilot", "Cannot recharge. Call service truck and connect the cable first.");
|
|
|
|
}else if(props.getNode("/",1).getValue("/controls/engines/engine/started")){
|
|
|
|
screen.log.write("Cannot recharge. Shut down the engine first.", 0, 0.584, 1);
|
|
|
|
setprop("/sim/sound/voices/pilot", "Cannot recharge. Shut down the engine first.");
|
|
|
|
}
|
2019-07-31 14:23:50 +08:00
|
|
|
}else if(props.getNode("/controls/is-recharging", 1).getValue()){
|
2019-09-01 10:59:45 +08:00
|
|
|
chargeBatteryStop(batteryElecForce);
|
2019-07-31 14:07:05 +08:00
|
|
|
}
|
|
|
|
}
|
2019-09-01 10:59:45 +08:00
|
|
|
var chargeBatteryStop = func(bef){
|
2019-07-31 14:07:05 +08:00
|
|
|
chargeTimer.stop();
|
2019-09-01 10:59:45 +08:00
|
|
|
circuit_1.parallelConnection[0].units[0].electromotiveForce = bef;
|
2019-07-31 14:22:33 +08:00
|
|
|
screen.log.write("Recharge Stopped", 0, 0.584, 1);
|
|
|
|
setprop("/sim/sound/voices/pilot", "Recharge Stopped. Have a nice ride!");
|
2019-07-31 14:07:05 +08:00
|
|
|
props.getNode("/controls/is-recharging", 1).setValue(0);
|
|
|
|
}
|
|
|
|
|
2019-08-02 11:57:33 +08:00
|
|
|
var calculateSpeed = func(){
|
2021-04-25 08:05:56 +08:00
|
|
|
var speedKmh = vehicleInformation.getSpeedKMH();
|
2019-08-02 11:57:33 +08:00
|
|
|
var calculated = 0;
|
|
|
|
var output = 0;
|
|
|
|
if(speedKmh <= 0){
|
|
|
|
calculated = speedKmh * -1;
|
|
|
|
}else if(speedKmh < 280){
|
|
|
|
calculated = speedKmh;
|
|
|
|
}else if(speedKmh >= 280){
|
|
|
|
calculated = 280;
|
|
|
|
}
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-08-02 11:57:33 +08:00
|
|
|
if(calculated <= 120){
|
|
|
|
output = calculated * 3/2;
|
|
|
|
}else if(calculated > 120){
|
|
|
|
output = calculated * 3/4;
|
|
|
|
}
|
2020-02-05 10:57:00 +08:00
|
|
|
|
2019-08-02 11:57:33 +08:00
|
|
|
props.getNode("systems/display-speed", 1).setValue(output);
|
|
|
|
}
|
|
|
|
var calculateSpeedTimer = maketimer(0.1, calculateSpeed);
|
|
|
|
|
2020-03-26 10:00:01 +08:00
|
|
|
var resetOnPosition = func(){
|
|
|
|
var latProp = props.getNode("/position/latitude-deg");
|
|
|
|
var lonProp = props.getNode("/position/longitude-deg");
|
|
|
|
var lat = latProp.getValue();
|
|
|
|
var lon = lonProp.getValue();
|
|
|
|
setprop("/fdm/jsbsim/simulation/pause", 1);
|
|
|
|
setprop("/fdm/jsbsim/simulation/reset", 1);
|
|
|
|
var groundAlt = props.getNode("/position/ground-elev-ft").getValue();
|
2020-06-07 22:29:09 +08:00
|
|
|
props.getNode("/position/altitude-ft").setValue(groundAlt+7);
|
2020-03-26 10:00:01 +08:00
|
|
|
latProp.setValue(lat);
|
|
|
|
lonProp.setValue(lon);
|
|
|
|
setprop("/fdm/jsbsim/simulation/pause", 0);
|
|
|
|
}
|
2019-08-02 11:57:33 +08:00
|
|
|
|
2020-04-07 18:11:49 +08:00
|
|
|
var brakesABS = func(){
|
|
|
|
var gearFrtLftSpeed = math.round(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit/wheel-speed-fps"));
|
|
|
|
var gearFrtRgtSpeed = math.round(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[1]/wheel-speed-fps"));
|
|
|
|
var gearBckLftSpeed = math.round(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[2]/wheel-speed-fps"));
|
|
|
|
var gearBckRgtSpeed = math.round(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[3]/wheel-speed-fps"));
|
|
|
|
if(gearFrtLftSpeed == 0 or gearBckLftSpeed == 0 or gearFrtRgtSpeed == 0 or gearBckRgtSpeed == 0){
|
|
|
|
safety.emergencyMode();
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-left", 0);
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-right", 0);
|
|
|
|
}else{
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-left", 1);
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-right", 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-10 19:49:49 +08:00
|
|
|
var parkingRadar = Radar.new(0.3, 0, 3.8, 3, 3);
|
|
|
|
|
2020-04-03 10:50:09 +08:00
|
|
|
var Safety = {
|
2020-05-23 15:39:38 +08:00
|
|
|
new: func(airbagAccelerationLimit=140, sideAirbagAccelerationLimit=75){
|
2020-04-06 00:02:11 +08:00
|
|
|
var newSafety = { parents:[Safety] };
|
|
|
|
newSafety.airbagAccelerationLimit = airbagAccelerationLimit;
|
|
|
|
newSafety.sideAirbagAccelerationLimit = sideAirbagAccelerationLimit;
|
2021-04-22 16:04:32 +08:00
|
|
|
newSafety.frontRadar = Radar.new(0.3, 0, 0, 15, 0.1, 180, 0, 0.001);#For AEB
|
2020-04-07 18:11:49 +08:00
|
|
|
newSafety.absTimer = maketimer(0.001, brakesABS);
|
2021-04-22 16:04:32 +08:00
|
|
|
newSafety.aebTimer = maketimer(0.001, func newSafety.aebUpdate());
|
2020-04-06 00:02:11 +08:00
|
|
|
return newSafety;
|
2020-04-03 10:50:09 +08:00
|
|
|
},
|
|
|
|
isOn: 0,
|
|
|
|
safetySystemTimer: nil,
|
|
|
|
updateInterval: 0.01,
|
2021-04-22 16:04:32 +08:00
|
|
|
aebEnabled: 0,
|
2020-04-06 00:02:11 +08:00
|
|
|
aebActivated: 0,
|
2020-04-07 18:11:49 +08:00
|
|
|
lastRadarOutput:10000,
|
2021-04-25 08:05:56 +08:00
|
|
|
throttleNode: vehicleInformation.engine.throttleNode,
|
2020-04-06 00:02:11 +08:00
|
|
|
#Airbag
|
2020-04-03 10:50:09 +08:00
|
|
|
accXProp: props.getNode("/fdm/jsbsim/accelerations/a-pilot-x-ft_sec2", 1),
|
|
|
|
accYProp: props.getNode("/fdm/jsbsim/accelerations/a-pilot-y-ft_sec2", 1),
|
|
|
|
frontAirbagProp: props.getNode("/systems/safety/airbag/front", 1),
|
|
|
|
sideAirbagProp: props.getNode("/systems/safety/airbag/side", 1),
|
2020-04-16 12:09:21 +08:00
|
|
|
aebStateProp: props.getNode("/systems/safety/aeb_activated", 1),
|
2020-07-31 12:00:41 +08:00
|
|
|
aebOnProp: props.getNode("/systems/safety/aeb_on", 1),
|
2020-04-04 18:33:09 +08:00
|
|
|
airbagAccelerationLimit: 140, #To be configured,m/s^2
|
2020-05-23 15:39:38 +08:00
|
|
|
sideAirbagAccelerationLimit: 75, #To be configured,m/s^2
|
2020-04-06 00:02:11 +08:00
|
|
|
|
|
|
|
#Frontwards radar
|
|
|
|
frontRadar: nil,
|
|
|
|
|
2021-04-22 16:04:32 +08:00
|
|
|
enableAEB: func(){
|
2020-04-06 00:02:11 +08:00
|
|
|
#Enables the front radar
|
2021-04-22 16:04:32 +08:00
|
|
|
me.aebTimer.start();
|
|
|
|
me.aebEnabled = 1;
|
2021-04-21 17:17:59 +08:00
|
|
|
me.frontRadar.initWithoutStarting();
|
2021-04-22 07:32:30 +08:00
|
|
|
#//me.frontRadar.stop();
|
2020-07-31 12:00:41 +08:00
|
|
|
me.aebOnProp.setValue(1);
|
2021-04-22 16:04:32 +08:00
|
|
|
print("AEB enabled");
|
2020-04-06 00:02:11 +08:00
|
|
|
},
|
2021-04-22 16:04:32 +08:00
|
|
|
disableAEB: func(){
|
2020-04-06 00:02:11 +08:00
|
|
|
#Disables the front radar
|
2021-04-22 16:04:32 +08:00
|
|
|
me.aebTimer.stop();
|
|
|
|
if(me.aebEnabled) me.frontRadar.stop();
|
|
|
|
me.aebEnabled = 0;
|
2020-07-31 12:00:41 +08:00
|
|
|
me.aebOnProp.setValue(0);
|
2021-04-22 16:04:32 +08:00
|
|
|
print("AEB disabled");
|
2020-04-06 00:02:11 +08:00
|
|
|
},
|
2021-04-22 16:04:32 +08:00
|
|
|
toggleAEB: func(){
|
|
|
|
if(!me.aebEnabled){
|
|
|
|
me.enableAEB();
|
2020-04-06 10:07:29 +08:00
|
|
|
playAudio("parking_radar_init.wav");
|
|
|
|
}
|
2021-04-22 16:04:32 +08:00
|
|
|
else me.disableAEB();
|
2020-04-06 10:07:29 +08:00
|
|
|
},
|
2020-04-06 00:02:11 +08:00
|
|
|
|
2020-08-11 01:04:30 +08:00
|
|
|
aebThreshold: 9,
|
|
|
|
aebFullThreshold: 8,
|
|
|
|
aebMode: 1, #//1: slow mode 2: fast mode
|
|
|
|
aebCount: 0,
|
|
|
|
aebSlowMode: func(){
|
|
|
|
me.frontRadar.maxRange = 10;
|
2020-08-12 00:19:34 +08:00
|
|
|
#me.frontRadar.maxWidth = 0.1;
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebThreshold = 10;
|
|
|
|
me.aebFullThreshold = 10;
|
|
|
|
me.aebMode = 1;
|
|
|
|
print("AEB Slow Mode");
|
|
|
|
},
|
|
|
|
aebFastMode: func(){
|
|
|
|
me.frontRadar.maxRange = 18;
|
2020-08-12 00:19:34 +08:00
|
|
|
#me.frontRadar.maxWidth = 0.05;
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebThreshold = 18;
|
2020-08-12 00:19:34 +08:00
|
|
|
me.aebFullThreshold = 16;
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebMode = 2;
|
|
|
|
print("AEB Fast Mode");
|
|
|
|
},
|
|
|
|
aebJudge: func(){
|
|
|
|
if(me.frontRadar.radarOutput <= me.aebThreshold and !me.aebActivated) return 1;
|
|
|
|
else return 0;
|
|
|
|
},
|
2020-04-06 00:02:11 +08:00
|
|
|
aebActive: func(){
|
|
|
|
me.aebActivated = 1;
|
|
|
|
#engine.engine_1.engineSwitch.switchDisconnect();
|
2020-08-11 01:04:30 +08:00
|
|
|
brakeController.applyBrakes(0.8);#//Pre brake
|
2020-04-06 10:07:29 +08:00
|
|
|
me.throttleNode.setValue(0);
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebWarning();
|
2020-04-16 12:09:21 +08:00
|
|
|
me.aebStateProp.setValue(1);
|
2020-04-06 00:02:11 +08:00
|
|
|
print("AEB Activated!");
|
|
|
|
},
|
|
|
|
aebStop: func(){
|
|
|
|
me.aebActivated = 0;
|
|
|
|
print("AEB Stopped");
|
2020-04-16 12:09:21 +08:00
|
|
|
me.aebStateProp.setValue(0);
|
2020-04-06 00:02:11 +08:00
|
|
|
#engine.engine_1.engineSwitch.switchConnect();
|
2020-04-12 10:21:09 +08:00
|
|
|
brakeController.releaseAllBrakes();
|
2020-04-06 00:02:11 +08:00
|
|
|
},
|
2020-08-11 01:04:30 +08:00
|
|
|
aebWarning: func(){
|
|
|
|
playAudio("parking_radar_high.wav");
|
|
|
|
playAudio("parking_radar_high.wav");
|
|
|
|
playAudio("parking_radar_high.wav");
|
|
|
|
},
|
|
|
|
aebFullBrake: func(){
|
|
|
|
brakeController.activeEmergencyBrake();
|
|
|
|
#playAudio("parking_radar_high.wav");
|
|
|
|
print("AEB Full Brake Activated!");
|
|
|
|
},
|
2020-04-06 00:02:11 +08:00
|
|
|
|
2021-04-22 16:04:32 +08:00
|
|
|
aebUpdate: func(){
|
2021-04-22 16:06:42 +08:00
|
|
|
#//AEB Loop
|
2021-04-25 08:05:56 +08:00
|
|
|
|
|
|
|
var currentSpeed = vehicleInformation.getSpeedKMH();#In km/h
|
2020-04-07 18:11:49 +08:00
|
|
|
var radarOutput = me.frontRadar.radarOutput;
|
2020-08-11 01:04:30 +08:00
|
|
|
#print("radar output: " ~ radarOutput);
|
|
|
|
#print("last radar output: " ~ me.lastRadarOutput);
|
|
|
|
if(me.lastRadarOutput <= radarOutput) me.aebCount += 1;
|
|
|
|
else me.aebCount = 0;
|
|
|
|
if(radarOutput != 10000) me.lastRadarOutput = radarOutput;
|
2020-08-12 00:19:34 +08:00
|
|
|
#var deltaX = me.lastRadarOutput - radarOutput;
|
2020-08-11 01:04:30 +08:00
|
|
|
#var reletiveSpeed = 3.6 * (deltaX / me.updateInterval);#In km/h
|
|
|
|
#if(reletiveSpeed) print(reletiveSpeed);
|
2020-04-06 10:07:29 +08:00
|
|
|
if(currentSpeed > 30 and engine.engine_1.getDirection() == 1){
|
2020-08-11 01:04:30 +08:00
|
|
|
#Enable AEB when speed is greater then 30kmh and in D gear
|
2021-04-22 16:04:32 +08:00
|
|
|
if(me.aebEnabled){
|
2021-04-21 17:17:59 +08:00
|
|
|
if(!me.frontRadar.isRunning) me.frontRadar.start();
|
2020-08-11 01:04:30 +08:00
|
|
|
if(currentSpeed >= 48 and me.aebMode == 1) me.aebFastMode();
|
|
|
|
else if(currentSpeed < 48 and me.aebMode == 2) me.aebSlowMode();#//Adjust mode dynamically according to speed
|
|
|
|
|
|
|
|
if(me.aebJudge()){
|
2020-04-06 00:02:11 +08:00
|
|
|
me.aebActive();
|
2020-08-11 01:04:30 +08:00
|
|
|
if(me.frontRadar.radarOutput <= me.aebFullThreshold){ #//Phase two of braking
|
|
|
|
me.aebFullBrake();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(me.aebActivated){
|
|
|
|
#if(currentSpeed <= 0 or me.aebCount >= 10) me.aebStop();
|
|
|
|
if(currentSpeed <= 0){
|
|
|
|
me.aebStop();
|
|
|
|
#print("1");
|
2020-08-12 00:19:34 +08:00
|
|
|
}else if(me.aebCount >= 20){
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebStop();
|
|
|
|
#print("2");
|
|
|
|
}
|
2020-04-06 00:02:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
2020-08-11 01:04:30 +08:00
|
|
|
if(me.aebActivated){
|
|
|
|
if(currentSpeed <= 0){
|
|
|
|
me.aebStop();
|
|
|
|
#print("11");
|
2020-08-12 00:19:34 +08:00
|
|
|
}else if(me.aebCount >= 20){
|
2020-08-11 01:04:30 +08:00
|
|
|
me.aebStop();
|
|
|
|
#print("22");
|
|
|
|
}
|
|
|
|
}
|
2021-04-22 16:04:32 +08:00
|
|
|
if(me.aebEnabled and me.frontRadar.isRunning) me.frontRadar.stop();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
update: func(){
|
|
|
|
#Front airbag
|
|
|
|
if(math.abs(me.accXProp.getValue() * FT2M) > me.airbagAccelerationLimit){
|
|
|
|
#active Front
|
|
|
|
me.frontAirbagProp.setValue(1);
|
|
|
|
me.emergencyMode();
|
2020-04-06 00:02:11 +08:00
|
|
|
}
|
2021-04-22 16:04:32 +08:00
|
|
|
#side airbag
|
|
|
|
if(math.abs(me.accYProp.getValue() * FT2M) > me.sideAirbagAccelerationLimit){
|
|
|
|
#active side
|
|
|
|
me.sideAirbagProp.setValue(1);
|
|
|
|
me.emergencyMode();
|
|
|
|
}
|
|
|
|
#AEB, Automatic Emergency Brake
|
2021-04-22 16:06:42 +08:00
|
|
|
#Moved out of the main loop
|
2020-04-06 00:02:11 +08:00
|
|
|
|
2020-04-07 18:11:49 +08:00
|
|
|
#ABS
|
|
|
|
#var brakeCmd = props.getNode("/",1).getValue("/controls/gear/brake-left");
|
|
|
|
#if(brakeCmd and currentSpeed){
|
|
|
|
# me.absTimer.start();
|
|
|
|
#}else{
|
|
|
|
# me.absTimer.stop();
|
|
|
|
#}
|
2020-04-06 00:02:11 +08:00
|
|
|
|
2020-04-03 10:50:09 +08:00
|
|
|
},
|
2020-04-04 18:40:13 +08:00
|
|
|
|
|
|
|
emergencyMode: func(){
|
2020-04-06 00:02:11 +08:00
|
|
|
indicatorController.setMode(3); #Active malfunction light
|
|
|
|
indicatorController.falseLight = 1;
|
2020-04-04 18:40:13 +08:00
|
|
|
if(autospeed.autoSpeedTimer.isRunning) autospeed.stopAutoSpeed();
|
|
|
|
if(autopilot.road_check_timer.isRunning) autopilot.road_check_timer.stop();
|
|
|
|
},
|
|
|
|
|
2020-04-03 10:50:09 +08:00
|
|
|
reset: func(){
|
2020-04-06 10:07:29 +08:00
|
|
|
#resetting stops the safety system
|
2020-04-04 15:07:39 +08:00
|
|
|
me.safetySystemTimer.stop();
|
2021-04-22 16:04:32 +08:00
|
|
|
if(me.aebEnabled) me.disableAEB();;#//disable AEB
|
2020-04-03 10:50:09 +08:00
|
|
|
me.frontAirbagProp.setValue(0);
|
2020-04-04 15:07:39 +08:00
|
|
|
me.sideAirbagProp.setValue(0);
|
2020-04-16 12:09:21 +08:00
|
|
|
me.aebStateProp.setValue(0);
|
2020-04-03 10:50:09 +08:00
|
|
|
},
|
|
|
|
init: func(){
|
2020-04-04 15:07:39 +08:00
|
|
|
#initialize or reinitialize
|
2020-04-03 10:50:09 +08:00
|
|
|
me.frontAirbagProp.setValue(0);
|
|
|
|
me.sideAirbagProp.setValue(0);
|
2020-04-16 12:09:21 +08:00
|
|
|
me.aebStateProp.setValue(0);
|
2020-04-03 10:50:09 +08:00
|
|
|
if(me.safetySystemTimer == nil) me.safetySystemTimer = maketimer(me.updateInterval, func me.update());
|
|
|
|
me.safetySystemTimer.start();
|
2021-04-22 16:04:32 +08:00
|
|
|
#if(me.aebEnabled) me.enableAEB();
|
2020-04-03 10:50:09 +08:00
|
|
|
me.isOn = 1;
|
|
|
|
print("Safety system initialized");
|
|
|
|
},
|
|
|
|
stop: func(){
|
|
|
|
me.isOn = 0;
|
2020-04-16 12:09:21 +08:00
|
|
|
me.aebStateProp.setValue(0);
|
2021-04-22 16:04:32 +08:00
|
|
|
me.disableAEB();
|
2020-04-03 10:50:09 +08:00
|
|
|
me.safetySystemTimer.stop();
|
|
|
|
print("Safety system stoped");
|
|
|
|
},
|
|
|
|
toggle: func(){
|
|
|
|
if(!me.isOn) me.init();
|
|
|
|
else me.stop();
|
|
|
|
},
|
|
|
|
};
|
2020-05-23 15:39:38 +08:00
|
|
|
var safety = Safety.new(140, 75);
|
2019-07-26 17:59:54 +08:00
|
|
|
|
2020-03-08 12:03:19 +08:00
|
|
|
var brakeWithABS = func(){ #//Doesn't seems to work because it seems that jsbsim wheels never overbrake?
|
2020-04-07 18:11:49 +08:00
|
|
|
#//abondoned since the new safety system
|
|
|
|
var brakeCmd = props.getNode("/",1).getValue("/controls/gear/brake-left");
|
2019-07-26 17:59:54 +08:00
|
|
|
if(brakeCmd){
|
|
|
|
absTimer.start();
|
|
|
|
}else{
|
|
|
|
absTimer.stop();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-06 21:36:48 +08:00
|
|
|
#//Service Staion
|
2020-11-25 13:18:59 +08:00
|
|
|
io.include("service.nas");
|
2020-08-10 19:38:45 +08:00
|
|
|
#var stationPath = getprop("sim/aircraft-dir")~'/Models/Service-Station/Service-Staion.ac';
|
|
|
|
#var stationCoord = geo.aircraft_position();
|
|
|
|
#var stationCourse = getprop("/orientation/heading-deg");
|
|
|
|
#stationCoord.apply_course_distance(stationCourse, 100); # Model to be added 100 m ahead
|
2020-08-07 18:49:35 +08:00
|
|
|
#//var model = geo.put_model(stationPath, stationCoord, stationCourse); # Place the default glider
|
2020-08-06 21:36:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
#//Testing
|
2020-04-07 18:11:49 +08:00
|
|
|
var testingProgram_1_Entry = func(){
|
|
|
|
autospeed.startAutoSpeed();
|
|
|
|
autospeed.targetSpeedChange(100);
|
|
|
|
settimer(testingProgram_1, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
var testingProgram_1 = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-left", 1);
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-right", 1);
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-parking", 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
var testingProgram_2_Entry = func(){
|
|
|
|
autospeed.startAutoSpeed();
|
|
|
|
autospeed.targetSpeedChange(100);
|
|
|
|
settimer(testingProgram_2, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
var testingProgram_2 = func(){
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-left", 1);
|
|
|
|
props.getNode("/",1).setValue("/controls/gear/brake-right", 1);
|
|
|
|
#props.getNode("/",1).setValue("/controls/gear/brake-parking", 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
#setlistener("/controls/gear/brake-left", brakeWithABS);
|