Systems: Added advanced steering; GUI: Add experimental canvas dialog(WIP)

This commit is contained in:
Sidi Liang 2020-01-15 21:06:07 +08:00
parent ab2c55b621
commit 3eee3df4f0
7 changed files with 1604 additions and 37 deletions

View File

@ -256,8 +256,8 @@
<animation>
<type>rotate</type>
<object-name>steeringwheel</object-name>
<property>sim/multiplay/generic/float[14]</property>
<factor>-100</factor>
<property>sim/multiplay/generic/float[18]</property>
<factor>-1</factor>
<center>
<x-m> 1.50</x-m>
<y-m>-0.33</y-m>

115
Nasal/steering.nas Normal file
View File

@ -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");
});

View File

@ -124,6 +124,22 @@
</volume>
</indicatorEnd>
<music>
<name>music</name>
<mode>once</mode>
<path>Aircraft/followme_e-tron/MusicPlayer/Music/Example/Inspiration_mono.wav</path>
<condition>
<equals>
<property>/controls/music_player/control</property>
<value>1</value>
</equals>
</condition>
<volume>
<property>/controls/music_player/volume</property>
</volume>
</music>
</fx>

View File

@ -292,11 +292,11 @@
</key>
<key>
<name>a</name>
<desc>Steer left 50%</desc>
<desc>Steer left</desc>
</key>
<key>
<name>d</name>
<desc>Steer right 50%</desc>
<desc>Steer right</desc>
</key>
<key>
<name>space</name>
@ -425,6 +425,8 @@
<float n="16" alias="/systems/electrical/e-tron/battery-kWh"/>
<float n="17" alias="/systems/electrical/e-tron/battery-remaining-percent-float"/>
<float n="18" alias="/controls/steering_wheel"/>
<string n="0" alias="/systems/plate"/>
<string n="1" alias="/systems/battery-gauge/type"/>
<string n="2" alias="/systems/speedometer/type"/>
@ -539,17 +541,15 @@
<name>a</name>
<desc>rudder-left</desc>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property>/controls/flight/rudder</property>
<value>-0.5</value>
</binding>
<binding>
<command>nasal</command>
<script>followme.steeringAssistance.inputLeft();</script>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/flight/rudder</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>followme.steeringAssistance.neutral();</script>
</binding>
</mod-up>
</key>
<key n="99">
@ -565,17 +565,15 @@
<name>d</name>
<desc>rudder-right</desc>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property>/controls/flight/rudder</property>
<value>0.5</value>
</binding>
<binding>
<command>nasal</command>
<script>followme.steeringAssistance.inputRight();</script>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/flight/rudder</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>followme.steeringAssistance.neutral();</script>
</binding>
</mod-up>
</key>
<key n="32">
@ -657,7 +655,8 @@
<nasal>
<followme>
<file>Aircraft/followme_e-tron/Nasal/electrical.nas</file>
<file>Aircraft/followme_e-tron/Nasal/systems.nas</file>
<file>Aircraft/followme_e-tron/Nasal/systems.nas</file>
<file>Aircraft/followme_e-tron/Nasal/steering.nas</file>
</followme>
<!--<screen>
<file>Aircraft/followme_e-tron/Nasal/SmartScreen.nas</file>
@ -683,6 +682,9 @@
<musicplayer>
<file>Aircraft/followme_e-tron/MusicPlayer/musicplayer.nas</file>
</musicplayer>
<dialogs>
<file>Aircraft/followme_e-tron/gui/dialogs/config.nas</file>
</dialogs>
</nasal>
</PropertyList>

643
gui/dialogs/config.nas Normal file
View File

