Nasal: tidy up nodes and properties

This commit is contained in:
Sidi Liang 2021-04-25 08:05:56 +08:00
parent 8e0f7c89aa
commit af83cb6175
3 changed files with 102 additions and 54 deletions

View File

@ -14,7 +14,21 @@ var Engine = {
#//For this vehicle: maxPower: 375kW
new: func(mTorque, mPower, rpmAtMPower) {
return { parents:[Engine, followme.Appliance.new()], maxTorque: mTorque, ratedPower:mPower, rpmAtMaxPower:rpmAtMPower };
var m = {parents:[Engine], followme.Appliance.new()};
m.engineNode = followme.vehicleInformation.engine;
m.engineNode.throttleNode = props.getNode("/controls/engines/engine/throttle",1);
m.engineNode.rpmNode = props.getNode("/controls/engines/engine/rpma",1);
m.engineNode.isStarted = props.getNode("/controls/engines/engine/started",1);
m.engineNode.direction = props.getNode("/controls/direction", 1);
m.engineNode.mode = props.getNode("/controls/mode", 1);
followme.vehicleInformation.lighting.reverseIndicator = props.getNode("/controls/lighting/reverse_indicator", 1);;
m.reverseIndicatorNode = followme.vehicleInformation.lighting.reverseIndicator
m.maxTorque = mTorque;
m.ratedPower = mPower;
m.rpmAtMaxPower = rpmAtMPower;
return m;
},
motorResistance: 0.2,#//No datasource, based on guess
@ -35,8 +49,8 @@ var Engine = {
toggleDirection: func(){
#//Toggle Direction, forward:1; barkward: -1
me.direction *= -1;
props.getNode("/",1).setValue("/controls/direction", me.direction);
props.getNode("/",1).setValue("/controls/lighting/reverse_indicator", (me.direction < 0));
me.engineNode.direction.setValue(me.direction);
me.reverseIndicatorNode.setValue((me.direction < 0));
if(followme.isInternalView()) followme.playAudio("change_gear.wav");
},
getDirection: func(){
@ -138,21 +152,21 @@ var Engine = {
me.rpm = rpm;
props.getNode("/",1).setValue("/controls/engines/engine/rpma",rpm);
me.engineNode.rpmNode.setValue(rpm);
me.angularSpeed = angularSpeed;
return rpm;
},
update_engine: func(){
var throttle = props.getNode("/",1).getValue("/controls/engines/engine/throttle");
var throttle = me.engineNode.throttleNode.getValue();
var direction = me.getDirection();
var mode = props.getNode("/",1).getValue("/controls/mode");
var mode = me.engineNode.mode.getValue();
me.mode = mode;
if(!me.voltage){
me.rpm = 0;
props.getNode("/",1).setValue("/controls/engines/engine/rpma", 0);
me.engineNode.rpmNode.setValue(0);
outputForce(0);
return 0;
}
@ -216,7 +230,7 @@ var Engine = {
if(me.engineTimer == nil) me.engineTimer = maketimer(0.1, func me.update_engine());
me.engineSwitch.switchConnect();
me.runningState = 1;
props.getNode("/",1).setValue("/controls/engines/engine/started",1);
engineNode.isStarted.setValue(1);
me.engineTimer.simulatedTime = 1;
me.rpm = 100 * me.getDirection();
followme.playAudio("starter.wav");
@ -233,7 +247,7 @@ var Engine = {
me.activePower_kW = 0;
me.runningState = 0;
me.engineSwitch.switchDisconnect();
props.getNode("/",1).setValue("/controls/engines/engine/started",0);
engineNode.isStarted.setValue(0);
},
printDebugInfo: func(){

75
Nasal/node_setup.nas Normal file
View File

@ -0,0 +1,75 @@
var VehicleInformationManager = {
new: func(){
var m = {parents:[VehicleInformationManager]};
m._speedKTSNode = props.getNode("/sim/multiplay/generic/float[15]", 1);
m._headingNode = props.getNode("/orientation/heading-deg",1);
m._altitudeFTNode = props.getNode("/position/altitude-ft",1);
return m;
},
getSpeedKMH: func(){
return me._speedKTSNode.getValue()*1.852;
},
getSpeedKTS: func(){
return me._speedKTSNode.getValue();
},
getHeadingDEG: func(){
return me._headingNode.getValue();
},
getAltitudeFT: func(){
return me._altitudeFTNode.getValue();
},
engine:{},
};
var vehicleInformation = VehicleInformationManager.new();
#//For Engine
vehicleInformation.engine.throttleNode = props.getNode("/controls/engines/engine/throttle",1);
vehicleInformation.engine.rpmNode = props.getNode("/controls/engines/engine/rpma",1);
vehicleInformation.engine.isStarted = props.getNode("/controls/engines/engine/started",1);
vehicleInformation.engine.direction = props.getNode("/controls/direction", 1);
vehicleInformation.engine.mode = props.getNode("/controls/mode", 1);
#//Lignting
vehicleInformation.lighting = props.getNode("/controls/lighting", 1);;
vehicleInformation.lighting.reverseIndicator = followme.vehicleInformation.lighting.getNode("reverse_indicator", 1);
wiper.stateN = wiper.node.initNode("state", 0, "DOUBLE");
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 0);
props.getNode("/",1).setValue("/controls/lighting/indicator-left", 0);
props.getNode("/",1).setValue("/controls/lighting/indicator-right", 0);
props.getNode("/",1).setValue("/systems/horn", 0);
props.getNode("/",1).setValue("/controls/mode", 1);
props.getNode("/",1).setValue("/controls/direction", 1);
props.getNode("/",1).setValue("/systems/instruments/enable_switches", 0);
props.getNode("/",1).setValue("/systems/instruments/enable_cdu", 0);
props.getNode("/",1).setValue("/instrumentation/cdu/ident/model", "Follow me EV");
props.getNode("/",1).setValue("/instrumentation/cdu/ident/engines", "EV Motor");
props.getNode("/",1).setValue("services/service-truck/enable", 0);
props.getNode("controls/is-recharging", 1).setValue(0);
props.getNode("systems/welcome-message", 1).setValue(0);
props.getNode("systems/display-speed", 1).setValue(0);
props.getNode("systems/speedometer/type", 1).setValue("Type_A");
props.getNode("systems/battery-gauge/type", 1).setValue("Type_A");
props.getNode("systems/plate/file", 1).setValue("NONE");
props.getNode("systems/plate/name", 1).setValue("NONE");
props.getNode("controls/lighting/headlight-als", 1).setValue(0);
props.getNode("controls/lighting/highBeam", 1).setValue(0);
props.getNode("/controls/steering_wheel", 1).setValue(0);
props.getNode("controls/interior/luxury/storage_cover_pos", 1).setValue(0);
props.getNode("sim/remote/pilot-callsign", 1).setValue("");
props.getNode("systems/codriver-enable", 1).setValue(0);
props.getNode("systems/screen-enable", 1).setValue(0);
props.getNode("systems/pmodel-enable", 1).setValue(1);
props.getNode("systems/decorations-enable", 1).setValue(0);
props.getNode("systems/interior/type", 1).setValue("Default");
props.getNode("systems/safety/aeb_activated", 1).setValue(0);
props.getNode("systems/safety/aeb_on", 1).setValue(0);
props.getNode("systems/auto_hold_enabled", 1).setValue(0);
props.getNode("systems/auto_hold_working", 1).setValue(0);
props.getNode("controls/lighting/indicator/left_switch", 1).setValue(0);
props.getNode("controls/lighting/indicator/right_switch", 1).setValue(0);
props.getNode("controls/lighting/reverse_indicator", 1).setValue(0);

View File

@ -73,46 +73,6 @@ var toggleWiper = func(){
}
}
wiper.stateN = wiper.node.initNode("state", 0, "DOUBLE");
props.getNode("/",1).setValue("/controls/wiper/frontwiper_switch", 0);
props.getNode("/",1).setValue("/controls/lighting/indicator-left", 0);
props.getNode("/",1).setValue("/controls/lighting/indicator-right", 0);
props.getNode("/",1).setValue("/systems/horn", 0);
props.getNode("/",1).setValue("/controls/mode", 1);
props.getNode("/",1).setValue("/controls/direction", 1);
props.getNode("/",1).setValue("/systems/instruments/enable_switches", 0);
props.getNode("/",1).setValue("/systems/instruments/enable_cdu", 0);
props.getNode("/",1).setValue("/instrumentation/cdu/ident/model", "Follow me EV");
props.getNode("/",1).setValue("/instrumentation/cdu/ident/engines", "EV Motor");
props.getNode("/",1).setValue("services/service-truck/enable", 0);
props.getNode("controls/is-recharging", 1).setValue(0);
props.getNode("systems/welcome-message", 1).setValue(0);
props.getNode("systems/display-speed", 1).setValue(0);
props.getNode("systems/speedometer/type", 1).setValue("Type_A");
props.getNode("systems/battery-gauge/type", 1).setValue("Type_A");
props.getNode("systems/plate/file", 1).setValue("NONE");
props.getNode("systems/plate/name", 1).setValue("NONE");
props.getNode("controls/lighting/headlight-als", 1).setValue(0);
props.getNode("controls/lighting/highBeam", 1).setValue(0);
props.getNode("/controls/steering_wheel", 1).setValue(0);
props.getNode("controls/interior/luxury/storage_cover_pos", 1).setValue(0);
props.getNode("sim/remote/pilot-callsign", 1).setValue("");
props.getNode("systems/codriver-enable", 1).setValue(0);
props.getNode("systems/screen-enable", 1).setValue(0);
props.getNode("systems/pmodel-enable", 1).setValue(1);
props.getNode("systems/decorations-enable", 1).setValue(0);
props.getNode("systems/interior/type", 1).setValue("Default");
props.getNode("systems/safety/aeb_activated", 1).setValue(0);
props.getNode("systems/safety/aeb_on", 1).setValue(0);
props.getNode("systems/auto_hold_enabled", 1).setValue(0);
props.getNode("systems/auto_hold_working", 1).setValue(0);
props.getNode("controls/lighting/indicator/left_switch", 1).setValue(0);
props.getNode("controls/lighting/indicator/right_switch", 1).setValue(0);
props.getNode("controls/lighting/reverse_indicator", 1).setValue(0);
#var Led = {
#
# new: func() { return { parents:[Led] },
@ -502,8 +462,7 @@ var chargeBatteryStop = func(bef){
}
var calculateSpeed = func(){
var gs = props.getNode("velocities/groundspeed-kt", 1).getValue();
var speedKmh = 1.852 * gs;
var speedKmh = vehicleInformation.getSpeedKMH();
var calculated = 0;
var output = 0;
if(speedKmh <= 0){
@ -571,7 +530,7 @@ var Safety = {
aebEnabled: 0,
aebActivated: 0,
lastRadarOutput:10000,
throttleNode: props.getNode("/controls/engines/engine/throttle",1),
throttleNode: vehicleInformation.engine.throttleNode,
#Airbag
accXProp: props.getNode("/fdm/jsbsim/accelerations/a-pilot-x-ft_sec2", 1),
accYProp: props.getNode("/fdm/jsbsim/accelerations/a-pilot-y-ft_sec2", 1),
@ -663,8 +622,8 @@ var Safety = {
aebUpdate: func(){
#//AEB Loop
var currentSpeed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]")*1.852;#In km/h
var currentSpeed = vehicleInformation.getSpeedKMH();#In km/h
var radarOutput = me.frontRadar.radarOutput;
#print("radar output: " ~ radarOutput);
#print("last radar output: " ~ me.lastRadarOutput);