Showing 7 changed files with 2366 additions and 14 deletions
-5
Nasal/core.nas
... ...
@@ -1,8 +1,3 @@
1
-var flightdeck = {
2
-    'MFD'         : nil,
3
-    'PFD'         : nil,
4
-};
5
-
6 1
 data = { # set of data common to all devices
7 2
     roll : 0,
8 3
     pitch : 0,
+2 -2
Nasal/display.nas
... ...
@@ -15,7 +15,7 @@ var displayClass = {
15 15
                 "parent": role
16 16
         });
17 17
         m.display.setColorBackground(0,0,0);
18
-        m.role = role;
18
+        m.role = substr(role, 0, 3);
19 19
         m.device = device;
20 20
         m.screenElements = {};
21 21
 
... ...
@@ -73,7 +73,7 @@ var displayClass = {
73 73
     _showInitProgress : func (p,t) {
74 74
 #{{{
75 75
         p.setText(t);
76
-        if (zkv.getNode(me.role ~ 'init').getValue() != 0) {
76
+        if (zkv.getNode(me.device.role ~ 'init').getValue() != 0) {
77 77
             if (size(t) >= 10) t = '';
78 78
             settimer(func { me._showInitProgress(p, t ~ '.'); }, 0.1);
79 79
         }
+1 -1
Nasal/softkeys.nas
... ...
@@ -3,7 +3,7 @@ var softkeysClass = {
3 3
         var m = { parents: [ softkeysClass ] };
4 4
         m.node = node;
5 5
         m.device = device;
6
-        m.role = role;
6
+        m.role = substr(role, 0, 3);
7 7
         m.path = [];
8 8
         return m;
9 9
     },
+8 -6
README.md
... ...
@@ -40,8 +40,6 @@ This is GPL-2 license though :)
40 40
 # Objectives
41 41
 There is no intention to provide a fully qualified G1000 in order to train or so, but this should be possible to be done from the zkv1000.
42 42
 
43
-And it is intented to be a two displays device (PFD/MFD-Reversionary PFD), even if it shouldn't be that hard to make it three displays device (2 PFD, one MFD-Reversionnary PFD)
44
-
45 43
 I'm particulary looking at these points:
46 44
 
47 45
 1.  easy to implement new features
... ...
@@ -73,6 +71,7 @@ Please report bug at <seb.marque@free.fr>.
73 71
   * windows management: selectable items ![][done], modifiable items ![][done], scrolling ![][done]
74 72
   * display of V-speeds in ruler: Vx, Vy, Vr and Vglide (specific for aircraft, see installation instruction)
75 73
   * some aircraft specific data to retrieve from aircraft XML files (VNE, etc)
74
+  * possibility to add a copilot's PFD
76 75
 * ![][90%]
77 76
   * Bearing needs some checks to be sure it shows the correct information
78 77
   * XPDR: emergency code depending of the country (eg.: 1200 for US, 7700 for Europe), should be set in settings
... ...
@@ -104,7 +103,6 @@ Please report bug at <seb.marque@free.fr>.
104 103
   * VS guidance
105 104
   * VNAV
106 105
   * tutorials
107
-  * copilot's PFD
108 106
   * many more...
109 107
 
110 108
 # Installation
... ...
@@ -148,7 +146,7 @@ In the definition of your flightdeck (here are the values for the installation i
148 146
 put it everywhere you want to
149 147
 
150 148
         <model>
151
-            <path>Aircraft/Instruments-3d/zkv1000/pfd.xml</path>
149
+            <path>Aircraft/Instruments-3d/zkv1000/pfd-pilot.xml</path>
152 150
             <offsets>
153 151
                 <x-m> -0.023 </x-m>
154 152
                 <y-m> -0.235 </y-m>
... ...
@@ -165,8 +163,12 @@ put it everywhere you want to
165 163
             </offsets>
166 164
         </model>
167 165
 
168
-You can put only one of the two, if only the MFD is added into your aircraft, none of the PFD components will be available (neither the reversionnary mode). Only the corresponding Nasal code will be lighted up.
169
-In the near future it will be possible to add a copilot's PFD using another XML model.
166
+You can put as many devices as wanted, but generally they are two (PFD+MFD) or three (2 PFD+ 1 PFD), can be only one which is useful when you just want the PFD or the MFD in your cockpit.
167
+The device are identified by a name, which should be unique unless they won't be independant.
168
+This name is set by one of the property in the XML model file (`instrumentation/zkv1000/<NAME>/status`), which is a property telling if the device is switched off or not (or in reversionnary mode, later).
169
+Actually there are only two "types of display": MFD or PFD, which is known by the first 3 letters of the name (case sensitive!)
170
+Other devices as keyboard or non-display can also exists, as long as they don't have a `status` property...
171
+Not sur I'm clear on this point though :)
170 172
 
171 173
 ## Switch it up
172 174
 You can use the multikey (souvenirs, thanks to Melchior having that much expended this feature years ago :)) service by typing:
+1175
pfd-copilot.xml
... ...
@@ -0,0 +1,1175 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+
3
+<PropertyList>
4
+
5
+  <path>Models/GDU-104X.ac</path>
6
+
7
+  <animation>
8
+    <type>material</type>
9
+    <object-name>screw.000</object-name>
10
+    <object-name>screw.001</object-name>
11
+    <object-name>screw.002</object-name>
12
+    <object-name>screw.003</object-name>
13
+    <object-name>Lamp1</object-name>
14
+    <object-name>Lamp2</object-name>
15
+    <object-name>Lamp3</object-name>
16
+    <object-name>Lamp4</object-name>
17
+    <texture-prop>texture</texture-prop>
18
+    <texture>Textures/GDU-104X.png</texture>
19
+  </animation>
20
+
21
+  <animation>
22
+    <inherits-from>Effects/model-combined-deferred</inherits-from>
23
+    <parameters>
24
+      <lightmap-enabled type="int">1</lightmap-enabled>
25
+      <lightmap-factor><use>instrumentation/zkv1000/Lightmap</use></lightmap-factor>
26
+      <texture n="3">
27
+        <image>Textures/GDU-104X.lightmap.png</image>
28
+      </texture>
29
+    </parameters>
30
+    <type>material</type>
31
+    <object-name>Panel</object-name>
32
+    <object-name>AsSwitchNav</object-name>
33
+    <object-name>NavOuter</object-name>
34
+    <object-name>NavInner</object-name>
35
+    <object-name>HDG</object-name>
36
+    <object-name>AltOuter</object-name>
37
+    <object-name>AltInner</object-name>
38
+    <object-name>VolNAV</object-name>
39
+    <object-name>VolCOM</object-name>
40
+    <object-name>AsSwitchCOM</object-name>
41
+    <object-name>ComOuter</object-name>
42
+    <object-name>ComInner</object-name>
43
+    <object-name>CRS</object-name>
44
+    <object-name>BARO</object-name>
45
+    <object-name>PAN</object-name>
46
+    <object-name>PANUp</object-name>
47
+    <object-name>PANLeft</object-name>
48
+    <object-name>PANRight</object-name>
49
+    <object-name>PANDown</object-name>
50
+    <object-name>DirectTo</object-name>
51
+    <object-name>MENU</object-name>
52
+    <object-name>FPL</object-name>
53
+    <object-name>PROC</object-name>
54
+    <object-name>CLR</object-name>
55
+    <object-name>ENT</object-name>
56
+    <object-name>FmsOuter</object-name>
57
+    <object-name>FmsInner</object-name>
58
+    <object-name>SoftKey.000</object-name>
59
+    <object-name>SoftKey.001</object-name>
60
+    <object-name>SoftKey.002</object-name>
61
+    <object-name>SoftKey.003</object-name>
62
+    <object-name>SoftKey.004</object-name>
63
+    <object-name>SoftKey.005</object-name>
64
+    <object-name>SoftKey.006</object-name>
65
+    <object-name>SoftKey.007</object-name>
66
+    <object-name>SoftKey.008</object-name>
67
+    <object-name>SoftKey.009</object-name>
68
+    <object-name>SoftKey.010</object-name>
69
+    <object-name>SoftKey.011</object-name>
70
+    <object-name>Cover</object-name>
71
+    <texture-prop>texture</texture-prop>
72
+    <texture>Textures/GDU-104X.png</texture>
73
+  </animation>
74
+
75
+  <effect>
76
+    <inherits-from>Effects/model-combined-deferred</inherits-from>
77
+    <parameters>
78
+      <lightmap-enabled type="int">1</lightmap-enabled>
79
+      <lightmap-factor><use>instrumentation/zkv1000/Lightmap</use></lightmap-factor>
80
+      <texture n="3">
81
+        <image>Textures/GDU-104X.lightmap.png</image>
82
+      </texture>
83
+    </parameters>
84
+    <object-name>Panel</object-name>
85
+    <object-name>AsSwitchNav</object-name>
86
+    <object-name>NavOuter</object-name>
87
+    <object-name>NavInner</object-name>
88
+    <object-name>HDG</object-name>
89
+    <object-name>AltOuter</object-name>
90
+    <object-name>AltInner</object-name>
91
+    <object-name>VolNAV</object-name>
92
+    <object-name>VolCOM</object-name>
93
+    <object-name>AsSwitchCOM</object-name>
94
+    <object-name>ComOuter</object-name>
95
+    <object-name>ComInner</object-name>
96
+    <object-name>CRS</object-name>
97
+    <object-name>BARO</object-name>
98
+    <object-name>PAN</object-name>
99
+    <object-name>PANUp</object-name>
100
+    <object-name>PANLeft</object-name>
101
+    <object-name>PANRight</object-name>
102
+    <object-name>PANDown</object-name>
103
+    <object-name>DirectTo</object-name>
104
+    <object-name>MENU</object-name>
105
+    <object-name>FPL</object-name>
106
+    <object-name>PROC</object-name>
107
+    <object-name>CLR</object-name>
108
+    <object-name>ENT</object-name>
109
+    <object-name>FmsOuter</object-name>
110
+    <object-name>FmsInner</object-name>
111
+    <object-name>SoftKey.000</object-name>
112
+    <object-name>SoftKey.001</object-name>
113
+    <object-name>SoftKey.002</object-name>
114
+    <object-name>SoftKey.003</object-name>
115
+    <object-name>SoftKey.004</object-name>
116
+    <object-name>SoftKey.005</object-name>
117
+    <object-name>SoftKey.006</object-name>
118
+    <object-name>SoftKey.007</object-name>
119
+    <object-name>SoftKey.008</object-name>
120
+    <object-name>SoftKey.009</object-name>
121
+    <object-name>SoftKey.010</object-name>
122
+    <object-name>SoftKey.011</object-name>
123
+    <object-name>Cover</object-name>
124
+  </effect>
125
+
126
+  <animation>
127
+    <object-name>Cover</object-name>
128
+    <object-name>AP.L0</object-name>
129
+    <object-name>AP.L1</object-name>
130
+    <object-name>AP.L2</object-name>
131
+    <object-name>AP.L3</object-name>
132
+    <object-name>AP.L4</object-name>
133
+    <object-name>AP.L5</object-name>
134
+    <object-name>AP.R0</object-name>
135
+    <object-name>AP.R1</object-name>
136
+    <object-name>AP.R2</object-name>
137
+    <object-name>AP.R3</object-name>
138
+    <object-name>AP.R4</object-name>
139
+    <object-name>AP.R5</object-name>
140
+    <type>select</type>
141
+    <condition>
142
+      <equals>
143
+        <value type="bool">false</value>
144
+        <value type="bool">true</value>
145
+      </equals>
146
+    </condition>
147
+  </animation>
148
+
149
+  <animation>
150
+    <name>PFD-copilot</name>
151
+    <object-name>Screen</object-name>
152
+  </animation>
153
+
154
+  <animation>
155
+    <type>material</type>
156
+    <object-name>Screen</object-name>
157
+    <emission>
158
+      <red>1</red>
159
+      <green>1</green>
160
+      <blue>1</blue>
161
+      <factor-prop>instrumentation/zkv1000/display-brightness-norm</factor-prop>
162
+    </emission>
163
+  </animation>
164
+
165
+  <animation>
166
+    <type>pick</type>
167
+    <object-name>VolNAV</object-name>
168
+    <action>
169
+      <button>0</button>
170
+      <binding>
171
+        <condition>
172
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
173
+        </condition>
174
+        <command>property-toggle</command>
175
+        <property>/instrumentation/zkv1000/radios/nav-ident</property>
176
+      </binding>
177
+    </action>
178
+  </animation>
179
+  <animation>
180
+    <type>knob</type>
181
+    <object-name>VolNAV</object-name>
182
+    <action>
183
+      <binding>
184
+        <condition>
185
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
186
+        </condition>
187
+        <command>property-adjust</command>
188
+        <property>/instrumentation/zkv1000/radios/nav-volume</property>
189
+        <factor>0.05</factor>
190
+        <min>0</min>
191
+        <max>1</max>
192
+        <wrap>false</wrap>
193
+      </binding>
194
+    </action>
195
+  </animation>
196
+
197
+  <animation>
198
+    <type>pick</type>
199
+    <object-name>AsSwitchNav</object-name>
200
+    <action>
201
+      <button>0</button>
202
+      <binding>
203
+        <condition>
204
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
205
+        </condition>
206
+       <command>nasal</command>
207
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.AsSwitchNAV();</script>
208
+      </binding>
209
+    </action>
210
+  </animation>
211
+
212
+  <animation>
213
+    <type>pick</type>
214
+    <object-name>NavInner</object-name>
215
+    <action>
216
+      <button>0</button>
217
+      <binding>
218
+        <condition>
219
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
220
+        </condition>
221
+        <command>property-toggle</command>
222
+        <property>/instrumentation/zkv1000/radios/nav-tune</property>
223
+      </binding>
224
+    </action>
225
+  </animation>
226
+  <animation>
227
+    <type>knob</type>
228
+    <object-name>NavInner</object-name>
229
+    <action>
230
+      <binding>
231
+        <condition>
232
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
233
+        </condition>
234
+        <command>property-adjust</command>
235
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
236
+        <factor>0.05</factor>
237
+        <min>108.000</min>
238
+        <max>118.000</max>
239
+        <wrap>true></wrap>
240
+      </binding>
241
+      <binding>
242
+        <condition>
243
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
244
+        </condition>
245
+        <command>nasal</command>
246
+        <script>
247
+          foreach (var c; keys(zkv1000.flightdeck))
248
+            if (zkv1000.flightdeck[c] != nil)
249
+              zkv1000.flightdeck[c].display.updateNAV({set:1});
250
+        </script>
251
+      </binding>
252
+    </action>
253
+    <shift-action>
254
+      <binding>
255
+        <condition>
256
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
257
+        </condition>
258
+        <command>property-adjust</command>
259
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
260
+        <factor>0.50</factor>
261
+      </binding>
262
+      <binding>
263
+        <condition>
264
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
265
+        </condition>
266
+        <command>nasal</command>
267
+        <script>
268
+          foreach (var c; keys(zkv1000.flightdeck))
269
+            if (zkv1000.flightdeck[c] != nil)
270
+              zkv1000.flightdeck[c].display.updateNAV({set:1});
271
+        </script>
272
+      </binding>
273
+    </shift-action>
274
+  </animation>
275
+
276
+  <animation>
277
+    <type>pick</type>
278
+    <object-name>HDG</object-name>
279
+    <action>
280
+      <button>0</button>
281
+      <binding>
282
+        <condition>
283
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
284
+        </condition>
285
+        <command>property-assign</command>
286
+        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
287
+        <property>/orientation/heading-magnetic-deg</property>
288
+      </binding>
289
+    </action>
290
+  </animation>
291
+  <animation>
292
+    <type>knob</type>
293
+    <object-name>HDG</object-name>
294
+    <property>/instrumentation/zkv1000/PFD-copilot/knobs/HDG</property>
295
+    <center>
296
+      <x-m>0.0025172 </x-m>
297
+      <y-m>-0.1220634</y-m>
298
+      <z-m>0.0169178 </z-m>
299
+    </center>
300
+    <axis>
301
+      <x>1</x>
302
+      <y>0</y>
303
+      <z>0</z>
304
+    </axis>
305
+    <action>
306
+      <binding>
307
+       <command>property-adjust</command>
308
+       <property>/instrumentation/zkv1000/PFD-copilot/knobs/HDG</property>
309
+       <factor>10</factor>
310
+       <min>0</min>
311
+       <max>359</max>
312
+       <wrap>true</wrap>
313
+      </binding>
314
+      <binding>
315
+        <condition>
316
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
317
+        </condition>
318
+       <command>property-adjust</command>
319
+       <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
320
+       <factor>1</factor>
321
+       <min>0</min>
322
+       <max>359</max>
323
+       <wrap>true</wrap>
324
+      </binding>
325
+    </action>
326
+  </animation>
327
+
328
+  <animation>
329
+    <type>pick</type>
330
+    <object-name>AltInner</object-name>
331
+    <action>
332
+      <button>0</button>
333
+      <binding>
334
+        <condition>
335
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
336
+        </condition>
337
+        <command>nasal</command>
338
+        <script>zkv1000.flightdeck['PFD-copilot'].buttons.ALT();</script>
339
+      </binding>
340
+    </action>
341
+  </animation>
342
+  <animation>
343
+    <type>knob</type>
344
+    <object-name>AltInner</object-name>
345
+    <action>
346
+      <binding>
347
+        <condition>
348
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
349
+        </condition>
350
+       <command>property-adjust</command>
351
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
352
+       <factor>10</factor>
353
+       <min>0</min>
354
+       <max>16000</max>
355
+       <wrap>false</wrap>
356
+      </binding>
357
+    </action>
358
+    <shift-action>
359
+      <binding>
360
+        <condition>
361
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
362
+        </condition>
363
+       <command>property-adjust</command>
364
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
365
+       <factor>100</factor>
366
+      </binding>
367
+    </shift-action>
368
+  </animation>
369
+
370
+  <animation>
371
+    <type>pick</type>
372
+    <object-name>VolCOM</object-name>
373
+    <action>
374
+      <button>0</button>
375
+      <binding>
376
+        <condition>
377
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
378
+        </condition>
379
+        <command>property-toggle</command>
380
+        <property>/instrumentation/zkv1000/comm-add-noise</property>
381
+      </binding>
382
+    </action>
383
+  </animation>
384
+  <animation>
385
+    <type>knob</type>
386
+    <object-name>VolCOM</object-name>
387
+    <action>
388
+      <binding>
389
+        <condition>
390
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
391
+        </condition>
392
+        <command>property-adjust</command>
393
+        <property>/instrumentation/zkv1000/radios/comm-volume</property>
394
+        <factor>0.05</factor>
395
+        <min>0</min>
396
+        <max>1</max>
397
+        <wrap>false</wrap>
398
+      </binding>
399
+    </action>
400
+  </animation>
401
+
402
+  <animation>
403
+    <type>pick</type>
404
+    <object-name>AsSwitchCOM</object-name>
405
+    <action>
406
+      <button>0</button>
407
+      <binding>
408
+        <condition>
409
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
410
+        </condition>
411
+       <command>nasal</command>
412
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.AsSwitchCOM(1);</script>
413
+      </binding>
414
+      <mod-up>
415
+        <binding>
416
+          <condition>
417
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
418
+          </condition>
419
+          <command>nasal</command>
420
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.AsSwitchCOM(0);</script>
421
+        </binding>
422
+      </mod-up>
423
+    </action>
424
+  </animation>
425
+
426
+  <animation>
427
+    <type>pick</type>
428
+    <object-name>ComInner</object-name>
429
+    <action>
430
+      <button>0</button>
431
+      <binding>
432
+        <condition>
433
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
434
+        </condition>
435
+        <command>property-toggle</command>
436
+        <property>/instrumentation/zkv1000/radios/comm-tune</property>
437
+      </binding>
438
+    </action>
439
+  </animation>
440
+  <animation>
441
+    <type>knob</type>
442
+    <object-name>ComInner</object-name>
443
+    <action>
444
+      <binding>
445
+        <condition>
446
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
447
+        </condition>
448
+        <command>property-adjust</command>
449
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
450
+        <factor>0.025</factor>
451
+        <min>118.000</min>
452
+        <max>137.975</max>
453
+        <wrap>true</wrap>
454
+      </binding>
455
+      <binding>
456
+        <condition>
457
+          <property>/instrumentation/zkv1000/MFD/status</property>
458
+        </condition>
459
+        <command>nasal</command>
460
+        <script>
461
+          foreach (var c; keys(zkv1000.flightdeck))
462
+            if (zkv1000.flightdeck[c] != nil)
463
+              zkv1000.flightdeck[c].display.updateCOMM({set:1});
464
+        </script>
465
+      </binding>
466
+    </action>
467
+    <shift-action>
468
+      <binding>
469
+        <condition>
470
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
471
+        </condition>
472
+        <command>property-adjust</command>
473
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
474
+        <factor>0.1</factor>
475
+      </binding>
476
+      <binding>
477
+        <condition>
478
+          <property>/instrumentation/zkv1000/MFD/status</property>
479
+        </condition>
480
+        <command>nasal</command>
481
+        <script>
482
+          foreach (var c; keys(zkv1000.flightdeck))
483
+            if (zkv1000.flightdeck[c] != nil)
484
+              zkv1000.flightdeck[c].display.updateCOMM({set:1});
485
+        </script>
486
+      </binding>
487
+    </shift-action>
488
+  </animation>
489
+
490
+  <animation>
491
+    <type>knob</type>
492
+    <object-name>CRS</object-name>
493
+    <property>/instrumentation/zkv1000/PFD-copilot/knobs/CRS</property>
494
+    <center>
495
+      <x-m>0.0038567</x-m>
496
+      <y-m>0.1222390</y-m>
497
+      <z-m>0.0171226</z-m>
498
+    </center>
499
+    <axis>
500
+      <x>1</x>
501
+      <y>0</y>
502
+      <z>0</z>
503
+    </axis>
504
+    <action>
505
+      <binding>
506
+        <command>property-adjust</command>
507
+        <property>/instrumentation/zkv1000/PFD-copilot/knobs/CRS</property>
508
+        <factor>10</factor>
509
+        <min>0</min>
510
+        <max>359</max>
511
+        <wrap>true</wrap>
512
+      </binding>
513
+      <binding>
514
+        <condition>
515
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
516
+        </condition>
517
+        <command>property-adjust</command>
518
+        <property>/instrumentation/zkv1000/cdi/course</property>
519
+        <factor>1</factor>
520
+        <min>0</min>
521
+        <max>359</max>
522
+        <wrap>true</wrap>
523
+      </binding>
524
+    </action>
525
+  </animation>
526
+
527
+  <animation>
528
+    <type>knob</type>
529
+    <object-name>BARO</object-name>
530
+    <action>
531
+      <binding>
532
+        <condition>
533
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
534
+        </condition>
535
+       <command>property-adjust</command>
536
+       <property>/instrumentation/altimeter/setting-inhg</property>
537
+       <factor>0.01</factor>
538
+       <min>28.500</min>
539
+       <max>33.000</max>
540
+       <wrap>false</wrap>
541
+      </binding>
542
+    </action>
543
+    <shift-action>
544
+      <binding>
545
+        <condition>
546
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
547
+        </condition>
548
+       <command>property-adjust</command>
549
+       <property>/instrumentation/altimeter/setting-inhg</property>
550
+       <factor>0.10</factor>
551
+      </binding>
552
+    </shift-action>
553
+  </animation>
554
+
555
+  <animation>
556
+    <type>pick</type>
557
+    <object-name>PAN</object-name>
558
+    <action>
559
+      <button>0</button>
560
+      <binding>
561
+        <condition>
562
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
563
+        </condition>
564
+        <command>nasal</command>
565
+        <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN({xdir: 1, ydir: 1});</script>
566
+      </binding>
567
+      <mod-up>
568
+        <binding>
569
+          <condition>
570
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
571
+          </condition>
572
+          <command>nasal</command>
573
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN();</script>
574
+        </binding>
575
+      </mod-up>
576
+    </action>
577
+    <action>
578
+      <button>3</button>
579
+      <binding>
580
+        <condition>
581
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
582
+        </condition>
583
+       <command>nasal</command>
584
+       <script>zkv1000.flightdeck['PFD-copilot'].knobs.PAN(1);</script>
585
+      </binding>
586
+    </action>
587
+    <action>
588
+      <button>4</button>
589
+      <binding>
590
+        <condition>
591
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
592
+        </condition>
593
+       <command>nasal</command>
594
+       <script>zkv1000.flightdeck['PFD-copilot'].knobs.PAN(-1);</script>
595
+      </binding>
596
+    </action>
597
+  </animation>
598
+
599
+  <animation>
600
+    <type>pick</type>
601
+    <object-name>PANUp</object-name>
602
+    <action>
603
+      <button>0</button>
604
+      <binding>
605
+        <condition>
606
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
607
+        </condition>
608
+       <command>nasal</command>
609
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN({ydir: 1});</script>
610
+      </binding>
611
+      <mod-up>
612
+        <binding>
613
+          <condition>
614
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
615
+          </condition>
616
+          <command>nasal</command>
617
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN();</script>
618
+        </binding>
619
+      </mod-up>
620
+    </action>
621
+  </animation>
622
+  <animation>
623
+    <type>pick</type>
624
+    <object-name>PANLeft</object-name>
625
+    <action>
626
+      <button>0</button>
627
+      <binding>
628
+        <condition>
629
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
630
+        </condition>
631
+       <command>nasal</command>
632
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN({xdir: -1});</script>
633
+      </binding>
634
+      <mod-up>
635
+        <binding>
636
+          <condition>
637
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
638
+          </condition>
639
+          <command>nasal</command>
640
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN();</script>
641
+        </binding>
642
+      </mod-up>
643
+    </action>
644
+  </animation>
645
+  <animation>
646
+    <type>pick</type>
647
+    <object-name>PANRight</object-name>
648
+    <action>
649
+      <button>0</button>
650
+      <binding>
651
+        <condition>
652
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
653
+        </condition>
654
+       <command>nasal</command>
655
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN({xdir: 1});</script>
656
+      </binding>
657
+      <mod-up>
658
+        <binding>
659
+          <condition>
660
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
661
+          </condition>
662
+          <command>nasal</command>
663
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN();</script>
664
+        </binding>
665
+      </mod-up>
666
+    </action>
667
+  </animation>
668
+  <animation>
669
+    <type>pick</type>
670
+    <object-name>PANDown</object-name>
671
+    <action>
672
+      <button>0</button>
673
+      <binding>
674
+        <condition>
675
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
676
+        </condition>
677
+       <command>nasal</command>
678
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN({ydir: -1});</script>
679
+      </binding>
680
+      <mod-up>
681
+        <binding>
682
+          <condition>
683
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
684
+          </condition>
685
+          <command>nasal</command>
686
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PAN();</script>
687
+        </binding>
688
+      </mod-up>
689
+    </action>
690
+  </animation>
691
+
692
+  <animation>
693
+    <type>pick</type>
694
+    <object-name>DirectTo</object-name>
695
+    <action>
696
+      <button>0</button>
697
+      <binding>
698
+        <condition>
699
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
700
+        </condition>
701
+       <command>nasal</command>
702
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.DirectTo(1);</script>
703
+      </binding>
704
+      <mod-up>
705
+        <binding>
706
+          <condition>
707
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
708
+          </condition>
709
+          <command>nasal</command>
710
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.DirectTo(0);</script>
711
+        </binding>
712
+      </mod-up>
713
+    </action>
714
+  </animation>
715
+
716
+  <animation>
717
+    <type>pick</type>
718
+    <object-name>MENU</object-name>
719
+    <action>
720
+      <button>0</button>
721
+      <binding>
722
+        <condition>
723
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
724
+        </condition>
725
+       <command>nasal</command>
726
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.MENU(1);</script>
727
+      </binding>
728
+      <mod-up>
729
+        <binding>
730
+          <condition>
731
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
732
+          </condition>
733
+          <command>nasal</command>
734
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.MENU(0);</script>
735
+        </binding>
736
+      </mod-up>
737
+    </action>
738
+  </animation>
739
+
740
+  <animation>
741
+    <type>pick</type>
742
+    <object-name>FPL</object-name>
743
+    <action>
744
+      <button>0</button>
745
+      <binding>
746
+        <condition>
747
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
748
+        </condition>
749
+       <command>nasal</command>
750
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.FPL(1);</script>
751
+      </binding>
752
+      <mod-up>
753
+        <binding>
754
+          <condition>
755
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
756
+          </condition>
757
+          <command>nasal</command>
758
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.FPL(0);</script>
759
+        </binding>
760
+      </mod-up>
761
+    </action>
762
+  </animation>
763
+
764
+  <animation>
765
+    <type>pick</type>
766
+    <object-name>PROC</object-name>
767
+    <action>
768
+      <button>0</button>
769
+      <binding>
770
+        <condition>
771
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
772
+        </condition>
773
+       <command>nasal</command>
774
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.PROC(1);</script>
775
+      </binding>
776
+      <mod-up>
777
+        <binding>
778
+          <condition>
779
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
780
+          </condition>
781
+          <command>nasal</command>
782
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.PROC(0);</script>
783
+        </binding>
784
+      </mod-up>
785
+    </action>
786
+  </animation>
787
+
788
+  <animation>
789
+    <type>pick</type>
790
+    <object-name>CLR</object-name>
791
+    <action>
792
+      <button>0</button>
793
+      <binding>
794
+        <condition>
795
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
796
+        </condition>
797
+       <command>nasal</command>
798
+       <script>zkv1000.flightdeck['PFD-copilot'].buttons.CLR(1);</script>
799
+      </binding>
800
+      <mod-up>
801
+        <binding>
802
+          <condition>
803
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
804
+          </condition>
805
+          <command>nasal</command>
806
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.CLR(0);</script>
807
+        </binding>
808
+      </mod-up>
809
+    </action>
810
+  </animation>
811
+
812
+  <animation>
813
+    <type>pick</type>
814
+    <object-name>ENT</object-name>
815
+    <action>
816
+      <button>0</button>
817
+      <binding>
818
+        <condition>
819
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
820
+        </condition>
821
+        <command>nasal</command>
822
+        <script>zkv1000.flightdeck['PFD-copilot'].buttons.ENT(1);</script>
823
+      </binding>
824
+      <mod-up>
825
+        <binding>
826
+          <condition>
827
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
828
+          </condition>
829
+          <command>nasal</command>
830
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.ENT(0);</script>
831
+        </binding>
832
+      </mod-up>
833
+    </action>
834
+  </animation>
835
+
836
+  <animation>
837
+    <type>knob</type>
838
+    <object-name>FmsOuter</object-name>
839
+    <action>
840
+      <binding>
841
+        <condition>
842
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
843
+        </condition>
844
+        <command>nasal</command>
845
+        <script>zkv1000.flightdeck['PFD-copilot'].knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
846
+      </binding>
847
+    </action>
848
+  </animation>
849
+
850
+  <animation>
851
+    <type>pick</type>
852
+    <object-name>FmsInner</object-name>
853
+    <action>
854
+      <button>0</button>
855
+      <binding>
856
+        <condition>
857
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
858
+        </condition>
859
+         <command>nasal</command>
860
+         <script>zkv1000.flightdeck['PFD-copilot'].buttons.FMS(1);</script>
861
+      </binding>
862
+      <mod-up>
863
+        <binding>
864
+          <condition>
865
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
866
+          </condition>
867
+          <command>nasal</command>
868
+          <script>zkv1000.flightdeck['PFD-copilot'].buttons.FMS(0);</script>
869
+        </binding>
870
+      </mod-up>
871
+    </action>
872
+  </animation>
873
+  <animation>
874
+    <type>knob</type>
875
+    <object-name>FmsInner</object-name>
876
+    <action>
877
+      <binding>
878
+        <condition>
879
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
880
+        </condition>
881
+        <command>nasal</command>
882
+        <script>zkv1000.flightdeck['PFD-copilot'].knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
883
+      </binding>
884
+    </action>
885
+  </animation>
886
+
887
+  <animation>
888
+    <type>pick</type>
889
+    <object-name>SoftKey.000</object-name>
890
+    <action>
891
+      <button>0</button>
892
+      <binding>
893
+        <condition>
894
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
895
+        </condition>
896
+        <command>nasal</command>
897
+        <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(0, 1);</script>
898
+      </binding>
899
+      <mod-up>
900
+        <binding>
901
+          <condition>
902
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
903
+          </condition>
904
+          <command>nasal</command>
905
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(0, 0);</script>
906
+        </binding>
907
+      </mod-up>
908
+    </action>
909
+  </animation>
910
+
911
+  <animation>
912
+    <type>pick</type>
913
+    <object-name>SoftKey.001</object-name>
914
+    <action>
915
+      <button>0</button>
916
+      <binding>
917
+        <condition>
918
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
919
+        </condition>
920
+       <command>nasal</command>
921
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(1, 1);</script>
922
+      </binding>
923
+      <mod-up>
924
+        <binding>
925
+          <condition>
926
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
927
+          </condition>
928
+          <command>nasal</command>
929
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(1, 0);</script>
930
+        </binding>
931
+      </mod-up>
932
+    </action>
933
+  </animation>
934
+
935
+  <animation>
936
+    <type>pick</type>
937
+    <object-name>SoftKey.002</object-name>
938
+    <action>
939
+      <button>0</button>
940
+      <binding>
941
+        <condition>
942
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
943
+        </condition>
944
+       <command>nasal</command>
945
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(2, 1);</script>
946
+      </binding>
947
+      <mod-up>
948
+        <binding>
949
+          <condition>
950
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
951
+          </condition>
952
+          <command>nasal</command>
953
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(2, 0);</script>
954
+        </binding>
955
+      </mod-up>
956
+    </action>
957
+  </animation>
958
+
959
+  <animation>
960
+    <type>pick</type>
961
+    <object-name>SoftKey.003</object-name>
962
+    <action>
963
+      <button>0</button>
964
+      <binding>
965
+        <condition>
966
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
967
+        </condition>
968
+       <command>nasal</command>
969
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(3, 1);</script>
970
+      </binding>
971
+      <mod-up>
972
+        <binding>
973
+          <condition>
974
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
975
+          </condition>
976
+          <command>nasal</command>
977
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(3, 0);</script>
978
+        </binding>
979
+      </mod-up>
980
+    </action>
981
+  </animation>
982
+
983
+  <animation>
984
+    <type>pick</type>
985
+    <object-name>SoftKey.004</object-name>
986
+    <action>
987
+      <button>0</button>
988
+      <binding>
989
+        <condition>
990
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
991
+        </condition>
992
+       <command>nasal</command>
993
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(4, 1);</script>
994
+      </binding>
995
+      <mod-up>
996
+        <binding>
997
+          <condition>
998
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
999
+          </condition>
1000
+          <command>nasal</command>
1001
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(4, 0);</script>
1002
+        </binding>
1003
+      </mod-up>
1004
+    </action>
1005
+  </animation>
1006
+
1007
+  <animation>
1008
+    <type>pick</type>
1009
+    <object-name>SoftKey.005</object-name>
1010
+    <action>
1011
+      <button>0</button>
1012
+      <binding>
1013
+        <condition>
1014
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1015
+        </condition>
1016
+       <command>nasal</command>
1017
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(5, 1);</script>
1018
+      </binding>
1019
+      <mod-up>
1020
+        <binding>
1021
+          <condition>
1022
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1023
+          </condition>
1024
+          <command>nasal</command>
1025
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(5, 0);</script>
1026
+        </binding>
1027
+      </mod-up>
1028
+    </action>
1029
+  </animation>
1030
+
1031
+  <animation>
1032
+    <type>pick</type>
1033
+    <object-name>SoftKey.006</object-name>
1034
+    <action>
1035
+      <button>0</button>
1036
+      <binding>
1037
+        <condition>
1038
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1039
+        </condition>
1040
+       <command>nasal</command>
1041
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(6, 1);</script>
1042
+      </binding>
1043
+      <mod-up>
1044
+        <binding>
1045
+          <condition>
1046
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1047
+          </condition>
1048
+          <command>nasal</command>
1049
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(6, 0);</script>
1050
+        </binding>
1051
+      </mod-up>
1052
+    </action>
1053
+  </animation>
1054
+
1055
+  <animation>
1056
+    <type>pick</type>
1057
+    <object-name>SoftKey.007</object-name>
1058
+    <action>
1059
+      <button>0</button>
1060
+      <binding>
1061
+        <condition>
1062
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1063
+        </condition>
1064
+       <command>nasal</command>
1065
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(7, 1);</script>
1066
+      </binding>
1067
+      <mod-up>
1068
+        <binding>
1069
+          <condition>
1070
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1071
+          </condition>
1072
+          <command>nasal</command>
1073
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(7, 0);</script>
1074
+        </binding>
1075
+      </mod-up>
1076
+    </action>
1077
+  </animation>
1078
+
1079
+  <animation>
1080
+    <type>pick</type>
1081
+    <object-name>SoftKey.008</object-name>
1082
+    <action>
1083
+      <button>0</button>
1084
+      <binding>
1085
+        <condition>
1086
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1087
+        </condition>
1088
+       <command>nasal</command>
1089
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(8, 1);</script>
1090
+      </binding>
1091
+      <mod-up>
1092
+        <binding>
1093
+          <condition>
1094
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1095
+          </condition>
1096
+          <command>nasal</command>
1097
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(8, 0);</script>
1098
+        </binding>
1099
+      </mod-up>
1100
+    </action>
1101
+  </animation>
1102
+
1103
+  <animation>
1104
+    <type>pick</type>
1105
+    <object-name>SoftKey.009</object-name>
1106
+    <action>
1107
+      <button>0</button>
1108
+      <binding>
1109
+        <condition>
1110
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1111
+        </condition>
1112
+       <command>nasal</command>
1113
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(9, 1);</script>
1114
+      </binding>
1115
+      <mod-up>
1116
+        <binding>
1117
+          <condition>
1118
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1119
+          </condition>
1120
+          <command>nasal</command>
1121
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(9, 0);</script>
1122
+        </binding>
1123
+      </mod-up>
1124
+    </action>
1125
+  </animation>
1126
+
1127
+  <animation>
1128
+    <type>pick</type>
1129
+    <object-name>SoftKey.010</object-name>
1130
+    <action>
1131
+      <button>0</button>
1132
+      <binding>
1133
+        <condition>
1134
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1135
+        </condition>
1136
+       <command>nasal</command>
1137
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(10, 1);</script>
1138
+      </binding>
1139
+      <mod-up>
1140
+        <binding>
1141
+          <condition>
1142
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1143
+          </condition>
1144
+          <command>nasal</command>
1145
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(10, 0);</script>
1146
+        </binding>
1147
+      </mod-up>
1148
+    </action>
1149
+  </animation>
1150
+
1151
+  <animation>
1152
+    <type>pick</type>
1153
+    <object-name>SoftKey.011</object-name>
1154
+    <action>
1155
+      <button>0</button>
1156
+      <binding>
1157
+        <condition>
1158
+          <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1159
+        </condition>
1160
+       <command>nasal</command>
1161
+       <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(11, 1);</script>
1162
+      </binding>
1163
+      <mod-up>
1164
+        <binding>
1165
+          <condition>
1166
+            <property>/instrumentation/zkv1000/PFD-copilot/status</property>
1167
+          </condition>
1168
+          <command>nasal</command>
1169
+          <script>zkv1000.flightdeck['PFD-copilot'].softkeys.SoftKey(11, 0);</script>
1170
+        </binding>
1171
+      </mod-up>
1172
+    </action>
1173
+  </animation>
1174
+
1175
+</PropertyList>
+1175
pfd-pilot.xml
... ...
@@ -0,0 +1,1175 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+
3
+<PropertyList>
4
+
5
+  <path>Models/GDU-104X.ac</path>
6
+
7
+  <animation>
8
+    <type>material</type>
9
+    <object-name>screw.000</object-name>
10
+    <object-name>screw.001</object-name>
11
+    <object-name>screw.002</object-name>
12
+    <object-name>screw.003</object-name>
13
+    <object-name>Lamp1</object-name>
14
+    <object-name>Lamp2</object-name>
15
+    <object-name>Lamp3</object-name>
16
+    <object-name>Lamp4</object-name>
17
+    <texture-prop>texture</texture-prop>
18
+    <texture>Textures/GDU-104X.png</texture>
19
+  </animation>
20
+
21
+  <animation>
22
+    <inherits-from>Effects/model-combined-deferred</inherits-from>
23
+    <parameters>
24
+      <lightmap-enabled type="int">1</lightmap-enabled>
25
+      <lightmap-factor><use>instrumentation/zkv1000/Lightmap</use></lightmap-factor>
26
+      <texture n="3">
27
+        <image>Textures/GDU-104X.lightmap.png</image>
28
+      </texture>
29
+    </parameters>
30
+    <type>material</type>
31
+    <object-name>Panel</object-name>
32
+    <object-name>AsSwitchNav</object-name>
33
+    <object-name>NavOuter</object-name>
34
+    <object-name>NavInner</object-name>
35
+    <object-name>HDG</object-name>
36
+    <object-name>AltOuter</object-name>
37
+    <object-name>AltInner</object-name>
38
+    <object-name>VolNAV</object-name>
39
+    <object-name>VolCOM</object-name>
40
+    <object-name>AsSwitchCOM</object-name>
41
+    <object-name>ComOuter</object-name>
42
+    <object-name>ComInner</object-name>
43
+    <object-name>CRS</object-name>
44
+    <object-name>BARO</object-name>
45
+    <object-name>PAN</object-name>
46
+    <object-name>PANUp</object-name>
47
+    <object-name>PANLeft</object-name>
48
+    <object-name>PANRight</object-name>
49
+    <object-name>PANDown</object-name>
50
+    <object-name>DirectTo</object-name>
51
+    <object-name>MENU</object-name>
52
+    <object-name>FPL</object-name>
53
+    <object-name>PROC</object-name>
54
+    <object-name>CLR</object-name>
55
+    <object-name>ENT</object-name>
56
+    <object-name>FmsOuter</object-name>
57
+    <object-name>FmsInner</object-name>
58
+    <object-name>SoftKey.000</object-name>
59
+    <object-name>SoftKey.001</object-name>
60
+    <object-name>SoftKey.002</object-name>
61
+    <object-name>SoftKey.003</object-name>
62
+    <object-name>SoftKey.004</object-name>
63
+    <object-name>SoftKey.005</object-name>
64
+    <object-name>SoftKey.006</object-name>
65
+    <object-name>SoftKey.007</object-name>
66
+    <object-name>SoftKey.008</object-name>
67
+    <object-name>SoftKey.009</object-name>
68
+    <object-name>SoftKey.010</object-name>
69
+    <object-name>SoftKey.011</object-name>
70
+    <object-name>Cover</object-name>
71
+    <texture-prop>texture</texture-prop>
72
+    <texture>Textures/GDU-104X.png</texture>
73
+  </animation>
74
+
75
+  <effect>
76
+    <inherits-from>Effects/model-combined-deferred</inherits-from>
77
+    <parameters>
78
+      <lightmap-enabled type="int">1</lightmap-enabled>
79
+      <lightmap-factor><use>instrumentation/zkv1000/Lightmap</use></lightmap-factor>
80
+      <texture n="3">
81
+        <image>Textures/GDU-104X.lightmap.png</image>
82
+      </texture>
83
+    </parameters>
84
+    <object-name>Panel</object-name>
85
+    <object-name>AsSwitchNav</object-name>
86
+    <object-name>NavOuter</object-name>
87
+    <object-name>NavInner</object-name>
88
+    <object-name>HDG</object-name>
89
+    <object-name>AltOuter</object-name>
90
+    <object-name>AltInner</object-name>
91
+    <object-name>VolNAV</object-name>
92
+    <object-name>VolCOM</object-name>
93
+    <object-name>AsSwitchCOM</object-name>
94
+    <object-name>ComOuter</object-name>
95
+    <object-name>ComInner</object-name>
96
+    <object-name>CRS</object-name>
97
+    <object-name>BARO</object-name>
98
+    <object-name>PAN</object-name>
99
+    <object-name>PANUp</object-name>
100
+    <object-name>PANLeft</object-name>
101
+    <object-name>PANRight</object-name>
102
+    <object-name>PANDown</object-name>
103
+    <object-name>DirectTo</object-name>
104
+    <object-name>MENU</object-name>
105
+    <object-name>FPL</object-name>
106
+    <object-name>PROC</object-name>
107
+    <object-name>CLR</object-name>
108
+    <object-name>ENT</object-name>
109
+    <object-name>FmsOuter</object-name>
110
+    <object-name>FmsInner</object-name>
111
+    <object-name>SoftKey.000</object-name>
112
+    <object-name>SoftKey.001</object-name>
113
+    <object-name>SoftKey.002</object-name>
114
+    <object-name>SoftKey.003</object-name>
115
+    <object-name>SoftKey.004</object-name>
116
+    <object-name>SoftKey.005</object-name>
117
+    <object-name>SoftKey.006</object-name>
118
+    <object-name>SoftKey.007</object-name>
119
+    <object-name>SoftKey.008</object-name>
120
+    <object-name>SoftKey.009</object-name>
121
+    <object-name>SoftKey.010</object-name>
122
+    <object-name>SoftKey.011</object-name>
123
+    <object-name>Cover</object-name>
124
+  </effect>
125
+
126
+  <animation>
127
+    <object-name>Cover</object-name>
128
+    <object-name>AP.L0</object-name>
129
+    <object-name>AP.L1</object-name>
130
+    <object-name>AP.L2</object-name>
131
+    <object-name>AP.L3</object-name>
132
+    <object-name>AP.L4</object-name>
133
+    <object-name>AP.L5</object-name>
134
+    <object-name>AP.R0</object-name>
135
+    <object-name>AP.R1</object-name>
136
+    <object-name>AP.R2</object-name>
137
+    <object-name>AP.R3</object-name>
138
+    <object-name>AP.R4</object-name>
139
+    <object-name>AP.R5</object-name>
140
+    <type>select</type>
141
+    <condition>
142
+      <equals>
143
+        <value type="bool">false</value>
144
+        <value type="bool">true</value>
145
+      </equals>
146
+    </condition>
147
+  </animation>
148
+
149
+  <animation>
150
+    <name>PFD-pilot</name>
151
+    <object-name>Screen</object-name>
152
+  </animation>
153
+
154
+  <animation>
155
+    <type>material</type>
156
+    <object-name>Screen</object-name>
157
+    <emission>
158
+      <red>1</red>
159
+      <green>1</green>
160
+      <blue>1</blue>
161
+      <factor-prop>instrumentation/zkv1000/display-brightness-norm</factor-prop>
162
+    </emission>
163
+  </animation>
164
+
165
+  <animation>
166
+    <type>pick</type>
167
+    <object-name>VolNAV</object-name>
168
+    <action>
169
+      <button>0</button>
170
+      <binding>
171
+        <condition>
172
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
173
+        </condition>
174
+        <command>property-toggle</command>
175
+        <property>/instrumentation/zkv1000/radios/nav-ident</property>
176
+      </binding>
177
+    </action>
178
+  </animation>
179
+  <animation>
180
+    <type>knob</type>
181
+    <object-name>VolNAV</object-name>
182
+    <action>
183
+      <binding>
184
+        <condition>
185
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
186
+        </condition>
187
+        <command>property-adjust</command>
188
+        <property>/instrumentation/zkv1000/radios/nav-volume</property>
189
+        <factor>0.05</factor>
190
+        <min>0</min>
191
+        <max>1</max>
192
+        <wrap>false</wrap>
193
+      </binding>
194
+    </action>
195
+  </animation>
196
+
197
+  <animation>
198
+    <type>pick</type>
199
+    <object-name>AsSwitchNav</object-name>
200
+    <action>
201
+      <button>0</button>
202
+      <binding>
203
+        <condition>
204
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
205
+        </condition>
206
+       <command>nasal</command>
207
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.AsSwitchNAV();</script>
208
+      </binding>
209
+    </action>
210
+  </animation>
211
+
212
+  <animation>
213
+    <type>pick</type>
214
+    <object-name>NavInner</object-name>
215
+    <action>
216
+      <button>0</button>
217
+      <binding>
218
+        <condition>
219
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
220
+        </condition>
221
+        <command>property-toggle</command>
222
+        <property>/instrumentation/zkv1000/radios/nav-tune</property>
223
+      </binding>
224
+    </action>
225
+  </animation>
226
+  <animation>
227
+    <type>knob</type>
228
+    <object-name>NavInner</object-name>
229
+    <action>
230
+      <binding>
231
+        <condition>
232
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
233
+        </condition>
234
+        <command>property-adjust</command>
235
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
236
+        <factor>0.05</factor>
237
+        <min>108.000</min>
238
+        <max>118.000</max>
239
+        <wrap>true></wrap>
240
+      </binding>
241
+      <binding>
242
+        <condition>
243
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
244
+        </condition>
245
+        <command>nasal</command>
246
+        <script>
247
+          foreach (var c; keys(zkv1000.flightdeck))
248
+            if (zkv1000.flightdeck[c] != nil)
249
+              zkv1000.flightdeck[c].display.updateNAV({set:1});
250
+        </script>
251
+      </binding>
252
+    </action>
253
+    <shift-action>
254
+      <binding>
255
+        <condition>
256
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
257
+        </condition>
258
+        <command>property-adjust</command>
259
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
260
+        <factor>0.50</factor>
261
+      </binding>
262
+      <binding>
263
+        <condition>
264
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
265
+        </condition>
266
+        <command>nasal</command>
267
+        <script>
268
+          foreach (var c; keys(zkv1000.flightdeck))
269
+            if (zkv1000.flightdeck[c] != nil)
270
+              zkv1000.flightdeck[c].display.updateNAV({set:1});
271
+        </script>
272
+      </binding>
273
+    </shift-action>
274
+  </animation>
275
+
276
+  <animation>
277
+    <type>pick</type>
278
+    <object-name>HDG</object-name>
279
+    <action>
280
+      <button>0</button>
281
+      <binding>
282
+        <condition>
283
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
284
+        </condition>
285
+        <command>property-assign</command>
286
+        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
287
+        <property>/orientation/heading-magnetic-deg</property>
288
+      </binding>
289
+    </action>
290
+  </animation>
291
+  <animation>
292
+    <type>knob</type>
293
+    <object-name>HDG</object-name>
294
+    <property>/instrumentation/zkv1000/PFD-pilot/knobs/HDG</property>
295
+    <center>
296
+      <x-m>0.0025172 </x-m>
297
+      <y-m>-0.1220634</y-m>
298
+      <z-m>0.0169178 </z-m>
299
+    </center>
300
+    <axis>
301
+      <x>1</x>
302
+      <y>0</y>
303
+      <z>0</z>
304
+    </axis>
305
+    <action>
306
+      <binding>
307
+       <command>property-adjust</command>
308
+       <property>/instrumentation/zkv1000/PFD-pilot/knobs/HDG</property>
309
+       <factor>10</factor>
310
+       <min>0</min>
311
+       <max>359</max>
312
+       <wrap>true</wrap>
313
+      </binding>
314
+      <binding>
315
+        <condition>
316
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
317
+        </condition>
318
+       <command>property-adjust</command>
319
+       <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
320
+       <factor>1</factor>
321
+       <min>0</min>
322
+       <max>359</max>
323
+       <wrap>true</wrap>
324
+      </binding>
325
+    </action>
326
+  </animation>
327
+
328
+  <animation>
329
+    <type>pick</type>
330
+    <object-name>AltInner</object-name>
331
+    <action>
332
+      <button>0</button>
333
+      <binding>
334
+        <condition>
335
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
336
+        </condition>
337
+        <command>nasal</command>
338
+        <script>zkv1000.flightdeck['PFD-pilot'].buttons.ALT();</script>
339
+      </binding>
340
+    </action>
341
+  </animation>
342
+  <animation>
343
+    <type>knob</type>
344
+    <object-name>AltInner</object-name>
345
+    <action>
346
+      <binding>
347
+        <condition>
348
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
349
+        </condition>
350
+       <command>property-adjust</command>
351
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
352
+       <factor>10</factor>
353
+       <min>0</min>
354
+       <max>16000</max>
355
+       <wrap>false</wrap>
356
+      </binding>
357
+    </action>
358
+    <shift-action>
359
+      <binding>
360
+        <condition>
361
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
362
+        </condition>
363
+       <command>property-adjust</command>
364
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
365
+       <factor>100</factor>
366
+      </binding>
367
+    </shift-action>
368
+  </animation>
369
+
370
+  <animation>
371
+    <type>pick</type>
372
+    <object-name>VolCOM</object-name>
373
+    <action>
374
+      <button>0</button>
375
+      <binding>
376
+        <condition>
377
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
378
+        </condition>
379
+        <command>property-toggle</command>
380
+        <property>/instrumentation/zkv1000/comm-add-noise</property>
381
+      </binding>
382
+    </action>
383
+  </animation>
384
+  <animation>
385
+    <type>knob</type>
386
+    <object-name>VolCOM</object-name>
387
+    <action>
388
+      <binding>
389
+        <condition>
390
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
391
+        </condition>
392
+        <command>property-adjust</command>
393
+        <property>/instrumentation/zkv1000/radios/comm-volume</property>
394
+        <factor>0.05</factor>
395
+        <min>0</min>
396
+        <max>1</max>
397
+        <wrap>false</wrap>
398
+      </binding>
399
+    </action>
400
+  </animation>
401
+
402
+  <animation>
403
+    <type>pick</type>
404
+    <object-name>AsSwitchCOM</object-name>
405
+    <action>
406
+      <button>0</button>
407
+      <binding>
408
+        <condition>
409
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
410
+        </condition>
411
+       <command>nasal</command>
412
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.AsSwitchCOM(1);</script>
413
+      </binding>
414
+      <mod-up>
415
+        <binding>
416
+          <condition>
417
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
418
+          </condition>
419
+          <command>nasal</command>
420
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.AsSwitchCOM(0);</script>
421
+        </binding>
422
+      </mod-up>
423
+    </action>
424
+  </animation>
425
+
426
+  <animation>
427
+    <type>pick</type>
428
+    <object-name>ComInner</object-name>
429
+    <action>
430
+      <button>0</button>
431
+      <binding>
432
+        <condition>
433
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
434
+        </condition>
435
+        <command>property-toggle</command>
436
+        <property>/instrumentation/zkv1000/radios/comm-tune</property>
437
+      </binding>
438
+    </action>
439
+  </animation>
440
+  <animation>
441
+    <type>knob</type>
442
+    <object-name>ComInner</object-name>
443
+    <action>
444
+      <binding>
445
+        <condition>
446
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
447
+        </condition>
448
+        <command>property-adjust</command>
449
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
450
+        <factor>0.025</factor>
451
+        <min>118.000</min>
452
+        <max>137.975</max>
453
+        <wrap>true</wrap>
454
+      </binding>
455
+      <binding>
456
+        <condition>
457
+          <property>/instrumentation/zkv1000/MFD/status</property>
458
+        </condition>
459
+        <command>nasal</command>
460
+        <script>
461
+          foreach (var c; keys(zkv1000.flightdeck))
462
+            if (zkv1000.flightdeck[c] != nil)
463
+              zkv1000.flightdeck[c].display.updateCOMM({set:1});
464
+        </script>
465
+      </binding>
466
+    </action>
467
+    <shift-action>
468
+      <binding>
469
+        <condition>
470
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
471
+        </condition>
472
+        <command>property-adjust</command>
473
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
474
+        <factor>0.1</factor>
475
+      </binding>
476
+      <binding>
477
+        <condition>
478
+          <property>/instrumentation/zkv1000/MFD/status</property>
479
+        </condition>
480
+        <command>nasal</command>
481
+        <script>
482
+          foreach (var c; keys(zkv1000.flightdeck))
483
+            if (zkv1000.flightdeck[c] != nil)
484
+              zkv1000.flightdeck[c].display.updateCOMM({set:1});
485
+        </script>
486
+      </binding>
487
+    </shift-action>
488
+  </animation>
489
+
490
+  <animation>
491
+    <type>knob</type>
492
+    <object-name>CRS</object-name>
493
+    <property>/instrumentation/zkv1000/PFD-pilot/knobs/CRS</property>
494
+    <center>
495
+      <x-m>0.0038567</x-m>
496
+      <y-m>0.1222390</y-m>
497
+      <z-m>0.0171226</z-m>
498
+    </center>
499
+    <axis>
500
+      <x>1</x>
501
+      <y>0</y>
502
+      <z>0</z>
503
+    </axis>
504
+    <action>
505
+      <binding>
506
+        <command>property-adjust</command>
507
+        <property>/instrumentation/zkv1000/PFD-pilot/knobs/CRS</property>
508
+        <factor>10</factor>
509
+        <min>0</min>
510
+        <max>359</max>
511
+        <wrap>true</wrap>
512
+      </binding>
513
+      <binding>
514
+        <condition>
515
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
516
+        </condition>
517
+        <command>property-adjust</command>
518
+        <property>/instrumentation/zkv1000/cdi/course</property>
519
+        <factor>1</factor>
520
+        <min>0</min>
521
+        <max>359</max>
522
+        <wrap>true</wrap>
523
+      </binding>
524
+    </action>
525
+  </animation>
526
+
527
+  <animation>
528
+    <type>knob</type>
529
+    <object-name>BARO</object-name>
530
+    <action>
531
+      <binding>
532
+        <condition>
533
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
534
+        </condition>
535
+       <command>property-adjust</command>
536
+       <property>/instrumentation/altimeter/setting-inhg</property>
537
+       <factor>0.01</factor>
538
+       <min>28.500</min>
539
+       <max>33.000</max>
540
+       <wrap>false</wrap>
541
+      </binding>
542
+    </action>
543
+    <shift-action>
544
+      <binding>
545
+        <condition>
546
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
547
+        </condition>
548
+       <command>property-adjust</command>
549
+       <property>/instrumentation/altimeter/setting-inhg</property>
550
+       <factor>0.10</factor>
551
+      </binding>
552
+    </shift-action>
553
+  </animation>
554
+
555
+  <animation>
556
+    <type>pick</type>
557
+    <object-name>PAN</object-name>
558
+    <action>
559
+      <button>0</button>
560
+      <binding>
561
+        <condition>
562
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
563
+        </condition>
564
+        <command>nasal</command>
565
+        <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN({xdir: 1, ydir: 1});</script>
566
+      </binding>
567
+      <mod-up>
568
+        <binding>
569
+          <condition>
570
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
571
+          </condition>
572
+          <command>nasal</command>
573
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN();</script>
574
+        </binding>
575
+      </mod-up>
576
+    </action>
577
+    <action>
578
+      <button>3</button>
579
+      <binding>
580
+        <condition>
581
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
582
+        </condition>
583
+       <command>nasal</command>
584
+       <script>zkv1000.flightdeck['PFD-pilot'].knobs.PAN(1);</script>
585
+      </binding>
586
+    </action>
587
+    <action>
588
+      <button>4</button>
589
+      <binding>
590
+        <condition>
591
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
592
+        </condition>
593
+       <command>nasal</command>
594
+       <script>zkv1000.flightdeck['PFD-pilot'].knobs.PAN(-1);</script>
595
+      </binding>
596
+    </action>
597
+  </animation>
598
+
599
+  <animation>
600
+    <type>pick</type>
601
+    <object-name>PANUp</object-name>
602
+    <action>
603
+      <button>0</button>
604
+      <binding>
605
+        <condition>
606
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
607
+        </condition>
608
+       <command>nasal</command>
609
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN({ydir: 1});</script>
610
+      </binding>
611
+      <mod-up>
612
+        <binding>
613
+          <condition>
614
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
615
+          </condition>
616
+          <command>nasal</command>
617
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN();</script>
618
+        </binding>
619
+      </mod-up>
620
+    </action>
621
+  </animation>
622
+  <animation>
623
+    <type>pick</type>
624
+    <object-name>PANLeft</object-name>
625
+    <action>
626
+      <button>0</button>
627
+      <binding>
628
+        <condition>
629
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
630
+        </condition>
631
+       <command>nasal</command>
632
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN({xdir: -1});</script>
633
+      </binding>
634
+      <mod-up>
635
+        <binding>
636
+          <condition>
637
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
638
+          </condition>
639
+          <command>nasal</command>
640
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN();</script>
641
+        </binding>
642
+      </mod-up>
643
+    </action>
644
+  </animation>
645
+  <animation>
646
+    <type>pick</type>
647
+    <object-name>PANRight</object-name>
648
+    <action>
649
+      <button>0</button>
650
+      <binding>
651
+        <condition>
652
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
653
+        </condition>
654
+       <command>nasal</command>
655
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN({xdir: 1});</script>
656
+      </binding>
657
+      <mod-up>
658
+        <binding>
659
+          <condition>
660
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
661
+          </condition>
662
+          <command>nasal</command>
663
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN();</script>
664
+        </binding>
665
+      </mod-up>
666
+    </action>
667
+  </animation>
668
+  <animation>
669
+    <type>pick</type>
670
+    <object-name>PANDown</object-name>
671
+    <action>
672
+      <button>0</button>
673
+      <binding>
674
+        <condition>
675
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
676
+        </condition>
677
+       <command>nasal</command>
678
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN({ydir: -1});</script>
679
+      </binding>
680
+      <mod-up>
681
+        <binding>
682
+          <condition>
683
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
684
+          </condition>
685
+          <command>nasal</command>
686
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PAN();</script>
687
+        </binding>
688
+      </mod-up>
689
+    </action>
690
+  </animation>
691
+
692
+  <animation>
693
+    <type>pick</type>
694
+    <object-name>DirectTo</object-name>
695
+    <action>
696
+      <button>0</button>
697
+      <binding>
698
+        <condition>
699
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
700
+        </condition>
701
+       <command>nasal</command>
702
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.DirectTo(1);</script>
703
+      </binding>
704
+      <mod-up>
705
+        <binding>
706
+          <condition>
707
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
708
+          </condition>
709
+          <command>nasal</command>
710
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.DirectTo(0);</script>
711
+        </binding>
712
+      </mod-up>
713
+    </action>
714
+  </animation>
715
+
716
+  <animation>
717
+    <type>pick</type>
718
+    <object-name>MENU</object-name>
719
+    <action>
720
+      <button>0</button>
721
+      <binding>
722
+        <condition>
723
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
724
+        </condition>
725
+       <command>nasal</command>
726
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.MENU(1);</script>
727
+      </binding>
728
+      <mod-up>
729
+        <binding>
730
+          <condition>
731
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
732
+          </condition>
733
+          <command>nasal</command>
734
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.MENU(0);</script>
735
+        </binding>
736
+      </mod-up>
737
+    </action>
738
+  </animation>
739
+
740
+  <animation>
741
+    <type>pick</type>
742
+    <object-name>FPL</object-name>
743
+    <action>
744
+      <button>0</button>
745
+      <binding>
746
+        <condition>
747
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
748
+        </condition>
749
+       <command>nasal</command>
750
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.FPL(1);</script>
751
+      </binding>
752
+      <mod-up>
753
+        <binding>
754
+          <condition>
755
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
756
+          </condition>
757
+          <command>nasal</command>
758
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.FPL(0);</script>
759
+        </binding>
760
+      </mod-up>
761
+    </action>
762
+  </animation>
763
+
764
+  <animation>
765
+    <type>pick</type>
766
+    <object-name>PROC</object-name>
767
+    <action>
768
+      <button>0</button>
769
+      <binding>
770
+        <condition>
771
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
772
+        </condition>
773
+       <command>nasal</command>
774
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.PROC(1);</script>
775
+      </binding>
776
+      <mod-up>
777
+        <binding>
778
+          <condition>
779
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
780
+          </condition>
781
+          <command>nasal</command>
782
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.PROC(0);</script>
783
+        </binding>
784
+      </mod-up>
785
+    </action>
786
+  </animation>
787
+
788
+  <animation>
789
+    <type>pick</type>
790
+    <object-name>CLR</object-name>
791
+    <action>
792
+      <button>0</button>
793
+      <binding>
794
+        <condition>
795
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
796
+        </condition>
797
+       <command>nasal</command>
798
+       <script>zkv1000.flightdeck['PFD-pilot'].buttons.CLR(1);</script>
799
+      </binding>
800
+      <mod-up>
801
+        <binding>
802
+          <condition>
803
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
804
+          </condition>
805
+          <command>nasal</command>
806
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.CLR(0);</script>
807
+        </binding>
808
+      </mod-up>
809
+    </action>
810
+  </animation>
811
+
812
+  <animation>
813
+    <type>pick</type>
814
+    <object-name>ENT</object-name>
815
+    <action>
816
+      <button>0</button>
817
+      <binding>
818
+        <condition>
819
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
820
+        </condition>
821
+        <command>nasal</command>
822
+        <script>zkv1000.flightdeck['PFD-pilot'].buttons.ENT(1);</script>
823
+      </binding>
824
+      <mod-up>
825
+        <binding>
826
+          <condition>
827
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
828
+          </condition>
829
+          <command>nasal</command>
830
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.ENT(0);</script>
831
+        </binding>
832
+      </mod-up>
833
+    </action>
834
+  </animation>
835
+
836
+  <animation>
837
+    <type>knob</type>
838
+    <object-name>FmsOuter</object-name>
839
+    <action>
840
+      <binding>
841
+        <condition>
842
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
843
+        </condition>
844
+        <command>nasal</command>
845
+        <script>zkv1000.flightdeck['PFD-pilot'].knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
846
+      </binding>
847
+    </action>
848
+  </animation>
849
+
850
+  <animation>
851
+    <type>pick</type>
852
+    <object-name>FmsInner</object-name>
853
+    <action>
854
+      <button>0</button>
855
+      <binding>
856
+        <condition>
857
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
858
+        </condition>
859
+         <command>nasal</command>
860
+         <script>zkv1000.flightdeck['PFD-pilot'].buttons.FMS(1);</script>
861
+      </binding>
862
+      <mod-up>
863
+        <binding>
864
+          <condition>
865
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
866
+          </condition>
867
+          <command>nasal</command>
868
+          <script>zkv1000.flightdeck['PFD-pilot'].buttons.FMS(0);</script>
869
+        </binding>
870
+      </mod-up>
871
+    </action>
872
+  </animation>
873
+  <animation>
874
+    <type>knob</type>
875
+    <object-name>FmsInner</object-name>
876
+    <action>
877
+      <binding>
878
+        <condition>
879
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
880
+        </condition>
881
+        <command>nasal</command>
882
+        <script>zkv1000.flightdeck['PFD-pilot'].knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
883
+      </binding>
884
+    </action>
885
+  </animation>
886
+
887
+  <animation>
888
+    <type>pick</type>
889
+    <object-name>SoftKey.000</object-name>
890
+    <action>
891
+      <button>0</button>
892
+      <binding>
893
+        <condition>
894
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
895
+        </condition>
896
+        <command>nasal</command>
897
+        <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(0, 1);</script>
898
+      </binding>
899
+      <mod-up>
900
+        <binding>
901
+          <condition>
902
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
903
+          </condition>
904
+          <command>nasal</command>
905
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(0, 0);</script>
906
+        </binding>
907
+      </mod-up>
908
+    </action>
909
+  </animation>
910
+
911
+  <animation>
912
+    <type>pick</type>
913
+    <object-name>SoftKey.001</object-name>
914
+    <action>
915
+      <button>0</button>
916
+      <binding>
917
+        <condition>
918
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
919
+        </condition>
920
+       <command>nasal</command>
921
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(1, 1);</script>
922
+      </binding>
923
+      <mod-up>
924
+        <binding>
925
+          <condition>
926
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
927
+          </condition>
928
+          <command>nasal</command>
929
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(1, 0);</script>
930
+        </binding>
931
+      </mod-up>
932
+    </action>
933
+  </animation>
934
+
935
+  <animation>
936
+    <type>pick</type>
937
+    <object-name>SoftKey.002</object-name>
938
+    <action>
939
+      <button>0</button>
940
+      <binding>
941
+        <condition>
942
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
943
+        </condition>
944
+       <command>nasal</command>
945
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(2, 1);</script>
946
+      </binding>
947
+      <mod-up>
948
+        <binding>
949
+          <condition>
950
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
951
+          </condition>
952
+          <command>nasal</command>
953
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(2, 0);</script>
954
+        </binding>
955
+      </mod-up>
956
+    </action>
957
+  </animation>
958
+
959
+  <animation>
960
+    <type>pick</type>
961
+    <object-name>SoftKey.003</object-name>
962
+    <action>
963
+      <button>0</button>
964
+      <binding>
965
+        <condition>
966
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
967
+        </condition>
968
+       <command>nasal</command>
969
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(3, 1);</script>
970
+      </binding>
971
+      <mod-up>
972
+        <binding>
973
+          <condition>
974
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
975
+          </condition>
976
+          <command>nasal</command>
977
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(3, 0);</script>
978
+        </binding>
979
+      </mod-up>
980
+    </action>
981
+  </animation>
982
+
983
+  <animation>
984
+    <type>pick</type>
985
+    <object-name>SoftKey.004</object-name>
986
+    <action>
987
+      <button>0</button>
988
+      <binding>
989
+        <condition>
990
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
991
+        </condition>
992
+       <command>nasal</command>
993
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(4, 1);</script>
994
+      </binding>
995
+      <mod-up>
996
+        <binding>
997
+          <condition>
998
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
999
+          </condition>
1000
+          <command>nasal</command>
1001
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(4, 0);</script>
1002
+        </binding>
1003
+      </mod-up>
1004
+    </action>
1005
+  </animation>
1006
+
1007
+  <animation>
1008
+    <type>pick</type>
1009
+    <object-name>SoftKey.005</object-name>
1010
+    <action>
1011
+      <button>0</button>
1012
+      <binding>
1013
+        <condition>
1014
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1015
+        </condition>
1016
+       <command>nasal</command>
1017
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(5, 1);</script>
1018
+      </binding>
1019
+      <mod-up>
1020
+        <binding>
1021
+          <condition>
1022
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1023
+          </condition>
1024
+          <command>nasal</command>
1025
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(5, 0);</script>
1026
+        </binding>
1027
+      </mod-up>
1028
+    </action>
1029
+  </animation>
1030
+
1031
+  <animation>
1032
+    <type>pick</type>
1033
+    <object-name>SoftKey.006</object-name>
1034
+    <action>
1035
+      <button>0</button>
1036
+      <binding>
1037
+        <condition>
1038
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1039
+        </condition>
1040
+       <command>nasal</command>
1041
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(6, 1);</script>
1042
+      </binding>
1043
+      <mod-up>
1044
+        <binding>
1045
+          <condition>
1046
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1047
+          </condition>
1048
+          <command>nasal</command>
1049
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(6, 0);</script>
1050
+        </binding>
1051
+      </mod-up>
1052
+    </action>
1053
+  </animation>
1054
+
1055
+  <animation>
1056
+    <type>pick</type>
1057
+    <object-name>SoftKey.007</object-name>
1058
+    <action>
1059
+      <button>0</button>
1060
+      <binding>
1061
+        <condition>
1062
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1063
+        </condition>
1064
+       <command>nasal</command>
1065
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(7, 1);</script>
1066
+      </binding>
1067
+      <mod-up>
1068
+        <binding>
1069
+          <condition>
1070
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1071
+          </condition>
1072
+          <command>nasal</command>
1073
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(7, 0);</script>
1074
+        </binding>
1075
+      </mod-up>
1076
+    </action>
1077
+  </animation>
1078
+
1079
+  <animation>
1080
+    <type>pick</type>
1081
+    <object-name>SoftKey.008</object-name>
1082
+    <action>
1083
+      <button>0</button>
1084
+      <binding>
1085
+        <condition>
1086
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1087
+        </condition>
1088
+       <command>nasal</command>
1089
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(8, 1);</script>
1090
+      </binding>
1091
+      <mod-up>
1092
+        <binding>
1093
+          <condition>
1094
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1095
+          </condition>
1096
+          <command>nasal</command>
1097
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(8, 0);</script>
1098
+        </binding>
1099
+      </mod-up>
1100
+    </action>
1101
+  </animation>
1102
+
1103
+  <animation>
1104
+    <type>pick</type>
1105
+    <object-name>SoftKey.009</object-name>
1106
+    <action>
1107
+      <button>0</button>
1108
+      <binding>
1109
+        <condition>
1110
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1111
+        </condition>
1112
+       <command>nasal</command>
1113
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(9, 1);</script>
1114
+      </binding>
1115
+      <mod-up>
1116
+        <binding>
1117
+          <condition>
1118
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1119
+          </condition>
1120
+          <command>nasal</command>
1121
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(9, 0);</script>
1122
+        </binding>
1123
+      </mod-up>
1124
+    </action>
1125
+  </animation>
1126
+
1127
+  <animation>
1128
+    <type>pick</type>
1129
+    <object-name>SoftKey.010</object-name>
1130
+    <action>
1131
+      <button>0</button>
1132
+      <binding>
1133
+        <condition>
1134
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1135
+        </condition>
1136
+       <command>nasal</command>
1137
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(10, 1);</script>
1138
+      </binding>
1139
+      <mod-up>
1140
+        <binding>
1141
+          <condition>
1142
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1143
+          </condition>
1144
+          <command>nasal</command>
1145
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(10, 0);</script>
1146
+        </binding>
1147
+      </mod-up>
1148
+    </action>
1149
+  </animation>
1150
+
1151
+  <animation>
1152
+    <type>pick</type>
1153
+    <object-name>SoftKey.011</object-name>
1154
+    <action>
1155
+      <button>0</button>
1156
+      <binding>
1157
+        <condition>
1158
+          <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1159
+        </condition>
1160
+       <command>nasal</command>
1161
+       <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(11, 1);</script>
1162
+      </binding>
1163
+      <mod-up>
1164
+        <binding>
1165
+          <condition>
1166
+            <property>/instrumentation/zkv1000/PFD-pilot/status</property>
1167
+          </condition>
1168
+          <command>nasal</command>
1169
+          <script>zkv1000.flightdeck['PFD-pilot'].softkeys.SoftKey(11, 0);</script>
1170
+        </binding>
1171
+      </mod-up>
1172
+    </action>
1173
+  </animation>
1174
+
1175
+</PropertyList>
+5
zkv1000.nas
... ...
@@ -18,10 +18,15 @@ files_to_load = [
18 18
 #    'alerts.nas',  # in flight tests
19 19
 #    'mud.nas',     # displays simple embedded GUI (Multi-Use Display)
20 20
 
21
+var flightdeck = {};
22
+
21 23
 var zkv = cdi = radios = alerts = infos = cursors = afcs = eis = nil;
22 24
 
23 25
 var init_props = func {
24 26
     zkv = props.globals.getNode('/instrumentation/zkv1000',1);
27
+    foreach (var d; zkv.getChildren())
28
+        if (d.getNode('status') != nil)
29
+            flightdeck[d.getName()] = nil;
25 30
     zkv.getNode('emission',1).setDoubleValue(0.5);
26 31
     zkv.getNode('body-emission',1).setDoubleValue(0.0);
27 32
     zkv.getNode('body-texture',1).setValue('');