@ -0,0 +1,643 @@
#Font Mapper
var font_mapper = func(family, weight) {
return "Orbitron/Orbitron-Bold.ttf";
};
var clamp = func(value,min=0.0,max=0.0){
if(value < min) {value = min;}
if(value > max) {value = max;}
return value;
}
var MyWindow = {
# Constructor
#
# @param size ([width, height])
new: func(size, type = nil, id = nil)
{
var ghost = canvas._newWindowGhost(id);
var m = {
parents: [MyWindow, canvas.PropertyElement, ghost],
_node: props.wrapNode(ghost._node_ghost)
};
m.setInt("size[0]", size[0]);
m.setInt("size[1]", size[1]);
# TODO better default position
m.move(0,0);
# arg = [child, listener_node, mode, is_child_event]
setlistener(m._node, func m._propCallback(arg[0], arg[2]), 0, 2);
if( type )
m.set("type", type);
m._isOpen = 1;
return m;
},
# Destructor
del: func
{
me._node.remove();
me._node = nil;
if( me["_canvas"] != nil )
{
me._canvas.del();
me._canvas = nil;
}
me._isOpen = 0;
},
# Create the canvas to be used for this Window
#
# @return The new canvas
createCanvas: func()
{
var size = [
me.get("size[0]"),
me.get("size[1]")
];
me._canvas = canvas.new({
size: [2 * size[0], 2 * size[1]],
view: size,
placement: {
type: "window",
id: me.get("id")
}
});
me._canvas.addEventListener("mousedown", func me.raise());
return me._canvas;
},
# Set an existing canvas to be used for this Window
setCanvas: func(canvas_)
{
if( !isa(canvas_, canvas.Canvas) )
return debug.warn("Not a canvas.Canvas");
canvas_.addPlacement({type: "window", index: me._node.getIndex()});
me['_canvas'] = canvas_;
},
# Get the displayed canvas
getCanvas: func()
{
return me['_canvas'];
},
getCanvasDecoration: func()
{
return canvas.wrapCanvas(me._getCanvasDecoration());
},
setPosition: func(x, y)
{
me.setInt("tf/t[0]", x);
me.setInt("tf/t[1]", y);
},
move: func(x, y)
{
me.setInt("tf/t[0]", me.get("tf/t[0]", 10) + x);
me.setInt("tf/t[1]", me.get("tf/t[1]", 30) + y);
},
# Raise to top of window stack
raise: func()
{
# on writing the z-index the window always is moved to the top of all other
# windows with the same z-index.
me.setInt("z-index", me.get("z-index", 0));
},
# private:
_propCallback: func(child, mode)
{
if( !me._node.equals(child.getParent()) )
return;
var name = child.getName();
# support for CSS like position: absolute; with right and/or bottom margin
if( name == "right" )
me._handlePositionAbsolute(child, mode, name, 0);
else if( name == "bottom" )
me._handlePositionAbsolute(child, mode, name, 1);
# update decoration on type change
else if( name == "type" )
{
if( mode == 0 )
settimer(func me._updateDecoration(), 0);
}
},
_handlePositionAbsolute: func(child, mode, name, index)
{
# mode
# -1 child removed
# 0 value changed
# 1 child added
if( mode == 0 )
me._updatePos(index, name);
else if( mode == 1 )
me["_listener_" ~ name] = [
setlistener
(
"/sim/gui/canvas/size[" ~ index ~ "]",
func me._updatePos(index, name)
),
setlistener
(
me._node.getNode("size[" ~ index ~ "]"),
func me._updatePos(index, name)
)
];
else if( mode == -1 )
for(var i = 0; i < 2; i += 1)
removelistener(me["_listener_" ~ name][i]);
},
_updatePos: func(index, name)
{
me.setInt
(
"tf/t[" ~ index ~ "]",
getprop("/sim/gui/canvas/size[" ~ index ~ "]")
- me.get(name)
- me.get("size[" ~ index ~ "]")
);
},
_onClose : func(){
me.del();
},
_updateDecoration: func()
{
var border_radius = 9;
me.set("decoration-border", "25 1 1");
me.set("shadow-inset", int((1 - math.cos(45 * D2R)) * border_radius + 0.5));
me.set("shadow-radius", 5);
me.setBool("update", 1);
var canvas_deco = me.getCanvasDecoration();
canvas_deco.addEventListener("mousedown", func me.raise());
canvas_deco.set("blend-source-rgb", "src-alpha");
canvas_deco.set("blend-destination-rgb", "one-minus-src-alpha");
canvas_deco.set("blend-source-alpha", "one");
canvas_deco.set("blend-destination-alpha", "one");
var group_deco = canvas_deco.getGroup("decoration");
var title_bar = group_deco.createChild("group", "title_bar");
title_bar
.rect( 0, 0,
me.get("size[0]"),
me.get("size[1]"), #25,
{"border-top-radius": border_radius} )
.setColorFill(0.25,0.24,0.22)
.setStrokeLineWidth(0);
var style_dir = "gui/styles/AmbianceClassic/decoration/";
# close icon
var x = 10;
var y = 3;
var w = 19;
var h = 19;
var ico = title_bar.createChild("image", "icon-close")
.set("file", style_dir ~ "close_focused_normal.png")
.setTranslation(x,y);
ico.addEventListener("click", func me._onClose());
ico.addEventListener("mouseover", func ico.set("file", style_dir ~ "close_focused_prelight.png"));
ico.addEventListener("mousedown", func ico.set("file", style_dir ~ "close_focused_pressed.png"));
ico.addEventListener("mouseout", func ico.set("file", style_dir ~ "close_focused_normal.png"));
# title
me._title = title_bar.createChild("text", "title")
.set("alignment", "left-center")
.set("character-size", 14)
.set("font", "Orbitron/Orbitron-Bold.ttf")
.setTranslation( int(x + 1.5 * w + 0.5),
int(y + 0.5 * h + 0.5) );
var title = me.get("title", "Canvas Dialog");
me._node.getNode("title", 1).alias(me._title._node.getPath() ~ "/text");
me.set("title", title);
title_bar.addEventListener("drag", func(e) {
if( !ico.equals(e.target) )
me.move(e.deltaX, e.deltaY);
});
}
};
var COLOR = {};
COLOR["Red"] = "rgb(244,28,33)";
COLOR["Black"] = "#000000";
var SvgWidget = {
new: func(dialog,canvasGroup,name){
var m = {parents:[SvgWidget]};
m._class = "SvgWidget";
m._dialog = dialog;
m._listeners = [];
m._name = name;
m._group = canvasGroup;
return m;
},
removeListeners :func(){
foreach(l;me._listeners){
removelistener(l);
}
me._listeners = [];
},
setListeners : func(instance) {
},
init : func(instance=me){
},
deinit : func(){
me.removeListeners();
},
};
var BatteryWidget = {
new: func(dialog,canvasGroup,name){
var m = {parents:[BatteryWidget,SvgWidget.new(dialog,canvasGroup,name)]};
m._class = "BatteryWidget";
m._name = name;
#//if(m._name=="Front"){
#// m._nLevelPct = props.globals.initNode("/systems/electrical/battery-charge-percent-front",0.0,"DOUBLE");
#//}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._fraction = m._nLevelPct.getValue();
m._capacity = 100; #100 kWh (per pack)
m._cFrame = m._group.getElementById(m._name~"_Frame");
m._cFrameV = m._group.getElementById(m._name~"_Frame_Vis");
m._cLevel = m._group.getElementById(m._name~"_Charge_Level");
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._left = m._cFrame.get("coord[0]");
m._right = m._cFrame.get("coord[2]");
m._width = m._right - m._left;
return m;
},
setListeners : func(instance) {
append(me._listeners, setlistener(me._nLevelPct,func(n){me._onChargeLevelChange(n);},1,0) );
me._cFrameV.addEventListener("drag",func(e){me._onChargeInputChange(e);});
me._cLevel.addEventListener("drag",func(e){me._onChargeInputChange(e);});
me._cFrameV.addEventListener("wheel",func(e){me._onChargeInputChange(e);});
me._cLevel.addEventListener("wheel",func(e){me._onChargeInputChange(e);});
},
init : func(instance=me){
me.setListeners(instance);
},
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");
me._cLevel.set("coord[2]", me._left + (me._width * me._fraction));
},
_onChargeInputChange : 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._nLevelPct.setValue(newFraction);
},
};
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._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 = [];
m._dlg = nil;
m._canvas = nil;
m._isOpen = 0;
m._isNotInitialized = 1;
m._widget = {
Front : nil,
Rear : nil,
Pilot : nil,
Copilot : nil,
Baggage : nil,
weight : nil,
};
return m;
},
toggle : func(){
if(me._dlg != nil){
if (me._dlg._isOpen){
me.close();
}else{
me.open();
}
}else{
me.open();
}
},
close : func(){
me._dlg.del();
me._dlg = nil;
},
removeListeners :func(){
foreach(l;me._listeners){
removelistener(l);
}
me._listeners = [];
},
setListeners : func(instance) {
},
_onClose : func(){
me.removeListeners();
me._dlg.del();
foreach(widget;keys(me._widget)){
if(me._widget[widget] != nil){
me._widget[widget].deinit();
me._widget[widget] = nil;
}
}
},
open : func(){
if(getprop("/gear/gear[1]/wow") == 1){
me.openBAP();
}else{
screen.log.write("Battery and payload dialog not available in air!");
}
},
openBAP : func(){
me._dlg = MyWindow.new([1024, 512], "dialog");
me._dlg._onClose = func(){
batteryPayload._onClose();
}
me._dlg.set("title", "Followme EV Config");
me._dlg.move(100,100);
me._canvas = me._dlg.createCanvas();
me._canvas.set("background", "#c5c5c5ff");
me._group = me._canvas.createGroup();
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");
},
_onNotifyChange : func(n){
},
};
var batteryPayload = BatteryPayloadClass.new();
gui.menuBind("fuel-and-payload", "dialogs.batteryPayload.toggle();");

