Dashboard: refactor

This commit is contained in:
Sidi Liang 2020-07-31 15:30:31 +08:00
parent cb7656156b
commit 97637823b1
No known key found for this signature in database
GPG Key ID: 79F0A6B20B72F42F
2 changed files with 163 additions and 129 deletions

View File

@ -1,105 +1,173 @@
var smartInstruments = canvas.new({
"name": "smartInstruments", # The name is optional but allow for easier identification
"size": [1024, 1024], # Size of the underlying texture (should be a power of 2, required) [Resolution]
"view": [1509, 736], # Virtual resolution (Defines the coordinate system of the canvas [Dimensions]
# which will be stretched the size of the texture, required)
"mipmapping": 0 # Enable mipmapping (optional)
});
smartInstruments.addPlacement({"node": "instrumentScreen"});
var SmartInstruments = {
new: func(placement) {
var m = {
parents:[SmartInstruments],
instrumentCanvas: canvas.new({
"name": "smartInstruments", # The name is optional but allow for easier identification
"size": [1024, 1024], # Size of the underlying texture (should be a power of 2, required) [Resolution]
"view": [1509, 736], # Virtual resolution (Defines the coordinate system of the canvas [Dimensions]
# which will be stretched the size of the texture, required)
"mipmapping": 0 # Enable mipmapping (optional)
}),
};
m.group = m.instrumentCanvas.createGroup();#//Main group
m.welcomeGroup = m.instrumentCanvas.createGroup();
m.instrumentCanvas.addPlacement({"node": placement});
#Background
m.backgroundPath = "Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard0.png";
# create an image child for the texture
m.backgroundImage = m.group.createChild("image")
.setFile(m.backgroundPath)
.setTranslation(0, 0)
.setSize(1509, 736);
#center info
m.infoImagePath = ["Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard1.png",
"Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard2.png",
"Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard3.png"];
m.infoImage = m.group.createChild("image")
.setFile(m.infoImagePath[0])
.setTranslation(0, 0)
.setSize(1509, 736);
# Create a text element and set some values(Self test)
m.selfTestText = m.welcomeGroup.createChild("text", "optional-id-for element")
.setTranslation(530, 140) # The origin is in the top left corner
.setAlignment("left-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(50) # Set fontsize and optionally character aspect ratio
.setColor(1,0,0) # Text color
.setText("SELF TEST NORMAL")
.show();
#//speedometer
m.speedometer = m.group.createChild("text", "optional-id-for element")
.setTranslation(1205, 380) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("trueno-font/Trueno-wml2.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(148) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("--");
var group = smartInstruments.createGroup();
#//power
m.power = m.group.createChild("text", "optional-id-for element")
.setTranslation(295, 380) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("trueno-font/Trueno-wml2.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(148) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("--");
#//Drive Mode
m.driveMode = m.group.createChild("text", "optional-id-for element")
.setTranslation(780, 628) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(40) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("Performance");
#//Gear
m.gearDisplay = m.group.createChild("text", "optional-id-for element")
.setTranslation(940, 620) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(70) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("D");
#//Temperature
m.tempDisplay = m.group.createChild("text", "optional-id-for element")
.setTranslation(420, 220) # The origin is in the top left corner
.setAlignment("left-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(30) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("30 °C");
#//Time
m.timeDisplay = m.group.createChild("text", "optional-id-for element")
.setTranslation(1055, 215) # The origin is in the top left corner
.setAlignment("right-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(40) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("9:41");
m.init();
return m;
},
initialized: 0,
update: func(){
var currentSpeed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]");
var currentSpeedKMH = sprintf("%i", currentSpeed*1.852);
me.speedometer.updateText(currentSpeedKMH);
if(autospeed.active == 1){
me.speedometer.setColor(0.34, 0.63, 1);
}else{
me.speedometer.setColor(1, 1, 1);
}
me.power.updateText(sprintf("%i", engine.engine_1.activePower_kW));
if(engine.engine_1.direction == 1){
me.gearDisplay.updateText("D");
}else if(engine.engine_1.direction == -1){
me.gearDisplay.updateText("R");
}
if(engine.engine_1.mode == 1){
me.driveMode.updateText("Performance");
}else if(engine.engine_1.mode == 0.65){
me.driveMode.updateText("Comfort");
}else if(engine.engine_1.mode == 0.4){
me.driveMode.updateText("Low Power");
}
canvas.parsesvg(
group,
"Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard1.svg",
);
var tempC = props.getNode("/", 1).getValue("environment/temperature-degc");
me.tempDisplay.updateText(sprintf("%0.1f", tempC)~" °C");
var hour = props.getNode("/", 1).getValue("sim/time/real/hour");
var minute = props.getNode("/", 1).getValue("sim/time/real/minute");
if(minute < 10) minute = "0"~minute;
me.timeDisplay.updateText(hour~":"~minute);
#runtimeTextAdjust(timeDisplay);
},
#Background
var path = "Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard1.png";
# create an image child for the texture
var backgroundImage = group.createChild("image")
.setFile(path)
.setTranslation(0, 0)
.setSize(1509, 736);
updateTimer:nil,
init: func(){
if(me.updateTimer == nil) me.updateTimer = maketimer(0.1, func me.update());
me.group.hide();
me.welcomeGroup.hide();
me.initialized = 1;
},
startUp:func(){
me.welcomeGroup.show();
var startScreenTimer = maketimer(1, func me.startSequence());
startScreenTimer.singleShot = 1;
startScreenTimer.start();
},
startSequence: func(){
me.group.show();
me.speedometer.enableUpdate();
me.power.enableUpdate();
me.driveMode.enableUpdate();
me.gearDisplay.enableUpdate();
me.tempDisplay.enableUpdate();
me.timeDisplay.enableUpdate();
# Create a text element and set some values(Self test)
var selfTestText = group.createChild("text", "optional-id-for element")
.setTranslation(530, 140) # The origin is in the top left corner
.setAlignment("left-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(50) # Set fontsize and optionally character aspect ratio
.setColor(1,0,0) # Text color
.setText("SELF TEST NORMAL")
.show();
var timer2 = maketimer(2, func(){
me.welcomeGroup.hide();
});
timer2.singleShot = 1;
timer2.start();
selfTestText.hide();
if(!me.initialized) me.init();
me.updateTimer.start();
},
shutDown:func(){
if(me.updateTimer) me.updateTimer.stop();
me.group.hide();
me.welcomeGroup.hide();
}
};
#//speedometer
var speedometer = group.createChild("text", "optional-id-for element")
.setTranslation(1205, 380) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("trueno-font/Trueno-wml2.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(148) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("--");
speedometer.show();
speedometer.enableUpdate();
var smartInstruments = SmartInstruments.new("instrumentScreen");
#//power
var power = group.createChild("text", "optional-id-for element")
.setTranslation(295, 380) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("trueno-font/Trueno-wml2.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(148) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("--");
power.show();
power.enableUpdate();
#canvas.parsesvg(
# group,
# "Aircraft/followme_e-tron/Models/Interior/Instruments/Smart/dashboard.svg",
#);
#//Drive Mode
var driveMode = group.createChild("text", "optional-id-for element")
.setTranslation(780, 628) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(40) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("Performance");
driveMode.show();
driveMode.enableUpdate();
#//Gear
var gearDisplay = group.createChild("text", "optional-id-for element")
.setTranslation(940, 620) # The origin is in the top left corner
.setAlignment("center-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(70) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("D");
gearDisplay.show();
gearDisplay.enableUpdate();
#//Temperature
var tempDisplay = group.createChild("text", "optional-id-for element")
.setTranslation(420, 220) # The origin is in the top left corner
.setAlignment("left-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(30) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("30 °C");
tempDisplay.show();
tempDisplay.enableUpdate();
#//Time
var timeDisplay = group.createChild("text", "optional-id-for element")
.setTranslation(1055, 215) # The origin is in the top left corner
.setAlignment("right-center") # All values from osgText are supported (see $FG_ROOT/Docs/README.osgtext)
.setFont("ExoRegular-ymMe.ttf") # Fonts are loaded either from $AIRCRAFT_DIR/Fonts or $FG_ROOT/Fonts
.setFontSize(40) # Set fontsize and optionally character aspect ratio
.setColor(1,1,1) # Text color
.setText("9:41");
timeDisplay.show();
timeDisplay.enableUpdate();
#props.getNode("/dev/smart/size", 1).setValue(30);
#props.getNode("/dev/smart/x", 1).setValue(520);
#props.getNode("/dev/smart/y", 1).setValue(220);
@ -112,41 +180,6 @@ var runtimeTextAdjust = func(text){
text.setFontSize(siz);
}
var instrumentUpdate = func(){
var currentSpeed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]");
var currentSpeedKMH = sprintf("%i", currentSpeed*1.852);
speedometer.updateText(currentSpeedKMH);
if(autospeed.active == 1){
speedometer.setColor(0.34, 0.63, 1);
}else{
speedometer.setColor(1, 1, 1);
}
power.updateText(sprintf("%i", engine.engine_1.activePower_kW));
if(engine.engine_1.direction == 1){
gearDisplay.updateText("D");
}else if(engine.engine_1.direction == -1){
gearDisplay.updateText("R");
}
if(engine.engine_1.mode == 1){
driveMode.updateText("Performance");
}else if(engine.engine_1.mode == 0.65){
driveMode.updateText("Comfort");
}else if(engine.engine_1.mode == 0.4){
driveMode.updateText("Low Power");
}
var tempC = props.getNode("/", 1).getValue("environment/temperature-degc");
tempDisplay.updateText(sprintf("%0.1f", tempC)~" °C");
var hour = props.getNode("/", 1).getValue("sim/time/real/hour");
var minute = props.getNode("/", 1).getValue("sim/time/real/minute");
if(minute < 10) minute = "0"~minute;
timeDisplay.updateText(hour~":"~minute);
#runtimeTextAdjust(timeDisplay);
}
var updateTimer = maketimer(0.1, func instrumentUpdate());
updateTimer.start();
var window = canvas.Window.new([756,368],"dialog");
window.setCanvas(smartInstruments);
window.setCanvas(smartInstruments.instrumentCanvas);

View File

@ -239,6 +239,7 @@ var startEngine = func(my_engine){
if(signal){
print("Engine started");
followme.safety.init();
smartInstruments.smartInstruments.startUp();
#//followme.safety.enableFrontRadar();
if(props.getNode("systems/welcome-message", 1).getValue() == 1){
props.getNode("/sim/messages/copilot", 1).setValue("Beijing di san tsui jiao tong wei ti xing nin, Dao lu tsian wan tiao, ann tsuan di yi tiao, xing che bull gui fun, tsin ren liang hang lei");