diff --git a/Models/plate/texture/SAD00818.png b/Models/plate/texture/SAD00818.png
new file mode 100644
index 0000000..58eec1d
Binary files /dev/null and b/Models/plate/texture/SAD00818.png differ
diff --git a/Models/screen.jpeg b/Models/screen.jpeg
index dbcbacd..6bfcfe6 100644
Binary files a/Models/screen.jpeg and b/Models/screen.jpeg differ
diff --git a/Models/screen_2.jpeg b/Models/screen_2.jpeg
index 6bfcfe6..dbcbacd 100644
Binary files a/Models/screen_2.jpeg and b/Models/screen_2.jpeg differ
diff --git a/Nasal/auto_speed.nas b/Nasal/auto_speed.nas
index bf5a18f..2bf562d 100644
--- a/Nasal/auto_speed.nas
+++ b/Nasal/auto_speed.nas
@@ -6,9 +6,11 @@ var mode = 1;#//1:Hold 2:Auto Speed
var leftBrakes = props.getNode("/controls/gear/brake-left",1);
var rightBrakes = props.getNode("/controls/gear/brake-right",1);
var throttleNode = props.getNode("/controls/engines/engine/throttle",1);
+var lastDeltaSpeed = 0;
var autoSpeedMainLoop = func(){
if(leftBrakes.getValue() == 1 or rightBrakes.getValue() == 1 or throttleNode.getValue() == 1){ #//Stop if full brakes or full throttle are manually applied
+ throttleNode.setValue(0);
stopAutoSpeed();
}
var currentSpeed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]");
@@ -16,7 +18,7 @@ var autoSpeedMainLoop = func(){
var throttle = 0;
var brakes = 0; #//range from 0 to 1;
if(deltaSpeed > 0){
- throttle = deltaSpeed/targetSpeed - 0.05; #// Max throttle 0.95
+ throttle = (deltaSpeed / targetSpeed) - 0.05; #// Max throttle 0.95
}else if(deltaSpeed <= -1.852){
throttle = 0;
brakes = ((0 - deltaSpeed) / targetSpeed) - 0.2; #// Max brake 0.8
@@ -26,6 +28,7 @@ var autoSpeedMainLoop = func(){
throttleNode.setValue(throttle);
leftBrakes.setValue(brakes);
rightBrakes.setValue(brakes);
+ lastDeltaSpeed = deltaSpeed;
}
var autoSpeedTimer = maketimer(0.05,autoSpeedMainLoop);
diff --git a/Nasal/electrical.nas b/Nasal/electrical.nas
index 4a479bb..7783f3f 100644
--- a/Nasal/electrical.nas
+++ b/Nasal/electrical.nas
@@ -285,6 +285,8 @@ var CurrentSource = {
me.electromotiveForce = me.ratedElectromotiveForce;
}
},
+
+ #//Usage: followme.circuit_1.parallelConnection[0].units[0].resetRemainingToFull();
resetRemainingToFull: func(){
me.remaining = me.electricalCapacity;
},
diff --git a/gui/dialogs/config.nas b/gui/dialogs/config.nas
index a74e63a..359de10 100644
--- a/gui/dialogs/config.nas
+++ b/gui/dialogs/config.nas
@@ -270,11 +270,11 @@ var BatteryWidget = {
#//}else{
#// m._nLevelPct = props.globals.initNode("/systems/electrical/battery-charge-percent-back",0.0,"DOUBLE");
#//}
- m._nLevelPct = props.globals.initNode("/systems/electrical/e-tron/battery-remaining-percent",0.0,"DOUBLE");
+ m._nLevelPct = props.getNode("/systems/electrical/e-tron/battery-remaining-percent");
- m._fraction = m._nLevelPct.getValue();
- m._capacity = 100; #100 kWh (per pack)
+ m._fraction = followme.circuit_1.parallelConnection[0].units[0].getRemainingPercentageFloat();
+ m._capacity = 80; #80 kWh (per pack)
m._cFrame = m._group.getElementById(m._name~"_Frame");
m._cFrameV = m._group.getElementById(m._name~"_Frame_Vis");
@@ -282,8 +282,8 @@ var BatteryWidget = {
m._cDataLevel = m._group.getElementById(m._name~"_Data_Level");
m._cDataAbs = m._group.getElementById(m._name~"_Data_Abs");
- m._cDataLevel.setText(sprintf("%3d",m._fraction*100)~" %");
- m._cDataAbs.setText(sprintf("%3.1f",m._fraction*m._capacity)~" kWh");
+ m._cDataLevel.setText(sprintf("%3d",m._fraction)~" %");
+ m._cDataAbs.setText(sprintf("%3.1f",m._fraction*m._capacity*0.01)~" kWh");
m._left = m._cFrame.get("coord[0]");
m._right = m._cFrame.get("coord[2]");
@@ -291,7 +291,7 @@ var BatteryWidget = {
return m;
},
setListeners : func(instance) {
- append(me._listeners, setlistener(me._nLevelPct,func(n){me._onChargeLevelChange(n);},1,0) );
+ append(me._listeners, setlistener(me._nLevelPct,func(){me._onChargeLevelChange();},1,0) );
me._cFrameV.addEventListener("drag",func(e){me._onChargeInputChange(e);});
me._cLevel.addEventListener("drag",func(e){me._onChargeInputChange(e);});
@@ -304,11 +304,11 @@ var BatteryWidget = {
deinit : func(){
me.removeListeners();
},
- _onChargeLevelChange : func(n){
- me._fraction = n.getValue();
-
- me._cDataLevel.setText(sprintf("%3d",me._fraction*100)~" %");
- me._cDataAbs.setText(sprintf("%3.1f",me._fraction*me._capacity)~" kWh");
+ _onChargeLevelChange : func(){
+ me._fraction = followme.circuit_1.parallelConnection[0].units[0].getRemainingPercentageFloat();
+
+ me._cDataLevel.setText(sprintf("%3d",me._fraction)~" %");
+ me._cDataAbs.setText(sprintf("%3.1f",me._fraction*me._capacity*0.01)~" kWh");
me._cLevel.set("coord[2]", me._left + (me._width * me._fraction));
@@ -321,223 +321,19 @@ var BatteryWidget = {
newFraction = me._fraction + (e.deltaX/me._width);
}
newFraction = clamp(newFraction,0.0,1.0);
- me._nLevelPct.setValue(newFraction);
+ followme.circuit_1.parallelConnection[0].units[0].remaining = newFraction * m._capacity;
},
};
-var WeightWidget = {
- new: func(dialog,canvasGroup,name,widgets){
- var m = {parents:[WeightWidget,SvgWidget.new(dialog,canvasGroup,name)]};
- m._class = "WeightWidget";
- m._widget = {};
-
- foreach(w;keys(widgets)){
- if(widgets[w] != nil){
- if(widgets[w]._class == "PayloadWidget"){
- m._widget[w] = widgets[w];
- }
- }
- }
-
- m._cWeightGrossKg = m._group.getElementById("Weight_Gross_Kg");
- m._cWeightGrossLbs = m._group.getElementById("Weight_Gross_Lbs");
- m._cWeightWarning = m._group.getElementById("Weight_Warning");
- m._cWeightPilotKg = m._group.getElementById("Weight_Pilot_Kg");
- m._cWeightPilotLbs = m._group.getElementById("Weight_Pilot_Lbs");
- m._cWeightCopilotKg = m._group.getElementById("Weight_Copilot_Kg");
- m._cWeightCopilotLbs = m._group.getElementById("Weight_Copilot_Lbs");
- m._cWeightBaggageKg = m._group.getElementById("Weight_Baggage_Kg");
- m._cWeightBaggageLbs = m._group.getElementById("Weight_Baggage_Lbs");
-
- m._cCenterGravityX = m._group.getElementById("Center_Gravity_X");
- m._cCenterGravityXWarning = m._group.getElementById("Center_Gravity_Warn");
-
- m._nCGx = props.globals.initNode("/fdm/jsbsim/inertia/cg-x-mm-rp",0.0,"DOUBLE"); #calculated CG distance to reference point, set via system in Systems/dialogs.xml
- m._nGross = props.globals.initNode("/fdm/jsbsim/inertia/weight-lbs");
- m._nPilot = props.globals.initNode("/payload/weight[0]/weight-lb");
- m._nCopilot = props.globals.initNode("/payload/weight[1]/weight-lb");
- m._nBaggage = props.globals.initNode("/payload/weight[2]/weight-lb");
- m._nTakeoff = props.globals.initNode("/limits/mtow-lbs");
-
-
- m._cgX = 0;
- m._pilot = 0;
- m._copilot = 0;
- m._baggage = 0;
- m._gross = 0;
- m._takeoff = 0;
-
- m._takeoff = m._nTakeoff.getValue();
-
- return m;
- },
- setListeners : func(instance) {
- append(me._listeners, setlistener(batteryPayload._nGrossWeight,func(n){me._onGrossWeightChange(n);},1,0) );
- append(me._listeners, setlistener(me._nCGx,func(n){me._onCGChange(n);},1,0) );
-
- },
- init : func(instance=me){
- me.setListeners(instance);
- },
- deinit : func(){
- me.removeListeners();
- },
- _onGrossWeightChange : func(n){
-
- me._gross = me._nGross.getValue();
- me._cWeightGrossKg.setText(sprintf("%5d",me._gross/KG2LB));
- me._cWeightGrossLbs.setText(sprintf("%4d",me._gross));
-
- me._pilot = me._nPilot.getValue();
- me._cWeightPilotKg.setText(sprintf("%5d",me._pilot/KG2LB));
- me._cWeightPilotLbs.setText(sprintf("%4d",me._pilot));
-
- me._copilot = me._nCopilot.getValue();
- me._cWeightCopilotKg.setText(sprintf("%5d",me._copilot/KG2LB));
- me._cWeightCopilotLbs.setText(sprintf("%4d",me._copilot));
-
- me._baggage = me._nBaggage.getValue();
- me._cWeightBaggageKg.setText(sprintf("%5d",me._baggage/KG2LB));
- me._cWeightBaggageLbs.setText(sprintf("%4d",me._baggage));
-
-
- if (me._gross > me._takeoff){
- me._cWeightWarning.show();
- me._cWeightGrossKg.setColor(COLOR["Red"]);
- me._cWeightGrossLbs.setColor(COLOR["Red"]);
- }else{
- me._cWeightWarning.hide();
- me._cWeightGrossKg.setColor(COLOR["Black"]);
- me._cWeightGrossLbs.setColor(COLOR["Black"]);
- }
-
-
- },
- _onCGChange : func(n){
-
- me._cgX = me._nCGx.getValue();
-
- me._cCenterGravityX.setTranslation((me._cgX-200),0);
-
- if(me._cgX>195 and me._cgX<368){
- me._cCenterGravityXWarning.hide();
- }else{
- me._cCenterGravityXWarning.show();
- }
-
- },
-
-
-
-};
-
-var PayloadWidget = {
- new: func(dialog,canvasGroup,name,index){
- var m = {parents:[PayloadWidget,SvgWidget.new(dialog,canvasGroup,name)]};
- m._class = "PayloadWidget";
- m._index = index;
-
- #debug.dump(m._listCategoryKeys);
-
- m._nRoot = props.globals.getNode("/payload/weight["~m._index~"]");
- m._nLable = m._nRoot.initNode("name","","STRING");
-
- ### HACK : listener on /payload/weight[0]/weight-lb not working
- ### two props one for fdm(weight-lb) one for dialog(nt-weight-lb) listener
- m._nWeightFdm = m._nRoot.initNode("weight-lb",0.0,"DOUBLE");
- m._weight = m._nWeightFdm.getValue(); # lbs
- m._nWeight = m._nRoot.initNode("nt-weight-lb",m._weight,"DOUBLE");
-
- m._nCapacity = m._nRoot.initNode("max-lb",0.0,"DOUBLE");
-
- m._capacity = m._nCapacity.getValue();
- m._fraction = m._weight / m._capacity;
-
- m._cFrame = m._group.getElementById(m._name~"_Frame");
- m._cFrame_Pick = m._group.getElementById(m._name~"_Frame_Pick");
- m._cLevel = m._group.getElementById(m._name~"_Level");
- m._cLBS = m._group.getElementById(m._name~"_Lbs");
- m._cKG = m._group.getElementById(m._name~"_Kg");
-
- m._cLBS.setText(sprintf("%3.0f",m._weight));
- m._cKG.setText(sprintf("%3.0f",m._weight));
-
-
- m._left = m._cFrame.get("coord[0]");
- m._right = m._cFrame.get("coord[2]");
- m._width = m._right - m._left;
-
- return m;
- },
- setListeners : func(instance) {
- ### FIXME : use one property remove the HACK
- append(me._listeners, setlistener(me._nWeight,func(n){me._onWeightChange(n);},1,0) );
-
- me._cFrame_Pick.addEventListener("drag",func(e){me._onInputChange(e);});
- me._cLevel.addEventListener("drag",func(e){me._onInputChange(e);});
- me._cFrame_Pick.addEventListener("wheel",func(e){me._onInputChange(e);});
- me._cLevel.addEventListener("wheel",func(e){me._onInputChange(e);});
-
-
-
- },
- init : func(instance=me){
- me.setListeners(instance);
- },
- deinit : func(){
- me.removeListeners();
- },
- setWeight : func(weight){
- me._weight = weight;
-
- ### HACK : set two props
- me._nWeight.setValue(me._weight);
- me._nWeightFdm.setValue(me._weight);
-
- },
- _onWeightChange : func(n){
- me._weight = me._nWeight.getValue();
- #print("PayloadWidget._onWeightChange() ... "~me._weight);
-
- me._fraction = me._weight / me._capacity;
-
- me._cLBS.setText(sprintf("%3.0f",me._weight));
- me._cKG.setText(sprintf("%3.0f",me._weight/KG2LB));
-
- me._cLevel.set("coord[2]", me._left + (me._width * me._fraction));
- },
- _onInputChange : func(e){
- var newFraction =0;
- if(e.type == "wheel"){
- newFraction = me._fraction + (e.deltaY/me._width);
- }else{
- newFraction = me._fraction + (e.deltaX/me._width);
- }
- newFraction = clamp(newFraction,0.0,1.0);
- me._weight = me._capacity * newFraction;
-
- me.setWeight(me._weight);
-
- },
-};
-
-
var BatteryPayloadClass = {
new : func(){
var m = {parents:[BatteryPayloadClass]};
- m._nRoot = props.globals.initNode("/alphaelectro/dialog/config");
-
- m._nGrossWeight = props.globals.initNode("/fdm/jsbsim/inertia/nt-weight-lbs",0.0,"DOUBLE"); #listener on weight-lbs not possible, set via system in Systems/fuelpayload.xml
+ m._nRoot = props.globals.initNode("/e-tron/dialog/config");
m._name = "Battery and Systems";
m._title = "Battery and Systems Settings";
- m._fdmdata = {
- grosswgt : "/fdm/jsbsim/inertia/weight-lbs",
- payload : "/payload",
- cg : "/fdm/jsbsim/inertia/cg-x-in",
- };
m._listeners = [];
@@ -623,9 +419,7 @@ var BatteryPayloadClass = {
canvas.parsesvg(me._group, "Aircraft/followme_e-tron/gui/dialogs/config.svg",{"font-mapper": font_mapper});
-
- me._widget.Front = BatteryWidget.new(me,me._group,"Front");
- me._widget.Rear = BatteryWidget.new(me,me._group,"Rear");
+ me._widget.Front = BatteryWidget.new(me,me._group,"Front");
diff --git a/gui/dialogs/config.svg b/gui/dialogs/config.svg
index 15286d9..c9d8762 100644
--- a/gui/dialogs/config.svg
+++ b/gui/dialogs/config.svg
@@ -26,8 +26,8 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="211.03013"
- inkscape:cy="253.07054"
+ inkscape:cx="351.03013"
+ inkscape:cy="293.07054"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -109,13 +109,13 @@
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!
-