761
gui/dialogs/config.svg Normal file
View File

@ -0,0 +1,761 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="512"
viewBox="0 0 1024 512"
version="1.1"
id="svg1683"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="config.svg">
<defs
id="defs1677" />
<sodipodi:namedview
id="base"
pagecolor="#848484"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="211.03013"
inkscape:cy="253.07054"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1366"
inkscape:window-height="663"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
inkscape:lockguides="false">
<sodipodi:guide
position="700,497.67857"
orientation="1,0"
id="guide2337"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="800,387.14286"
orientation="1,0"
id="guide2343"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="900,358.57143"
orientation="1,0"
id="guide2345"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="1000,375"
orientation="1,0"
id="guide2347"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="795,311.78571"
orientation="1,0"
id="guide2365"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="968,270.21581"
orientation="1,0"
id="guide2371"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="919.64286,121.07143"
orientation="1,0"
id="guide2440"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata1680">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:53.57478333px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.33936954px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="496.82639"
y="215.76994"
id="text2284"><tspan
sodipodi:role="line"
id="tspan2282"
x="496.82639"
y="215.76994"
style="text-align:center;text-anchor:middle;stroke-width:1.33936954px">Follow Me EV</tspan></text>
<text
id="text2288"
y="275.96994"
x="322.89066"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.86049843px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.6965124px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.6965124px"
y="275.96994"
x="322.89066"
id="tspan2286"
sodipodi:role="line">Batteries and Systems</tspan></text>
<g
id="g2776"
transform="translate(0,8.0812204)">
<rect
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.16076195;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2373"
width="32"
height="32.111198"
x="968"
y="303.56494"
ry="3.6904399" />
<rect
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:2.69892764;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2369"
width="173"
height="32.111198"
x="795"
y="303.56494"
ry="3.6904399" />
<rect
ry="3.6904399"
y="303.56494"
x="700"
height="32.111198"
width="95"
id="rect2367"
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:#161616;stroke-width:2.08352709;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2304"
width="299.99997"
height="32.142857"
x="700"
y="303.53329"
ry="3.6904399" />
<text
id="text2308"
y="265.96994"
x="841.4621"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.86049843px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.6965124px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.6965124px"
y="265.96994"
x="841.4621"
id="tspan2306"
sodipodi:role="line">Center of Gravity</tspan></text>
<text
id="text2341"
y="300.35629"
x="695.97491"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.28075397px"
y="300.35629"
x="695.97491"
id="tspan2339"
sodipodi:role="line">100</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="797.76062"
y="300.35629"
id="text2351"><tspan
sodipodi:role="line"
id="tspan2349"
x="797.76062"
y="300.35629"
style="stroke-width:0.28075397px">200</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="899.78601"
y="300.35629"
id="text2359"><tspan
sodipodi:role="line"
id="tspan2357"
x="899.78601"
y="300.35629"
style="stroke-width:0.28075397px">300</tspan></text>
<text
id="text2355"
y="300.35629"
x="997.26575"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.28075397px"
y="300.35629"
x="997.26575"
id="tspan2353"
sodipodi:role="line">400</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.26919985px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.18172999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="850.54865"
y="286.11429"
id="text2363"><tspan
sodipodi:role="line"
id="tspan2361"
x="850.54865"
y="286.11429"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.18172999px">(mm behind leading edge)</tspan></text>
<path
inkscape:connector-curvature="0"
d="m 800,306.92617 v 24.10715 m -12.05357,-12.05357 h 24.10715"
style="fill:none;fill-rule:evenodd;stroke:#0058ff;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="Center_Gravity_X"
inkscape:label="#path2377" />
<text
id="Center_Gravity_Warn"
y="354.39615"
x="850.46967"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.45599842px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.38639992px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2382"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';fill:#ff0000;fill-opacity:1;stroke-width:0.38639992px"
y="354.39615"
x="850.46967"
id="tspan2380"
sodipodi:role="line">out of permitted range!</tspan></text>
</g>
<g
id="g2755"
transform="translate(0,-26.263966)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.86049843px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.6965124px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="841.4621"
y="447.79739"
id="text2388"><tspan
sodipodi:role="line"
id="tspan2386"
x="841.4621"
y="447.79739"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.6965124px">Gross Weight</tspan></text>
<rect
ry="17.216581"
y="470.80408"
x="701.19934"
height="149.95235"
width="297.60132"
id="rect2390"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#161616;stroke-width:4.48219109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="text2394"
y="491.85144"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="491.85144"
x="712.04523"
id="tspan2392"
sodipodi:role="line">Empty Weight</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="510.70609"
id="text2398"><tspan
sodipodi:role="line"
id="tspan2396"
x="712.04523"
y="510.70609"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Battery Pack Front</tspan></text>
<text
id="text2402"
y="530.27216"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="530.27216"
x="712.04523"
id="tspan2400"
sodipodi:role="line">Battery Pack Rear</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="548.77106"
id="text2406"><tspan
sodipodi:role="line"
id="tspan2404"
x="712.04523"
y="548.77106"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Pilot</tspan></text>
<text
id="text2410"
y="567.26996"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="567.26996"
x="712.04523"
id="tspan2408"
sodipodi:role="line">Copilot</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="586.4541"
id="text2414"><tspan
sodipodi:role="line"
id="tspan2412"
x="712.04523"
y="586.4541"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Baggage</tspan></text>
<path
inkscape:connector-curvature="0"
id="path2416"
d="M 822.76925,598.78203 H 1000"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="613.57483"
id="text2420"><tspan
sodipodi:role="line"
id="tspan2418"
x="712.04523"
y="613.57483"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Gross Weight</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="490.40106"
id="text2424"><tspan
sodipodi:role="line"
id="tspan2422"
x="917.2782"
y="490.40106"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">379 kg</tspan></text>
<text
id="text2428"
y="490.40106"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="490.40106"
x="990.31146"
id="tspan2426"
sodipodi:role="line">836 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="511.4725"
id="text2452"><tspan
sodipodi:role="line"
id="tspan2450"
x="917.2782"
y="511.4725"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">53 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="529.68677"
id="text2460"><tspan
sodipodi:role="line"
id="tspan2458"
x="917.2782"
y="529.68677"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">53 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="547.90106"
id="Weight_Pilot_Kg"
inkscape:label="#text2468"><tspan
sodipodi:role="line"
id="tspan2466"
x="917.2782"
y="547.90106"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">000 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="565.75818"
id="Weight_Copilot_Kg"
inkscape:label="#text2476"><tspan
sodipodi:role="line"
id="tspan2474"
x="917.2782"
y="565.75818"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">000 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="584.32965"
id="Weight_Baggage_Kg"
inkscape:label="#text2484"><tspan
sodipodi:role="line"
id="tspan2482"
x="917.2782"
y="584.32965"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">00 kg</tspan></text>
<text
id="Weight_Gross_Kg"
y="611.47247"
x="917.2782"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2444"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="611.47247"
x="917.2782"
id="tspan2442"
sodipodi:role="line">000 kg</tspan></text>
<text
id="text2456"
y="511.4725"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="511.4725"
x="990.31146"
id="tspan2454"
sodipodi:role="line">117 lbs</tspan></text>
<text
id="text2464"
y="529.68677"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="529.68677"
x="990.31146"
id="tspan2462"
sodipodi:role="line">117 lbs</tspan></text>
<text
id="Weight_Pilot_Lbs"
y="547.90106"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2472"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="547.90106"
x="990.31146"
id="tspan2470"
sodipodi:role="line">000 lbs</tspan></text>
<text
id="Weight_Copilot_Lbs"
y="565.75818"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2480"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="565.75818"
x="990.31146"
id="tspan2478"
sodipodi:role="line">000 lbs</tspan></text>
<text
id="Weight_Baggage_Lbs"
y="584.32965"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2488"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="584.32965"
x="990.31146"
id="tspan2486"
sodipodi:role="line">000 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="990.31146"
y="611.47247"
id="Weight_Gross_Lbs"
inkscape:label="#text2448"><tspan
sodipodi:role="line"
id="tspan2446"
x="990.31146"
y="611.47247"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">0000 lbs</tspan></text>
<text
id="text2492"
y="645.39465"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="645.39465"
x="712.04523"
id="tspan2490"
sodipodi:role="line">MTOW</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="643.2923"
id="text2496"><tspan
sodipodi:role="line"
id="tspan2494"
x="917.2782"
y="643.2923"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">550 kg</tspan></text>
<text
id="text2500"
y="643.2923"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="643.2923"
x="990.31146"
id="tspan2498"
sodipodi:role="line">1213 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.45599842px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.38639992px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="850.46967"
y="666.0282"
id="Weight_Warning"
inkscape:label="#text2504"><tspan
sodipodi:role="line"
id="tspan2502"
x="850.46967"
y="666.0282"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';fill:#ff0000;fill-opacity:1;stroke-width:0.38639992px">Gross weight exceeds MTOW!</tspan></text>
</g>
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#161616;stroke-width:5.46819067;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2264"
width="104.92298"
height="99.461815"
x="476.4472"
y="467.67197"
ry="7.3038945" />
<text
id="text2584"
y="489.87433"
x="529.1167"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.82061481px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.22051534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-size:14.66666698px;line-height:100%;stroke-width:0.22051534px"
y="489.87433"
x="529.1167"
id="tspan2582"
sodipodi:role="line">Battery</tspan></text>
<rect
inkscape:label="#rect2899"
y="501.92322"
x="484.48337"
height="20.417809"
width="89.146385"
id="Front_Charge_Level"
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.03214848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:#f00000;stroke-width:1.02535677;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="Front_Frame"
width="88.359222"
height="20.329498"
x="485.27054"
y="502.01517"
inkscape:label="#rect2899" />
<rect
inkscape:label="#rect2609"
ry="2.3991122"
y="502.01517"
x="484.4834"
height="20.325813"
width="89.146385"
id="Front_Frame_Vis"
style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="Front_Data_Level"
y="539.51044"
x="529.94336"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.36460876px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.33411518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2796"><tspan
id="tspan2981"
style="stroke-width:0.33411518px"
y="539.51044"
x="529.94336"
sodipodi:role="line">000</tspan></text>
<text
inkscape:label="#text2796"
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.36460876px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.33411518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="529.94336"
y="553.65259"
id="Front_Data_Abs"><tspan
sodipodi:role="line"
x="529.94336"
y="553.65259"
style="stroke-width:0.33411518px"
id="tspan2985">000</tspan></text>
<g
id="g1273"
style="display:none">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 98.234154,395.74294 v 71.05623"
id="path1253"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 32.399929,432.2968 c 0,0 41.775836,-27.6019 68.631721,-38.04587 26.8559,-10.44395 111.15356,-14.17393 111.15356,-14.17393 0,0 32.40787,-4.5125 52.98037,-18.22749 17.20405,-11.46939 78.0851,-50.92299 134.0988,-64.84416 10.96704,-2.72565 21.24241,-1.31581 31.47191,-1.68224 40.77279,-1.46054 122.05532,14.82945 205.18514,40.247 l 0.29967,156.27417 c -117.79269,25.9619 -191.8185,35.15959 -251.33745,37.05913 -70.12372,2.238 -188.29292,-14.07902 -225.7454,-24.62902 -37.45248,-10.54999 -44.30996,-11.07749 -46.41996,-19.51749 -2.11,-8.43999 -2.63749,-13.71498 -2.63749,-13.71498 0,0 -7.38499,-1.5825 -30.067468,-12.65998 C 57.33085,447.30445 32.400033,432.2968 32.400033,432.2968 Z"
id="path1255"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csccssccssccscc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 319.49804,416.9732 c -8.69387,13.84954 -10.79697,60.39873 30.33122,60.39873 h 98.90617 c 0,0 12.92372,2.37373 24.26497,-20.83625 11.34124,-23.21 48.52996,-96.26868 48.52996,-96.26868 0,0 7.38501,-26.37498 -20.04499,-26.37498 -27.42996,0 -112.35739,-2.10999 -112.35739,-2.10999 0,0 -12.1325,-7.91249 -26.9025,16.35247 -14.76996,24.265 -42.72744,68.8387 -42.72744,68.8387 z"
id="path1257"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscscsccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 244.2631,371.12503 c 0,0 15.66594,26.1099 34.31585,30.95888 18.64994,4.84899 32.45087,-16.78492 32.45087,-16.78492 0,0 40.65686,-61.17179 51.47381,-68.25873 10.81696,-7.08699 23.8719,-8.206 23.8719,-8.206 0,0 13.42795,1.11901 13.80097,-5.96796 0.37299,-7.08698 -1.51658,-5.53875 -1.51658,-5.53875"
id="path1259"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csccccc" />
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#161616;stroke-width:4.17758369;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle1261"
cx="173.90813"
cy="625.07184"
r="25.319981" />
<circle
r="32.900581"
cy="621.34186"
cx="470.81497"
id="circle1263"
style="opacity:1;fill:none;fill-opacity:1;stroke:#161616;stroke-width:5.4283185;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 148.32441,634.30304 c 0,0 -16.35249,-5.53873 -16.35249,-18.19877 0,-12.65994 29.01248,-29.0124 43.78246,-29.0124 14.77,0 38.77124,13.45123 61.18997,13.45123 22.41872,0 35.86996,0 35.86996,0 l -7.64873,26.11117 c 0,0 -27.42999,2.37377 -39.03498,7.12131 -11.60498,4.74744 -35.60622,7.9125 -48.2662,7.9125 -12.66,0 -29.53999,-7.38504 -29.53999,-7.38504 z"
id="path1265"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 416.21543,610.96311 c 0,-27.60191 43.26782,-33.19687 59.30675,-33.19687 16.03896,0 61.91776,15.29295 79.4487,17.1579 17.53094,1.86505 28.3479,2.61098 28.3479,2.61098 l -1.49202,30.9589 c 0,0 -57.44177,7.087 -66.39372,7.087 -8.95198,0 -36.18087,7.83293 -44.38682,7.83293 -8.20596,0 -54.83079,-4.47593 -54.83079,-32.45084 z"
id="path1267"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccc"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 220.76419,515.84846 -26.10499,54.2577 5.52642,2.32142 -8.86998,18.09298 7.12123,2.11004 7.90018,-17.65893 16.25223,7.04379 28.07005,-61.65232"
id="path1269"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.08879185px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 463.50543,513.50563 c 0,0 -7.64877,0.5275 -6.33001,8.70375 1.31874,8.17625 3.69251,56.1787 3.69251,56.1787 l 15.82498,-0.79129 3.16499,-60.1349 c 0,0 -1.64101,-4.77676 -6.65226,-4.77676 -5.01124,0 -9.70021,0.8205 -9.70021,0.8205 z"
id="path1271"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccsc" />
</g>
<path
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4690"
d="m 354.25468,374.1382 c -2.83146,-1.77608 -5.8068,-3.19582 -8.9893,-4.20206 -4.20389,-1.49916 -8.65931,-1.80796 -13.0763,-2.05457 -2.67989,0.0277 -5.40887,-0.38505 -8.08456,-0.0418 -2.66077,0.34134 -5.36112,1.29951 -7.9093,2.0977 -0.89593,0.28523 -1.81471,0.50671 -2.68778,0.85569 -4.75567,1.90095 -21.0869,11.50793 0.31182,-0.5327 -4.26793,3.21321 -8.70065,6.25469 -12.71607,9.78468 -3.47659,3.02843 -6.90762,6.11902 -10.17547,9.3723 -3.33246,3.02704 -5.68446,6.85153 -8.14264,10.57225 -2.61488,4.41639 -4.73289,9.08503 -7.03133,13.66456 -2.1517,4.28274 -4.21082,8.60933 -6.13193,13.00014 -2.20481,4.71787 -4.39745,9.42246 -6.09708,14.34946 -1.46777,4.5267 -3.08871,8.99754 -4.60144,13.50703 -1.34832,3.61722 -2.24355,7.37835 -3.31269,11.08144 -0.69454,2.09218 -0.70486,4.31633 -1.205,6.44351 -0.24482,0.70371 -0.39038,1.43707 -0.64472,2.13672 0,0 -13.34193,6.56651 -13.34193,6.56651 v 0 c -0.007,-0.84258 0.35254,-1.58633 0.59012,-2.39145 0.86951,-2.09108 0.76916,-4.40707 1.50859,-6.5509 1.12542,-3.72538 1.99219,-7.54148 3.42135,-11.16782 1.29832,-4.27171 -0.0254,-0.20888 1.58872,-4.35293 1.1765,-3.02047 1.7875,-6.22625 3.04948,-9.21896 1.7756,-4.92635 3.73751,-9.73347 6.0369,-14.44199 1.9608,-4.40645 3.88853,-8.82406 6.13454,-13.09868 1.21546,-2.27756 2.16963,-4.64956 3.34965,-6.94232 2.42498,-4.71166 0.16634,0.0388 2.45527,-4.55248 0.37591,-0.75402 0.71872,-1.52408 1.07808,-2.28613 2.55137,-3.69625 4.65211,-7.75637 8.03107,-10.79848 3.16198,-3.38373 6.70507,-6.43338 10.20103,-9.4647 3.85705,-3.77881 8.56151,-6.58911 12.70896,-10.04074 8.60059,-5.0929 17.22309,-11.13807 26.88972,-14.19015 2.65815,-0.75399 5.32857,-1.54139 8.09734,-1.77683 2.73045,-0.23217 5.48024,0.0435 8.2097,0.1045 4.5659,0.26944 9.14268,0.66564 13.47738,2.24393 3.31484,1.18705 6.437,2.73948 9.54153,4.39779 0,0 -12.53371,7.92747 -12.53371,7.92747 z"
inkscape:connector-curvature="0" />
<g
id="g4720">
<path
inkscape:connector-curvature="0"
id="path4642"
d="m 54.50374,486.04959 c -26.390165,25.56362 -27.341898,65.87798 -24.064631,99.97277 11.993107,5.22466 -2.599555,14.79295 -10.242638,12.51221 -7.246531,-20.87858 -3.621725,-45.43001 -0.391637,-67.28527 5.433469,-19.01473 13.52169,-40.27945 34.698906,-45.19971 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4644"
d="m 35.597081,588.1748 c 13.502884,5.13147 27.146219,9.31458 42.367945,6.9997 15.169743,-3.61546 -0.137904,4.9064 -5.985133,8.73272 -12.471167,1.29415 -49.670268,-0.54483 -43.76622,-10.36862 2.460957,-1.78758 4.923202,-3.57769 7.383408,-5.3638 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4646"
d="m 88.777499,596.59635 c 9.054166,26.07345 36.109581,30.66196 59.877571,26.57515 9.94829,-3.77505 24.40863,-10.59914 6.38133,-0.95986 1.04801,0.41748 20.49004,-22.57442 34.94341,-25.14072 -2.36964,2.93998 -20.88283,20.57716 -30.51642,25.40421 -19.23492,11.82129 -46.62743,14.87289 -66.074331,3.89752 -10.239815,-11.72153 -26.589593,-23.08143 -4.61156,-29.7763 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4652"
d="m 196.81191,590.87171 c 46.43247,33.7524 111.72125,32.95154 160.36248,4.21437 28.22952,-16.66444 58.5592,-32.94922 92.43709,-31.63354 11.97767,-4.20253 47.18176,8.85812 38.51328,16.85761 -14.81387,13.9374 -27.59629,-17.04269 -45.99984,-8.51952 -36.43126,-2.07528 -68.77393,16.1684 -99.22013,33.67651 -46.98847,25.25313 -107.4669,25.62672 -152.90222,-3.40765 -13.29207,-3.59773 3.69717,-7.12585 6.80934,-11.18778 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4654"
d="m 498.82299,581.3394 c 10.23406,19.60411 26.56043,39.87218 51.41312,36.03074 17.22942,-1.67855 26.85734,-8.08322 18.05828,-4.09615 19.96905,-8.89835 25.48236,-31.80882 38.30935,-43.2653 18.4893,-9.09646 -6.2906,28.12119 -15.35633,30.08875 -20.31162,18.79639 -50.0598,33.69728 -77.44784,21.36271 -8.78754,-7.59676 -35.90473,-29.38856 -20.3215,-36.92619 1.78164,-1.06485 3.56328,-2.12971 5.34492,-3.19456 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4656"
d="m 600.42328,579.04701 c -4.36572,-26.5565 18.25355,-45.04875 27.6269,-67.50201 10.45425,-32.0831 3.48795,-66.42313 6.57099,-99.48684 -0.80873,-23.75221 -8.06702,-51.41427 -33.00872,-59.52254 0.83581,-11.15955 17.30163,-10.92515 23.75677,-1.43054 21.07416,15.19793 22.46552,47.03301 21.36977,71.17514 -3.3158,34.63453 6.88889,74.79665 -17.3768,103.97449 -16.05307,12.95934 -10.21185,38.85646 -22.13836,49.3272 -2.26677,1.15501 -4.5341,2.31016 -6.80055,3.4651 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4674"
d="m 324.59708,342.17479 c 43.82109,-16.03039 89.51388,-26.58569 134.97915,-36.88687 36.27292,-4.95771 72.696,2.4355 108.20592,9.29342 11.7503,2.95231 45.77148,14.75318 21.35472,23.0776 -15.93109,-10.669 -38.92732,-18.67503 -60.15014,-20.30199 -35.45905,-6.99004 -72.49017,-9.02573 -107.42082,2.01177 -34.89716,9.36989 -70.5856,16.34824 -104.01341,30.45834 -13.09295,4.99176 6.11615,-6.22601 7.04458,-7.65227 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4678"
d="m 293.40292,346.89184 c -22.06032,5.82845 14.54189,-11.95636 -6.50137,3.03759 -20.07611,21.89713 -30.56809,51.20528 -54.63535,69.72887 -9.1787,9.76111 -35.93242,22.4952 -16.55625,12.01251 -10.45246,6.4672 -29.77323,15.9601 -8.13604,4.07155 -14.95007,8.8271 -16.37985,8.98259 -2.09303,1.12885 -7.93116,6.84475 -25.21382,11.39319 -5.34451,2.4598 5.48775,0.49518 -22.06822,12.24715 -3.75234,0.68285 14.37003,-9.82889 -21.74211,12.19319 -0.66141,-0.098 17.39395,-10.21668 2.45707,0.34605 -4.11899,2.36616 7.61561,-4.68725 23.04213,-12.33255 5.54891,-2.94387 -12.46184,6.44976 32.41495,-18.24823 6.67701,-3.42522 3.96811,-0.37748 28.13337,-21.01154 39.11131,-35.99775 16.07063,-23.03 28.9714,-55.16654 59.07579,-61.70306 8.7856,-1.60336 -7.56651,6.91053 -8.61373,8.67974 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4680"
d="m 179.19114,456.8719 c -25.62567,-4.36778 -45.90996,14.28833 -69.60677,19.87005 -12.504602,7.13368 -53.407266,13.13693 -54.200532,6.6548 11.572269,-11.97532 29.777242,-3.4761 44.273189,-8.68432 24.960443,-5.20652 47.276163,-18.61122 71.429283,-26.09793 18.631,0.30257 26.85838,-4.38541 8.10483,8.2574 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4688"
d="m 239.70297,465.18477 c 40.9341,2.39263 82.79836,-3.60633 120.54393,-19.7326 -14.77078,7.19079 -13.57391,10.59915 -3.00674,-3.24891 9.61021,-20.86752 6.23587,-45.89981 -0.15764,-67.33474 -4.23316,-10.15035 19.28834,-17.90352 14.64201,0.0215 4.69964,22.52496 8.71608,49.96521 -6.50225,69.4299 -27.82092,19.7838 -63.24675,24.94839 -96.66412,28.60208 -10.5708,-1.39079 -55.16357,7.14793 -30.44292,-6.58364 l 1.15365,-0.83817 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4692"
d="m 408.36195,362.17839 c -17.4256,19.93235 -23.56669,59.09491 4.04619,73.40447 29.70011,7.45949 59.66123,-6.08622 88.92893,-10.83945 21.92381,-4.34416 52.01421,-3.01765 69.32956,-6.77451 -17.86106,17.15751 -45.21952,8.96627 -67.38056,12.95071 -32.9462,3.93041 -65.14016,18.86425 -98.67581,14.13611 -26.6246,-9.54667 -28.50953,-43.75228 -16.87191,-65.60578 3.33112,-11.27152 10.88629,-13.63318 20.6236,-17.27155 z"
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<path
style="fill:#000000;fill-opacity:0.85279188;stroke:#00ff00;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4696"
d="m 412.276,368.65661 c 4.3156,-2.20483 10.47595,-5.91994 -9.09024,5.30679 -0.66901,0.38387 1.32713,-0.78665 1.99936,-1.16483 14.99873,-8.43787 9.54042,-5.92958 17.01536,-9.24029 5.64827,-2.48267 11.73273,-3.67092 17.5818,-5.5376 6.78571,-1.89151 13.74878,-2.91257 20.64059,-4.28688 3.00571,-0.22949 5.91734,-1.06969 8.87614,-1.55842 2.8366,-0.46855 5.74593,-0.55571 8.61093,-0.7081 3.98208,-0.48013 8.00951,-0.42622 12.00005,-0.75446 0.95966,-0.0789 5.49649,-0.69134 6.44007,-0.8162 7.12113,-0.86188 14.02404,-2.83211 20.98753,-4.48651 7.21945,-1.96299 14.56339,-3.28887 21.94971,-4.41796 6.49827,-1.03669 13.06876,-1.35581 19.6364,-1.53706 5.00296,-0.2329 10.14125,0.37481 14.63359,2.74265 0.82883,0.43687 1.57956,1.00809 2.36934,1.51214 5.30883,3.79781 8.75601,9.05885 11.61016,14.81084 3.4388,7.99651 4.69568,16.68575 5.6176,25.27654 0.44663,6.20514 1.02226,12.42641 0.68928,18.65314 -0.1941,3.62986 -0.44003,4.9827 -0.90788,8.52434 -1.32213,6.0294 -3.11512,12.05767 -6.42398,17.31308 -0.94611,1.83184 -2.40975,3.26742 -3.70734,4.83396 0,0 -13.66113,5.67042 -13.66113,5.67042 v 0 c 1.19129,-1.02625 -0.0752,0.12034 1.26092,-1.32241 1.03904,-1.12199 2.30915,-1.94973 2.90313,-3.44134 3.81561,-4.91168 5.67096,-11.00259 7.21267,-16.95363 0.61465,-3.81083 0.8136,-4.50612 1.08148,-8.43601 0.42056,-6.16984 -0.0987,-12.35529 -0.5523,-18.50737 -0.92727,-8.39328 -2.2005,-16.90731 -5.67608,-24.67424 -2.84801,-5.46611 -6.18424,-10.54349 -11.40899,-14.03361 -0.73964,-0.44608 -1.44593,-0.95281 -2.21891,-1.33825 -4.41406,-2.20101 -9.37156,-2.49533 -14.21378,-2.30237 -6.50062,0.20055 -13.00075,0.57565 -19.43172,1.60179 -7.33563,1.14013 -14.62052,2.53502 -21.79877,4.45248 -7.02274,1.73938 -14.02758,3.63067 -21.22951,4.47692 -6.17873,0.77668 -12.38552,1.09675 -18.5938,1.5602 -5.81668,0.36196 -11.51654,1.38512 -17.26173,2.33097 -6.898,1.27228 -13.82231,2.40909 -20.56106,4.41765 -5.9227,1.74747 -11.97315,3.20034 -17.60715,5.78844 -5.95281,2.77112 -3.19217,1.5833 7.54503,-4.76988 0.61999,-0.36685 -1.23826,0.73661 -1.86108,1.09862 -5.32656,3.09608 -10.55795,6.38791 -16.05075,9.1914 0,0 11.59506,-9.27495 11.59506,-9.27495 z"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -1,17 +1,5 @@
<?xml version="1.0"?>
<!-- C182s Skylane
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<PropertyList>
<name>vehicle-dialog</name>
@ -110,7 +98,49 @@
</group>
<text>
<label>Advanced Steering</label>
</text>
<text>
<label>*Experimental</label>
</text>
<group>
<layout>hbox</layout>
<button>
<halign>left</halign>
<legend>Enable</legend>
<pref-width>150</pref-width>
<pref-height>28</pref-height>
<enable>
<and>
<not>
<property>/sim/freeze/replay-state</property>
</not>
</and>
</enable>
<binding>
<command>enableAdvancedSteering</command>
</binding>
</button>
<button>
<halign>left</halign>
<legend>Disable</legend>
<pref-width>150</pref-width>
<pref-height>28</pref-height>
<enable>
<and>
<not>
<property>/sim/freeze/replay-state</property>
</not>
</and>
</enable>
<binding>
<command>disableAdvancedSteering</command><!-- dialog-apply would apply values to all objects here - setlistener reacts on them in unfortunate way-->
</binding>
</button>
</group>
<hrule/>