diff --git a/Models/followmeEV.xml b/Models/followmeEV.xml index 4d6e9e4..60193d7 100644 --- a/Models/followmeEV.xml +++ b/Models/followmeEV.xml @@ -122,7 +122,7 @@ - sim/multiplay/generic/string[0] + sim/multiplay/generic/string[5] NONE diff --git a/Models/plate/plate.xml b/Models/plate/plate.xml index b0a9ba6..2b80bba 100644 --- a/Models/plate/plate.xml +++ b/Models/plate/plate.xml @@ -12,6 +12,13 @@ + material + face + sim/multiplay/generic + string[5] + + + diff --git a/Nasal/plate.nas b/Nasal/plate.nas new file mode 100644 index 0000000..4274b49 --- /dev/null +++ b/Nasal/plate.nas @@ -0,0 +1,54 @@ +#Custom plate selection system by Sidi Liang for follow me EV +#Contact: sidi.liang@gmail.com +# +#Instructions: This code scans the Models/plate/texture folder +#whenever the vehicle config dialog (config-dialog.xml) is opened. +#To add an plate, just place the new plate texture file (must be .png +#format) to that folder and it will show up in the dialog. + +var path = props.getNode("/",1).getValue("sim/aircraft-dir") ~ '/Models/plate/texture'; +var scan = func(){ + var data = []; + var files = directory(path); + if (size(files)) { + foreach (var file; files) { + if (substr(file, -4) != ".png") + continue; + var n = io.read_properties(path ~ file); + append(data, [substr(file, 0, size(file) - 4), path ~ file]); + } + #me.data = sort(me.data, func(a, b) num(a[1]) == nil or num(b[1]) == nil + # ? cmp(a[1], b[1]) : a[1] - b[1]); + } + return data; +} +var updateList = func(){ + var allPlates = scan(); + var data = props.globals.getNode("/sim/gui/dialogs/vehicle_config/dialog/group[3]/combo/", 1); + data.removeChildren("value"); + data.getChild("value", 0, 1).setValue("NONE"); + forindex(var i; allPlates){ + data.getChild("value", i+1, 1).setValue(allPlates[i][0]); + } +} +var Plate = { + new: func() { + return { parents:[Plate]}; + }, + plateNameNode: props.getNode("systems/plate/name", 1), + plateFileNode: props.getNode("systems/plate/file", 1), + multiplayerNameNode: props.getNode("sim/multiplay/generic/string[4]", 1), + multiplayerFileNode: props.getNode("sim/multiplay/generic/string[5]", 1), + name: "", + file: "", + changePlate: func(name){ + #NONE for uninstalling the plate + me.name = name; + me.file = name~".png"; + me.update(); + }, + update: func(){ + me.plateNameNode.setValue(me.name); + me.plateFileNode.setValue(me.file); + }, +}; diff --git a/Nasal/systems.nas b/Nasal/systems.nas index 00bf844..18f5539 100644 --- a/Nasal/systems.nas +++ b/Nasal/systems.nas @@ -2,6 +2,9 @@ #### Gijs de Rooy (Original) #### #### Sidi Liang #### +props.getNode("/sim/gui/dialogs/vehicle_config/dialog",1); +var configDialog = gui.Dialog.new("/sim/gui/dialogs/vehicle_config/dialog", "Aircraft/followme_e-tron/gui/dialogs/config-dialog.xml"); + var liveryFuse = { init: func(dir, nameprop = "sim/model/livery/name", sortprop = nil) { me.parents = [gui.OverlaySelector.new("Select Livery", dir, nameprop, @@ -91,7 +94,8 @@ props.getNode("systems/welcome-message", 1).setValue(0); props.getNode("systems/display-speed", 1).setValue(0); props.getNode("systems/speedometer/type", 1).setValue("Type_A"); props.getNode("systems/battery-gauge/type", 1).setValue("Type_A"); -props.getNode("systems/plate", 1).setValue("NONE"); +props.getNode("systems/plate/file", 1).setValue("NONE"); +props.getNode("systems/plate/name", 1).setValue("NONE"); props.getNode("controls/lighting/headlight-als", 1).setValue(0); props.getNode("sim/remote/pilot-callsign", 1).setValue(""); props.getNode("/systems/codriver-enable", 1).setValue(0); @@ -432,7 +436,7 @@ var brakesABS = func(){ var absTimer = maketimer(0.001, brakesABS); -var brakeWithABS = func(){ #//Doesn't seems to work as it seems that jsbsim wheels never overbrake? +var brakeWithABS = func(){ #//Doesn't seems to work because it seems that jsbsim wheels never overbrake? var brakeCmd = props.getNode("/",1).getValue("/controls/gear/brake-cmd"); if(brakeCmd){ absTimer.start(); diff --git a/followme_e-tron-set.xml b/followme_e-tron-set.xml index 6ef4ab9..a1bc0d6 100644 --- a/followme_e-tron-set.xml +++ b/followme_e-tron-set.xml @@ -445,8 +445,8 @@ - dialog-show - config-dialog + nasal + @@ -550,10 +550,12 @@ - + + + @@ -803,6 +805,7 @@ Aircraft/followme_e-tron/Nasal/electrical.nas Aircraft/followme_e-tron/Nasal/systems.nas + Aircraft/followme_e-tron/Nasal/plate.nas Aircraft/followme_e-tron/Nasal/steering.nas Aircraft/followme_e-tron/Nasal/radar.nas diff --git a/gui/dialogs/config-dialog.xml b/gui/dialogs/config-dialog.xml index d041fbe..e1981ff 100755 --- a/gui/dialogs/config-dialog.xml +++ b/gui/dialogs/config-dialog.xml @@ -8,6 +8,24 @@ false true + + + followme.updateList(); + #print(cmdarg().getPath()); + var nameNode = props.getNode("systems/plate/name", 1); + var fileNode = props.getNode("systems/plate/file", 1); + var lis = setlistener(nameNode, func(){ + if(nameNode.getValue() != "NONE"){ + fileNode.setValue("texture/" ~ nameNode.getValue() ~ ".png"); + }else{ + fileNode.setValue(nameNode.getValue()); + } + }); + + + removelistener(lis); + + hbox @@ -112,15 +130,8 @@ 120 left Plate Selection - /systems/plate - NONE - Airport0 - JLH0762 - JAD00762 - YBD00404 - YAD07749 - SAD00818 - JAD00066 + /systems/plate/name + $value dialog-apply plateSelection diff --git a/gui/dialogs/vehicle-dialog.xml b/gui/dialogs/vehicle-dialog.xml index 14d878d..aee8769 100755 --- a/gui/dialogs/vehicle-dialog.xml +++ b/gui/dialogs/vehicle-dialog.xml @@ -280,8 +280,8 @@ - dialog-show - config-dialog> + nasal +