mirror of
https://github.com/l0k1/oprf_assets.git
synced 2024-11-21 15:08:03 +08:00
Added ZSU-23
This commit is contained in:
parent
d3e55ed89b
commit
a0acd76464
330
ZSU-23/Dialogs/control-panel.xml
Normal file
330
ZSU-23/Dialogs/control-panel.xml
Normal file
@ -0,0 +1,330 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<name>control-panel</name>
|
||||
<layout>vbox</layout>
|
||||
<width>250</width>
|
||||
<resizable>false</resizable>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
|
||||
<empty><stretch>true</stretch></empty>
|
||||
<text>
|
||||
<label>Control Panel</label>
|
||||
</text>
|
||||
<empty><stretch>true</stretch></empty>
|
||||
|
||||
<button>
|
||||
<legend/>
|
||||
<keynum>27</keynum>
|
||||
<pref-width>16</pref-width>
|
||||
<pref-height>16</pref-height>
|
||||
<border>2</border>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<padding>6</padding>
|
||||
<text>
|
||||
<label>Elevators</label>
|
||||
</text>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
|
||||
<!-- 3rd -->
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>1</col>
|
||||
<label>3rd</label>
|
||||
</text>
|
||||
|
||||
<!-- 3rd -->
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<property>/carrier/elevators/elevator[2]/at-flight-deck</property>
|
||||
</visible>
|
||||
<legend>FLIGHT DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[2]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<row>1</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<not>
|
||||
<property>/carrier/elevators/elevator[2]/at-flight-deck</property>
|
||||
</not>
|
||||
</visible>
|
||||
<legend>HANGAR DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[2]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<!-- 2nd -->
|
||||
<text>
|
||||
<row>2</row>
|
||||
<col>1</col>
|
||||
<label>2nd</label>
|
||||
</text>
|
||||
|
||||
<!-- 2nd -->
|
||||
<button>
|
||||
<row>3</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<property>/carrier/elevators/elevator[1]/at-flight-deck</property>
|
||||
</visible>
|
||||
<legend>FLIGHT DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[1]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<row>3</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<not>
|
||||
<property>/carrier/elevators/elevator[1]/at-flight-deck</property>
|
||||
</not>
|
||||
</visible>
|
||||
<legend>HANGAR DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[1]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<!-- 4th -->
|
||||
<text>
|
||||
<row>4</row>
|
||||
<col>0</col>
|
||||
<label>4th</label>
|
||||
</text>
|
||||
<!-- 1st -->
|
||||
<text>
|
||||
<row>4</row>
|
||||
<col>1</col>
|
||||
<label>1st</label>
|
||||
</text>
|
||||
|
||||
<!-- 4th -->
|
||||
<button>
|
||||
<row>5</row>
|
||||
<col>0</col>
|
||||
<visible>
|
||||
<property>/carrier/elevators/elevator[3]/at-flight-deck</property>
|
||||
</visible>
|
||||
<legend>FLIGHT DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[3]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<row>5</row>
|
||||
<col>0</col>
|
||||
<visible>
|
||||
<not>
|
||||
<property>/carrier/elevators/elevator[3]/at-flight-deck</property>
|
||||
</not>
|
||||
</visible>
|
||||
<legend>HANGAR DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[3]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<!-- 1st -->
|
||||
<button>
|
||||
<row>5</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<property>/carrier/elevators/elevator[0]/at-flight-deck</property>
|
||||
</visible>
|
||||
<legend>FLIGHT DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[0]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<row>5</row>
|
||||
<col>1</col>
|
||||
<visible>
|
||||
<not>
|
||||
<property>/carrier/elevators/elevator[0]/at-flight-deck</property>
|
||||
</not>
|
||||
</visible>
|
||||
<legend>HANGAR DECK</legend>
|
||||
<pref-width>100</pref-width>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/carrier/elevators/elevator[0]/at-flight-deck</property>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<padding>6</padding>
|
||||
<text>
|
||||
<label>Flight Deck</label>
|
||||
</text>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
|
||||
<checkbox>
|
||||
<halign>left</halign>
|
||||
<label>Runway lighting</label>
|
||||
<property>/controls/lighting/deck-lights</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<halign>left</halign>
|
||||
<label>Antennas</label>
|
||||
<property>/carrier/antennas/enabled</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<padding>6</padding>
|
||||
<text>
|
||||
<label>Debug</label>
|
||||
</text>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
|
||||
<checkbox>
|
||||
<halign>left</halign>
|
||||
<label>Enable ship movememnt</label>
|
||||
<property>/carrier/fdm/settings/movement</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<halign>left</halign>
|
||||
<label>Show Phalanx aim points</label>
|
||||
<property>/carrier/phalanx/settings/show-debug-aim</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<default-padding>6</default-padding>
|
||||
|
||||
<empty><stretch>true</stretch></empty>
|
||||
|
||||
<button>
|
||||
<legend>Close</legend>
|
||||
<default>true</default>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
</PropertyList>
|
39
ZSU-23/Dialogs/menu.xml
Normal file
39
ZSU-23/Dialogs/menu.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<default>
|
||||
|
||||
<menu n="10">
|
||||
<label>CVN-70</label>
|
||||
<enabled type="bool">true</enabled>
|
||||
|
||||
<item>
|
||||
<label>Control Panel</label>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>control-panel</dialog-name>
|
||||
</binding>
|
||||
</item>
|
||||
</menu>
|
||||
|
||||
</default>
|
||||
|
||||
</PropertyList>
|
89
ZSU-23/Hud/hud.xml
Normal file
89
ZSU-23/Hud/hud.xml
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<name>Vinson HUD</name>
|
||||
|
||||
<enable3d>false</enable3d>
|
||||
|
||||
<label>
|
||||
<name>Heading</name>
|
||||
<x>-300</x>
|
||||
<y>-225</y>
|
||||
<width>200</width>
|
||||
<height>25</height>
|
||||
<prefix> Heading: </prefix>
|
||||
<postfix> deg</postfix>
|
||||
<halign>left</halign>
|
||||
<format>%03.0f</format>
|
||||
<box>true</box>
|
||||
<input>
|
||||
<property>/orientation/heading-deg</property>
|
||||
</input>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<name>Speed</name>
|
||||
<x>0</x>
|
||||
<y>-225</y>
|
||||
<width>125</width>
|
||||
<height>25</height>
|
||||
<prefix> Speed: </prefix>
|
||||
<postfix> kts</postfix>
|
||||
<halign>left</halign>
|
||||
<format>%2.1f</format>
|
||||
<box>true</box>
|
||||
<input>
|
||||
<property>/velocities/groundspeed-kt</property>
|
||||
</input>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<name>damage</name>
|
||||
<x>-150</x>
|
||||
<y>-175</y>
|
||||
<width>125</width>
|
||||
<height>25</height>
|
||||
<prefix> Integrity: </prefix>
|
||||
<postfix> %%</postfix>
|
||||
<halign>left</halign>
|
||||
<format>%3.1f</format>
|
||||
<box>true</box>
|
||||
<input>
|
||||
<property>/sam/damage</property>
|
||||
</input>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<name>cs</name>
|
||||
<x>0</x>
|
||||
<y>-175</y>
|
||||
<width>125</width>
|
||||
<height>25</height>
|
||||
<prefix> Callsign: </prefix>
|
||||
<postfix></postfix>
|
||||
<halign>left</halign>
|
||||
<format>%s</format>
|
||||
<box>true</box>
|
||||
<input>
|
||||
<property>/sim/multiplay/callsign</property>
|
||||
</input>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<name>tower</name>
|
||||
<x>150</x>
|
||||
<y>-225</y>
|
||||
<width>200</width>
|
||||
<height>25</height>
|
||||
<prefix> Placement near: </prefix>
|
||||
<postfix></postfix>
|
||||
<halign>left</halign>
|
||||
<format>%s</format>
|
||||
<box>true</box>
|
||||
<input>
|
||||
<property>/sim/tower/airport-id</property>
|
||||
</input>
|
||||
</label>
|
||||
|
||||
</PropertyList>
|
195
ZSU-23/Models/Effects/muzzle.ac
Normal file
195
ZSU-23/Models/Effects/muzzle.ac
Normal file
@ -0,0 +1,195 @@
|
||||
AC3Db
|
||||
MATERIAL "DefaultWhite" rgb 1.000 1.000 1.000 amb 1.000 1.000 1.000 emis 0.000 0.000 0.000 spec 0.500 0.500 0.500 shi 64 trans 0.000
|
||||
OBJECT world
|
||||
name "Blender_exporter_v3.3__muzzle.ac"
|
||||
kids 1
|
||||
OBJECT poly
|
||||
name "muzzle"
|
||||
data 8
|
||||
Cylinder
|
||||
crease 40.0
|
||||
numvert 32
|
||||
0 0 0.5
|
||||
3 0 0.5
|
||||
0 0.19134 0.46194
|
||||
3 0.19134 0.46194
|
||||
0 0.35355 0.35355
|
||||
3 0.35355 0.35355
|
||||
0 0.46194 0.19134
|
||||
3 0.46194 0.19134
|
||||
-0 0.5 -0
|
||||
3 0.5 -0
|
||||
-0 0.46194 -0.19134
|
||||
3 0.46194 -0.19134
|
||||
-0 0.35355 -0.35355
|
||||
3 0.35355 -0.35355
|
||||
-0 0.19134 -0.46194
|
||||
3 0.19134 -0.46194
|
||||
-0 -0 -0.5
|
||||
3 -0 -0.5
|
||||
-0 -0.19134 -0.46194
|
||||
3 -0.19134 -0.46194
|
||||
-0 -0.35355 -0.35355
|
||||
3 -0.35355 -0.35355
|
||||
-0 -0.46194 -0.19134
|
||||
3 -0.46194 -0.19134
|
||||
0 -0.5 0
|
||||
3 -0.5 -0
|
||||
0 -0.46194 0.19134
|
||||
3 -0.46194 0.19134
|
||||
0 -0.35355 0.35355
|
||||
3 -0.35355 0.35355
|
||||
0 -0.19134 0.46194
|
||||
3 -0.19134 0.46194
|
||||
numsurf 18
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
0 0 0
|
||||
1 1 0
|
||||
3 1 1
|
||||
2 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
2 0 0
|
||||
3 1 0
|
||||
5 1 1
|
||||
4 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
4 0 0
|
||||
5 1 0
|
||||
7 1 1
|
||||
6 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
6 0 0
|
||||
7 1 0
|
||||
9 1 1
|
||||
8 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
8 0 0
|
||||
9 1 0
|
||||
11 1 1
|
||||
10 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
10 0 0
|
||||
11 1 0
|
||||
13 1 1
|
||||
12 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
12 0 0
|
||||
13 1 0
|
||||
15 1 1
|
||||
14 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
14 0 0
|
||||
15 1 0
|
||||
17 1 1
|
||||
16 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
16 0 0
|
||||
17 1 0
|
||||
19 1 1
|
||||
18 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
18 0 0
|
||||
19 1 0
|
||||
21 1 1
|
||||
20 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
20 0 0
|
||||
21 1 0
|
||||
23 1 1
|
||||
22 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
22 0 0
|
||||
23 1 0
|
||||
25 1 1
|
||||
24 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
24 0 0
|
||||
25 1 0
|
||||
27 1 1
|
||||
26 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
26 0 0
|
||||
27 1 0
|
||||
29 1 1
|
||||
28 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 16
|
||||
3 0.5 1
|
||||
1 0.691342 0.96194
|
||||
31 0.853553 0.853553
|
||||
29 0.96194 0.691342
|
||||
27 1 0.5
|
||||
25 0.96194 0.308658
|
||||
23 0.853553 0.146447
|
||||
21 0.691342 0.03806
|
||||
19 0.5 0
|
||||
17 0.308658 0.03806
|
||||
15 0.146447 0.146446
|
||||
13 0.03806 0.308658
|
||||
11 0 0.5
|
||||
9 0.03806 0.691342
|
||||
7 0.146447 0.853554
|
||||
5 0.308659 0.96194
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
28 0 0
|
||||
29 1 0
|
||||
31 1 1
|
||||
30 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 4
|
||||
30 0 0
|
||||
31 1 0
|
||||
1 1 1
|
||||
0 0 1
|
||||
SURF 0X0
|
||||
mat 0
|
||||
refs 16
|
||||
0 0.5 1
|
||||
2 0.691342 0.96194
|
||||
4 0.853553 0.853553
|
||||
6 0.96194 0.691342
|
||||
8 1 0.5
|
||||
10 0.96194 0.308658
|
||||
12 0.853553 0.146447
|
||||
14 0.691342 0.03806
|
||||
16 0.5 0
|
||||
18 0.308658 0.03806
|
||||
20 0.146447 0.146446
|
||||
22 0.03806 0.308658
|
||||
24 0 0.5
|
||||
26 0.03806 0.691342
|
||||
28 0.146447 0.853554
|
||||
30 0.308659 0.96194
|
||||
kids 0
|
23
ZSU-23/Models/Effects/muzzle.eff
Normal file
23
ZSU-23/Models/Effects/muzzle.eff
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0"?>
|
||||
<PropertyList>
|
||||
<name>muzzle-flame</name>
|
||||
<inherits-from>Effects/thrust-flame</inherits-from>
|
||||
<parameters>
|
||||
<base_flame_b type="float">0.8</base_flame_b>
|
||||
<base_flame_density type="float">0.2</base_flame_density>
|
||||
<base_flame_g type="float">0.9</base_flame_g>
|
||||
<base_flame_r type="float">0.9</base_flame_r>
|
||||
<!-- <deflection_coeff type="float">0</deflection_coeff> -->
|
||||
<flame_color_high_b type="float">0.8</flame_color_high_b>
|
||||
<flame_color_high_g type="float">0.85</flame_color_high_g>
|
||||
<flame_color_high_r type="float">0.9</flame_color_high_r>
|
||||
<flame_color_low_b type="float">0.07</flame_color_low_b>
|
||||
<flame_color_low_g type="float">0.15</flame_color_low_g>
|
||||
<flame_color_low_r type="float">0.35</flame_color_low_r>
|
||||
<flame_radius_fraction type="float">0.09</flame_radius_fraction>
|
||||
<thrust_collimation type="float">0.1</thrust_collimation>
|
||||
<thrust_density type="float">0.1</thrust_density>
|
||||
<use_noise type="int">0</use_noise>
|
||||
<use_shocks type="int">0</use_shocks>
|
||||
</parameters>
|
||||
</PropertyList>
|
16
ZSU-23/Models/Effects/muzzle.xml
Normal file
16
ZSU-23/Models/Effects/muzzle.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<PropertyList>
|
||||
<path>muzzle.ac</path>
|
||||
<name>flame</name>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/ZSU-23/Models/Effects/muzzle</inherits-from>
|
||||
<object-name>muzzle</object-name>
|
||||
</effect>
|
||||
|
||||
<animation>
|
||||
<type>noshadow</type>
|
||||
<object-name>muzzle</object-name>
|
||||
</animation>
|
||||
|
||||
</PropertyList>
|
417
ZSU-23/Models/ZSU-23-4M.xml
Normal file
417
ZSU-23/Models/ZSU-23-4M.xml
Normal file
@ -0,0 +1,417 @@
|
||||
<?xml version="1.0"?>
|
||||
<PropertyList>
|
||||
<path>Aircraft/ZSU-23/Models/zsu-23.ac</path>
|
||||
|
||||
|
||||
<!-- muzzle fire -->
|
||||
<model>
|
||||
<path>Aircraft/ZSU-23/Models/Effects/muzzle.xml</path>
|
||||
<name>muzzle_LL</name>
|
||||
<offsets>
|
||||
<x-m>-2.65783</x-m>
|
||||
<y-m>-0.21016</y-m>
|
||||
<z-m> 1.54514</z-m>
|
||||
<pitch-deg>180</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/ZSU-23/Models/Effects/muzzle.xml</path>
|
||||
<name>muzzle_LR</name>
|
||||
<offsets>
|
||||
<x-m>-2.65783</x-m>
|
||||
<y-m> 0.21016</y-m>
|
||||
<z-m> 1.54514</z-m>
|
||||
<pitch-deg>180</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/ZSU-23/Models/Effects/muzzle.xml</path>
|
||||
<name>muzzle_UL</name>
|
||||
<offsets>
|
||||
<x-m>-2.38544</x-m>
|
||||
<y-m>-0.11</y-m>
|
||||
<z-m> 1.88539</z-m>
|
||||
<pitch-deg>180</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/ZSU-23/Models/Effects/muzzle.xml</path>
|
||||
<name>muzzle_UR</name>
|
||||
<offsets>
|
||||
<x-m>-2.38544</x-m>
|
||||
<y-m> 0.11</y-m>
|
||||
<z-m> 1.88539</z-m>
|
||||
<pitch-deg>180</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>muzzle_LL</object-name>
|
||||
<object-name>muzzle_LR</object-name>
|
||||
<object-name>muzzle_UL</object-name>
|
||||
<object-name>muzzle_UR</object-name>
|
||||
<condition>
|
||||
<property>/sim/rendering/shaders/skydome</property><!-- als -->
|
||||
<property>sim/multiplay/generic/bool[0]</property><!-- gun firing -->
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>turret</object-name>
|
||||
<object-name>muzzle_LL</object-name>
|
||||
<object-name>muzzle_LR</object-name>
|
||||
<object-name>muzzle_UL</object-name>
|
||||
<object-name>muzzle_UR</object-name>
|
||||
<axis>
|
||||
<object-name>turret_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[0]</property>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>gun_lower</object-name>
|
||||
<object-name>muzzle_LL</object-name>
|
||||
<object-name>muzzle_LR</object-name>
|
||||
<axis>
|
||||
<object-name>gun_lower_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
<factor>-1</factor>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>gun_upper</object-name>
|
||||
<object-name>muzzle_UL</object-name>
|
||||
<object-name>muzzle_UR</object-name>
|
||||
<axis>
|
||||
<object-name>gun_upper_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
<factor>-1</factor>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>gun_link</object-name>
|
||||
<axis>
|
||||
<object-name>gun_link_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>gun_hatch</object-name>
|
||||
<axis>
|
||||
<object-name>gun_hatch_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
<factor>-1</factor>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>radar_base</object-name>
|
||||
<axis>
|
||||
<object-name>radar_az_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[2]</property>
|
||||
<offset-deg>180</offset-deg>
|
||||
<factor>-1</factor>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>radar</object-name>
|
||||
<axis>
|
||||
<object-name>radar_elevation_axis</object-name>
|
||||
</axis>
|
||||
<property>sim/multiplay/generic/float[3]</property>
|
||||
<factor>-1</factor>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>muzzle_LL</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<expression>
|
||||
<sin>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</sin>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<expression>
|
||||
<cos>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</cos>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>muzzle_UL</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<expression>
|
||||
<sin>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</sin>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
<less-than>
|
||||
<expression>
|
||||
<cos>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</cos>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</less-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>muzzle_UR</object-name>
|
||||
<condition>
|
||||
<less-than>
|
||||
<expression>
|
||||
<sin>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</sin>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</less-than>
|
||||
<less-than>
|
||||
<expression>
|
||||
<cos>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</cos>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</less-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>muzzle_LR</object-name>
|
||||
<condition>
|
||||
<less-than>
|
||||
<expression>
|
||||
<sin>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</sin>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</less-than>
|
||||
<greater-than>
|
||||
<expression>
|
||||
<cos>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>60</value>
|
||||
</product>
|
||||
</cos>
|
||||
</expression>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> 3.26307</x-m>
|
||||
<y-m>-0.84611</y-m>
|
||||
<z-m> 2.85616</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> 3.26307</x-m>
|
||||
<y-m>-0.84611</y-m>
|
||||
<z-m> 2.85616</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> 3.26307</x-m>
|
||||
<y-m> 0.84611</y-m>
|
||||
<z-m> 2.85616</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> 3.26307</x-m>
|
||||
<y-m> 0.84611</y-m>
|
||||
<z-m> 2.85616</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.80986</x-m>
|
||||
<y-m> 0.00064</y-m>
|
||||
<z-m> 3.24007</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.80986</x-m>
|
||||
<y-m> 0.00064</y-m>
|
||||
<z-m> 3.24007</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -3.97300</x-m>
|
||||
<y-m> 0.00023</y-m>
|
||||
<z-m> 1.83017</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -3.97300</x-m>
|
||||
<y-m> 0.00023</y-m>
|
||||
<z-m> 1.83017</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -4.26653</x-m>
|
||||
<y-m> -1.82402</y-m>
|
||||
<z-m> 1.44961</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -4.26653</x-m>
|
||||
<y-m> -1.82402</y-m>
|
||||
<z-m> 1.44961</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -4.26653</x-m>
|
||||
<y-m> 1.82402</y-m>
|
||||
<z-m> 1.44961</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -4.26653</x-m>
|
||||
<y-m> 1.82402</y-m>
|
||||
<z-m> 1.44961</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.63979</x-m>
|
||||
<y-m> -2.14385</y-m>
|
||||
<z-m> 0.05906</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.63979</x-m>
|
||||
<y-m> -2.14385</y-m>
|
||||
<z-m> 0.05906</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/smoke.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.63979</x-m>
|
||||
<y-m> 2.14385</y-m>
|
||||
<z-m> 0.05906</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/S-300/Models/fire.xml</path>
|
||||
<offsets>
|
||||
<x-m> -0.63979</x-m>
|
||||
<y-m> 2.14385</y-m>
|
||||
<z-m> 0.05906</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
</PropertyList>
|
||||
|
BIN
ZSU-23/Models/colors.png
Normal file
BIN
ZSU-23/Models/colors.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
1326
ZSU-23/Models/emesary/aim-emesary.ac
Normal file
1326
ZSU-23/Models/emesary/aim-emesary.ac
Normal file
File diff suppressed because it is too large
Load Diff
BIN
ZSU-23/Models/emesary/aim-emesary.png
Normal file
BIN
ZSU-23/Models/emesary/aim-emesary.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 700 B |
74
ZSU-23/Models/emesary/bomb_hit_smoke.xml
Normal file
74
ZSU-23/Models/emesary/bomb_hit_smoke.xml
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0"?>
|
||||
<PropertyList>
|
||||
<particlesystem>
|
||||
<name>bombhit-smoke</name>
|
||||
|
||||
<texture>smoke.png</texture>
|
||||
|
||||
<emissive>false</emissive>
|
||||
<lighting>false</lighting>
|
||||
<align>billboard</align>
|
||||
<attach>world</attach>
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
<shooter>
|
||||
<theta-min-deg>30</theta-min-deg>
|
||||
<theta-max-deg>60</theta-max-deg>
|
||||
<phi-min-deg>-180</phi-min-deg>
|
||||
<phi-max-deg> 180</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>5</value>
|
||||
<spread>5</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>0</x-min-deg-sec>
|
||||
<y-min-deg-sec>0</y-min-deg-sec>
|
||||
<z-min-deg-sec>-60</z-min-deg-sec>
|
||||
<x-max-deg-sec>0</x-max-deg-sec>
|
||||
<y-max-deg-sec>0</y-max-deg-sec>
|
||||
<z-max-deg-sec>60</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>3</value>
|
||||
<spread>5</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red><value>0.0</value></red>
|
||||
<green><value>0.0</value></green>
|
||||
<blue><value>0.0</value></blue>
|
||||
<alpha><value>0.2</value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>12.0</value>
|
||||
</size>
|
||||
</start>
|
||||
<end>
|
||||
<color>
|
||||
<red><value>0.0</value></red>
|
||||
<green><value>0.0</value></green>
|
||||
<blue><value>0.0</value></blue>
|
||||
<alpha><value>0.05</value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>80.0</value>
|
||||
</size>
|
||||
</end>
|
||||
<life-sec>
|
||||
<value>120</value>
|
||||
</life-sec>
|
||||
<mass-kg>0.025</mass-kg>
|
||||
<radius-m>0.40</radius-m>
|
||||
</particle>
|
||||
<program>
|
||||
<fluid>air</fluid>
|
||||
<gravity>true</gravity>
|
||||
<wind>true</wind>
|
||||
</program>
|
||||
</particlesystem>
|
||||
</PropertyList>
|
1065
ZSU-23/Models/emesary/crater.ac
Normal file
1065
ZSU-23/Models/emesary/crater.ac
Normal file
File diff suppressed because it is too large
Load Diff
BIN
ZSU-23/Models/emesary/crater.png
Normal file
BIN
ZSU-23/Models/emesary/crater.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 143 KiB |
103
ZSU-23/Models/emesary/crater_big.xml
Normal file
103
ZSU-23/Models/emesary/crater_big.xml
Normal file
@ -0,0 +1,103 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>crater.ac</path>
|
||||
|
||||
<animation>
|
||||
<type>scale</type>
|
||||
<object-name>Sphere</object-name>
|
||||
<x-offset>1.8</x-offset>
|
||||
<y-offset>1.8</y-offset>
|
||||
<z-offset>1.4</z-offset>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<object-name>Sphere</object-name>
|
||||
<enable-hot type="bool">true</enable-hot>
|
||||
</animation>
|
||||
|
||||
<particlesystem>
|
||||
<name>explosion-smoke-longterm</name>
|
||||
<texture>smoke.png</texture>
|
||||
|
||||
<emissive type="bool">false</emissive>
|
||||
<lighting type="bool">false</lighting>
|
||||
|
||||
|
||||
<attach>world</attach>
|
||||
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
|
||||
<shooter>
|
||||
<theta-min-deg>0</theta-min-deg>
|
||||
<theta-max-deg>20</theta-max-deg>
|
||||
<phi-min-deg>-180</phi-min-deg>
|
||||
<phi-max-deg>180</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>30</value>
|
||||
<spread>10</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>0</x-min-deg-sec>
|
||||
<y-min-deg-sec>0</y-min-deg-sec>
|
||||
<z-min-deg-sec>0</z-min-deg-sec>
|
||||
<x-max-deg-sec>0</x-max-deg-sec>
|
||||
<y-max-deg-sec>0</y-max-deg-sec>
|
||||
<z-max-deg-sec>5</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>2</value>
|
||||
<spread>0</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
|
||||
<align>billboard</align>
|
||||
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red><value> 0.3 </value></red>
|
||||
<green><value> 0.3 </value></green>
|
||||
<blue><value> 0.25 </value></blue>
|
||||
<alpha><value> 0.3 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>6</value>
|
||||
</size>
|
||||
</start>
|
||||
|
||||
<end>
|
||||
<color>
|
||||
<red><value> 0.4 </value></red>
|
||||
<green><value> 0.4 </value></green>
|
||||
<blue><value> 0.4 </value></blue>
|
||||
<alpha><value> 0.05 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>12</value>
|
||||
</size>
|
||||
</end>
|
||||
|
||||
<life-sec>
|
||||
<value>90</value>
|
||||
</life-sec>
|
||||
|
||||
<mass-kg> 4.0 </mass-kg>
|
||||
<radius-m> 0.4 </radius-m>
|
||||
</particle>
|
||||
|
||||
<program>
|
||||
<fluid> air </fluid>
|
||||
<gravity type="bool"> true </gravity>
|
||||
<wind typ="bool"> true </wind>
|
||||
</program>
|
||||
|
||||
</particlesystem>
|
||||
|
||||
</PropertyList>
|
95
ZSU-23/Models/emesary/crater_small.xml
Normal file
95
ZSU-23/Models/emesary/crater_small.xml
Normal file
@ -0,0 +1,95 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>crater.ac</path>
|
||||
|
||||
<animation>
|
||||
<object-name>Sphere</object-name>
|
||||
<enable-hot type="bool">true</enable-hot>
|
||||
</animation>
|
||||
|
||||
<particlesystem>
|
||||
<name>explosion-smoke-longterm</name>
|
||||
<texture>smoke.png</texture>
|
||||
|
||||
<emissive type="bool">false</emissive>
|
||||
<lighting type="bool">false</lighting>
|
||||
|
||||
|
||||
<attach>world</attach>
|
||||
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
|
||||
<shooter>
|
||||
<theta-min-deg>0</theta-min-deg>
|
||||
<theta-max-deg>20</theta-max-deg>
|
||||
<phi-min-deg>-180</phi-min-deg>
|
||||
<phi-max-deg>180</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>30</value>
|
||||
<spread>10</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>0</x-min-deg-sec>
|
||||
<y-min-deg-sec>0</y-min-deg-sec>
|
||||
<z-min-deg-sec>0</z-min-deg-sec>
|
||||
<x-max-deg-sec>0</x-max-deg-sec>
|
||||
<y-max-deg-sec>0</y-max-deg-sec>
|
||||
<z-max-deg-sec>5</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>2</value>
|
||||
<spread>0</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
|
||||
<align>billboard</align>
|
||||
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red><value> 0.3 </value></red>
|
||||
<green><value> 0.3 </value></green>
|
||||
<blue><value> 0.25 </value></blue>
|
||||
<alpha><value> 0.3 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>6</value>
|
||||
</size>
|
||||
</start>
|
||||
|
||||
<end>
|
||||
<color>
|
||||
<red><value> 0.4 </value></red>
|
||||
<green><value> 0.4 </value></green>
|
||||
<blue><value> 0.4 </value></blue>
|
||||
<alpha><value> 0.05 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>10</value>
|
||||
</size>
|
||||
</end>
|
||||
|
||||
<life-sec>
|
||||
<value>50</value>
|
||||
</life-sec>
|
||||
|
||||
<mass-kg> 5.0 </mass-kg>
|
||||
<radius-m> 0.4 </radius-m>
|
||||
</particle>
|
||||
|
||||
<program>
|
||||
<fluid> air </fluid>
|
||||
<gravity type="bool"> true </gravity>
|
||||
<wind typ="bool"> true </wind>
|
||||
</program>
|
||||
|
||||
</particlesystem>
|
||||
|
||||
</PropertyList>
|
87
ZSU-23/Models/emesary/heavy_smoke.xml
Normal file
87
ZSU-23/Models/emesary/heavy_smoke.xml
Normal file
@ -0,0 +1,87 @@
|
||||
<PropertyList>
|
||||
|
||||
<path>aim-emesary.ac</path>
|
||||
|
||||
<particlesystem>
|
||||
<name>emesary-heavy-smoke</name>
|
||||
<texture>smoke.png</texture>
|
||||
|
||||
<emissive type="bool">false</emissive>
|
||||
<lighting type="bool">false</lighting>
|
||||
|
||||
<attach>world</attach>
|
||||
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
|
||||
<shooter>
|
||||
<theta-min-deg>-1.5</theta-min-deg>
|
||||
<theta-max-deg>1.5</theta-max-deg>
|
||||
<phi-min-deg>-1.5</phi-min-deg>
|
||||
<phi-max-deg>1.5</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>0</value>
|
||||
<spread>0</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>0</x-min-deg-sec>
|
||||
<y-min-deg-sec>0</y-min-deg-sec>
|
||||
<z-min-deg-sec>0</z-min-deg-sec>
|
||||
<x-max-deg-sec>0</x-max-deg-sec>
|
||||
<y-max-deg-sec>0</y-max-deg-sec>
|
||||
<z-max-deg-sec>0</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>100</value>
|
||||
<spread>0</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
|
||||
<align>billboard</align>
|
||||
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red><value> 0.3 </value></red>
|
||||
<green><value> 0.3 </value></green>
|
||||
<blue><value> 0.2 </value></blue>
|
||||
<alpha><value> 0.5 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>9</value>
|
||||
</size>
|
||||
</start>
|
||||
|
||||
<end>
|
||||
<color>
|
||||
<red><value> 0.2 </value></red>
|
||||
<green><value> 0.2 </value></green>
|
||||
<blue><value> 0.2 </value></blue>
|
||||
<alpha><value> 0.1 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>15</value>
|
||||
</size>
|
||||
</end>
|
||||
|
||||
<life-sec>
|
||||
<value>50</value>
|
||||
</life-sec>
|
||||
|
||||
<mass-kg> 0.5 </mass-kg>
|
||||
<radius-m> 0.5 </radius-m>
|
||||
</particle>
|
||||
|
||||
<program>
|
||||
<fluid> air </fluid>
|
||||
<gravity type="bool"> true </gravity>
|
||||
<wind typ="bool"> true </wind>
|
||||
</program>
|
||||
|
||||
</particlesystem>
|
||||
|
||||
</PropertyList>
|
87
ZSU-23/Models/emesary/light_smoke.xml
Normal file
87
ZSU-23/Models/emesary/light_smoke.xml
Normal file
@ -0,0 +1,87 @@
|
||||
<PropertyList>
|
||||
|
||||
<path>aim-emesary.ac</path>
|
||||
|
||||
<particlesystem>
|
||||
<name>emesary-light-smoke</name>
|
||||
<texture>smoke.png</texture>
|
||||
|
||||
<emissive type="bool">false</emissive>
|
||||
<lighting type="bool">false</lighting>
|
||||
|
||||
<attach>world</attach>
|
||||
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
|
||||
<shooter>
|
||||
<theta-min-deg>-1.5</theta-min-deg>
|
||||
<theta-max-deg>1.5</theta-max-deg>
|
||||
<phi-min-deg>-1.5</phi-min-deg>
|
||||
<phi-max-deg>1.5</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>0</value>
|
||||
<spread>0</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>0</x-min-deg-sec>
|
||||
<y-min-deg-sec>0</y-min-deg-sec>
|
||||
<z-min-deg-sec>0</z-min-deg-sec>
|
||||
<x-max-deg-sec>0</x-max-deg-sec>
|
||||
<y-max-deg-sec>0</y-max-deg-sec>
|
||||
<z-max-deg-sec>0</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>100</value>
|
||||
<spread>0</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
|
||||
<align>billboard</align>
|
||||
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red><value> 1.0 </value></red>
|
||||
<green><value> 1.0 </value></green>
|
||||
<blue><value> 0.9 </value></blue>
|
||||
<alpha><value> 0.5 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>1.5</value>
|
||||
</size>
|
||||
</start>
|
||||
|
||||
<end>
|
||||
<color>
|
||||
<red><value> 0.9 </value></red>
|
||||
<green><value> 0.9 </value></green>
|
||||
<blue><value> 0.9 </value></blue>
|
||||
<alpha><value> 0.1 </value></alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>3</value>
|
||||
</size>
|
||||
</end>
|
||||
|
||||
<life-sec>
|
||||
<value>50</value>
|
||||
</life-sec>
|
||||
|
||||
<mass-kg> 0.5 </mass-kg>
|
||||
<radius-m> 0.5 </radius-m>
|
||||
</particle>
|
||||
|
||||
<program>
|
||||
<fluid> air </fluid>
|
||||
<gravity type="bool"> true </gravity>
|
||||
<wind typ="bool"> true </wind>
|
||||
</program>
|
||||
|
||||
</particlesystem>
|
||||
|
||||
</PropertyList>
|
39964
ZSU-23/Models/emesary/parachutist.ac
Normal file
39964
ZSU-23/Models/emesary/parachutist.ac
Normal file
File diff suppressed because it is too large
Load Diff
12
ZSU-23/Models/emesary/parachutist.xml
Normal file
12
ZSU-23/Models/emesary/parachutist.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>parachutist.ac</path>
|
||||
<offsets>
|
||||
<x-m> 0.5</x-m>
|
||||
<y-m> 0.000</y-m>
|
||||
<z-m> 1.50</z-m>
|
||||
</offsets>
|
||||
|
||||
</PropertyList>
|
BIN
ZSU-23/Models/emesary/smoke.png
Normal file
BIN
ZSU-23/Models/emesary/smoke.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
144
ZSU-23/Models/emesary/the-flare.xml
Normal file
144
ZSU-23/Models/emesary/the-flare.xml
Normal file
@ -0,0 +1,144 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>Models/Effects/procedural_light.ac</path>
|
||||
|
||||
<animation>
|
||||
<type>scale</type>
|
||||
<object-name>procedural_light</object-name>
|
||||
<x-offset>1000</x-offset>
|
||||
<y-offset>1000</y-offset>
|
||||
<z-offset>1000</z-offset>
|
||||
</animation>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Effects/procedural-light</inherits-from>
|
||||
<object-name>procedural_light</object-name>
|
||||
<parameters>
|
||||
<light_color_base_r type="float">0.84</light_color_base_r>
|
||||
<light_color_base_g type="float">0.55</light_color_base_g>
|
||||
<light_color_base_b type="float">0.42</light_color_base_b>
|
||||
<light_color_center_r type="float">1.0</light_color_center_r>
|
||||
<light_color_center_g type="float">0.9</light_color_center_g>
|
||||
<light_color_center_b type="float">0.7</light_color_center_b>
|
||||
<intensity_scale type="float">1.0</intensity_scale>
|
||||
<is_directional type="bool">false</is_directional>
|
||||
<is_strobe type="bool">false</is_strobe>
|
||||
<outer_gain type="float">1</outer_gain>
|
||||
</parameters>
|
||||
</effect>
|
||||
|
||||
<animation>
|
||||
<type>dist-scale</type>
|
||||
<object-name>procedural_light</object-name>
|
||||
<interpolation>
|
||||
<entry><ind>0</ind> <dep>0.0075</dep></entry>
|
||||
<entry><ind>3750</ind> <dep>0.750</dep></entry>
|
||||
<entry><ind>10000</ind><dep>1.000</dep></entry>
|
||||
</interpolation>
|
||||
</animation>
|
||||
|
||||
<particlesystem>
|
||||
<name>flare-smoke</name>
|
||||
<texture>smoke.png</texture>
|
||||
<emissive>false</emissive>
|
||||
<lighting>false</lighting>
|
||||
|
||||
<offsets>
|
||||
<x-m>0</x-m>
|
||||
<y-m>0</y-m>
|
||||
<z-m>0</z-m>
|
||||
<pitch-deg>90</pitch-deg>
|
||||
<roll-deg>90</roll-deg>
|
||||
</offsets>
|
||||
|
||||
<attach>world</attach>
|
||||
|
||||
<placer>
|
||||
<type>point</type>
|
||||
</placer>
|
||||
|
||||
<shooter>
|
||||
<theta-min-deg>-5</theta-min-deg>
|
||||
<theta-max-deg>5</theta-max-deg>
|
||||
<phi-min-deg>-5</phi-min-deg>
|
||||
<phi-max-deg>5</phi-max-deg>
|
||||
<speed-mps>
|
||||
<value>0</value>
|
||||
<spread>2</spread>
|
||||
</speed-mps>
|
||||
<rotation-speed>
|
||||
<x-min-deg-sec>10</x-min-deg-sec>
|
||||
<y-min-deg-sec>10</y-min-deg-sec>
|
||||
<z-min-deg-sec>10</z-min-deg-sec>
|
||||
<x-max-deg-sec>40</x-max-deg-sec>
|
||||
<y-max-deg-sec>40</y-max-deg-sec>
|
||||
<z-max-deg-sec>40</z-max-deg-sec>
|
||||
</rotation-speed>
|
||||
</shooter>
|
||||
|
||||
<counter>
|
||||
<particles-per-sec>
|
||||
<value>25</value>
|
||||
<spread>5</spread>
|
||||
</particles-per-sec>
|
||||
</counter>
|
||||
|
||||
<align>billboard</align>
|
||||
|
||||
<particle>
|
||||
<start>
|
||||
<color>
|
||||
<red>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</red>
|
||||
<green>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</green>
|
||||
<blue>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</blue>
|
||||
<alpha>
|
||||
<value>1</value>
|
||||
</alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>0.6</value>
|
||||
</size>
|
||||
</start>
|
||||
<end>
|
||||
<color>
|
||||
<red>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</red>
|
||||
<green>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</green>
|
||||
<blue>
|
||||
<expression><product><value>0.9</value><property>/rendering/scene/diffuse/red</property></product></expression>
|
||||
</blue>
|
||||
<alpha>
|
||||
<value>0.05</value>
|
||||
</alpha>
|
||||
</color>
|
||||
<size>
|
||||
<value>6.0</value>
|
||||
</size>
|
||||
</end>
|
||||
<life-sec>
|
||||
<value>2.75</value>
|
||||
</life-sec>
|
||||
<mass-kg>0.00001</mass-kg>
|
||||
<radius-m>0.015</radius-m>
|
||||
</particle>
|
||||
|
||||
<program>
|
||||
<fluid>air</fluid>
|
||||
<gravity type="bool">false</gravity>
|
||||
<wind type="bool">true</wind>
|
||||
</program>
|
||||
|
||||
</particlesystem>
|
||||
|
||||
</PropertyList>
|
121946
ZSU-23/Models/zsu-23.ac
Normal file
121946
ZSU-23/Models/zsu-23.ac
Normal file
File diff suppressed because it is too large
Load Diff
260
ZSU-23/Nasal/ArmamentNotification.nas
Normal file
260
ZSU-23/Nasal/ArmamentNotification.nas
Normal file
@ -0,0 +1,260 @@
|
||||
#
|
||||
#
|
||||
# Use to transmit events that happen at a specific place; can be used to make
|
||||
# models that are simulated locally (e.g. tankers) appear on other player's MP sessions.
|
||||
var ArmamentNotification_Id = 19;
|
||||
|
||||
var ArmamentNotification =
|
||||
{
|
||||
# new:
|
||||
# _ident - the identifier for the notification. not bridged.
|
||||
# _name - name of the notification, bridged.
|
||||
# _kind - created, moved, deleted, impact (see notifications.nas)
|
||||
# _secondary_kind - This is the entity on which the activity is being performed. See below for predefined types.
|
||||
##
|
||||
new: func(_ident="none", _kind=0, _secondary_kind=0)
|
||||
{
|
||||
var new_class = emesary.Notification.new("ArmamentNotification", _ident, ArmamentNotification_Id);
|
||||
|
||||
new_class.Kind = _kind;
|
||||
new_class.SecondaryKind = _secondary_kind;
|
||||
new_class.RelativeAltitude = 0;
|
||||
new_class.IsDistinct = 0;
|
||||
new_class.Distance = 0;
|
||||
new_class.Bearing = 0;
|
||||
new_class.RemoteCallsign = ""; # associated remote callsign.
|
||||
|
||||
new_class.bridgeProperties = func
|
||||
{
|
||||
return
|
||||
[
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Kind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Kind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.SecondaryKind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.SecondaryKind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(new_class.RelativeAltitude,2,1/10);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,2,1/10,pos);new_class.RelativeAltitude=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(new_class.Distance,2,1/10);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,2,1/10,pos);new_class.Distance=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(geo.normdeg180(new_class.Bearing),1,1.54);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,1,1.54,pos);new_class.Bearing=geo.normdeg(dv.value);return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferString.encode(new_class.RemoteCallsign);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferString.decode(v,pos);new_class.RemoteCallsign=dv.value;return dv},
|
||||
},
|
||||
];
|
||||
};
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
|
||||
var ArmamentInFlightNotification_Id = 21;
|
||||
var ArmamentInFlightNotification =
|
||||
{
|
||||
# new:
|
||||
# _ident - the identifier for the notification. not bridged.
|
||||
# _name - name of the notification, bridged.
|
||||
# _kind - created, moved, deleted (see below). This is the activity that the notification represents, called kind to avoid confusion with notification type.
|
||||
# _secondary_kind - This is the entity on which the activity is being performed. See below for predefined types.
|
||||
#
|
||||
# UniqueIdentity - an identity that is unique to the sending instance of FG. Can be combined with the callsign to create an MP unique ID.
|
||||
##
|
||||
new: func(_ident="none", _unique=0, _kind=0, _secondary_kind=0)
|
||||
{
|
||||
var new_class = emesary.Notification.new("ArmamentInFlightNotification", _ident, ArmamentInFlightNotification_Id);
|
||||
|
||||
new_class.Kind = _kind;
|
||||
new_class.SecondaryKind = _secondary_kind;
|
||||
new_class.Position = geo.aircraft_position();
|
||||
new_class.UniqueIndex = 0;
|
||||
|
||||
new_class.Heading = 360;
|
||||
new_class.Pitch = 90;
|
||||
new_class.u_fps = 0;
|
||||
new_class.IsDistinct = 0;
|
||||
new_class.Callsign = nil; # populated automatically by the incoming bridge when routed
|
||||
new_class.RemoteCallsign = ""; # associated remote callsign.
|
||||
new_class.Flags = 0; # 8 bits for whatever.
|
||||
new_class.UniqueIdentity = _unique;
|
||||
|
||||
new_class.GetBridgeMessageNotificationTypeKey = func {
|
||||
return new_class.NotificationType~"."~new_class.Ident~"."~new_class.UniqueIndex;
|
||||
};
|
||||
new_class.bridgeProperties = func
|
||||
{
|
||||
return
|
||||
[
|
||||
{
|
||||
getValue:func{return emesary.TransferCoord.encode(new_class.Position);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferCoord.decode(v, pos);new_class.Position=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Kind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Kind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.SecondaryKind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.SecondaryKind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
#0..6696 fps (3967kts), mach 6.1 (SL) - factor 0.03703
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(new_class.u_fps-3348,1,1/0.03703);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,1,1/0.03703,pos);new_class.u_fps=dv.value+3348;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(geo.normdeg180(new_class.Heading),1,1.54);},#1.0/0.65
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,1,1.54,pos);new_class.Heading=geo.normdeg(dv.value);return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(new_class.Pitch, 1, 1/1.38);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,1, 1/1.38, pos);new_class.Pitch=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferString.encode(new_class.RemoteCallsign);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferString.decode(v,pos);new_class.RemoteCallsign=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Flags);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Flags=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.UniqueIdentity);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.UniqueIdentity=dv.value;return dv},
|
||||
},
|
||||
|
||||
];
|
||||
};
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
||||
var StaticNotification_Id = 25;
|
||||
var StaticNotification =
|
||||
{
|
||||
# new:
|
||||
# _ident - the identifier for the notification. not bridged.
|
||||
# _kind - created, moved, deleted (see below). This is the activity that the notification represents, called kind to avoid confusion with notification type.
|
||||
# _secondary_kind - This is the entity on which the activity is being performed. See below for predefined types.
|
||||
#
|
||||
# UniqueIdentity - an identity that is unique to the sending instance of FG. Can be combined with the callsign to create an MP unique ID.
|
||||
##
|
||||
new: func(_ident="stat", _unique=0, _kind=0, _secondary_kind=0)
|
||||
{
|
||||
var new_class = emesary.Notification.new("StaticNotification", _ident, StaticNotification_Id);
|
||||
# _ident -> "stat"
|
||||
new_class.UniqueIdentity = _unique; # random from 0 to 15000000 that identifies each static object
|
||||
new_class.Kind = _kind; # 1=create, 2=move, 3=delete, 4=request_all
|
||||
new_class.SecondaryKind = _secondary_kind; # 0 = small crater, 1 = big crater, 2 = smoke
|
||||
new_class.IsDistinct = 0; # keep it 0
|
||||
new_class.Callsign = nil; # populated automatically by the incoming bridge when routed
|
||||
|
||||
new_class.Position = geo.aircraft_position(); # position
|
||||
new_class.Heading = 360; # heading
|
||||
new_class.Flags1 = 0; # 7 bits for whatever.
|
||||
new_class.Flags2 = 0; # 7 bits for whatever.
|
||||
|
||||
new_class.GetBridgeMessageNotificationTypeKey = func {
|
||||
return new_class.NotificationType~"."~new_class.Ident~"."~new_class.UniqueIdentity;
|
||||
};
|
||||
new_class.bridgeProperties = func
|
||||
{
|
||||
return
|
||||
[
|
||||
{
|
||||
getValue:func{return emesary.TransferCoord.encode(new_class.Position);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferCoord.decode(v, pos);new_class.Position=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Kind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Kind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.SecondaryKind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.SecondaryKind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferFixedDouble.encode(geo.normdeg180(new_class.Heading),1,1.54);},#1.0/0.65
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferFixedDouble.decode(v,1,1.54,pos);new_class.Heading=geo.normdeg(dv.value);return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Flags1);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Flags1=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Flags2);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Flags2=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferInt.encode(new_class.UniqueIdentity,3);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferInt.decode(v,3,pos);new_class.UniqueIdentity=dv.value;return dv},
|
||||
},
|
||||
];
|
||||
};
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
|
||||
var ObjectInFlightNotification_Id = 22;
|
||||
var ObjectInFlightNotification =
|
||||
{
|
||||
# new:
|
||||
# _ident - the identifier for the notification. not bridged.
|
||||
# _name - name of the notification, bridged.
|
||||
# _kind - created, moved, deleted (see below). This is the activity that the notification represents, called kind to avoid confusion with notification type.
|
||||
# _secondary_kind - This is the entity on which the activity is being performed. See below for predefined types.
|
||||
#
|
||||
# UniqueIdentity - an identity that is unique to the sending instance of FG. Can be combined with the callsign to create an MP unique ID.
|
||||
##
|
||||
new: func(_ident="none", _unique=0, _kind=0, _secondary_kind=0)
|
||||
{
|
||||
var new_class = emesary.Notification.new("ObjectInFlightNotification", _ident, ObjectInFlightNotification_Id);
|
||||
|
||||
new_class.Kind = _kind;
|
||||
new_class.SecondaryKind = _secondary_kind;
|
||||
new_class.Position = geo.aircraft_position();
|
||||
new_class.UniqueIndex = 0;
|
||||
new_class.IsDistinct = 1;
|
||||
new_class.Callsign = nil; # populated automatically by the incoming bridge when routed
|
||||
new_class.UniqueIdentity = _unique;
|
||||
|
||||
new_class.GetBridgeMessageNotificationTypeKey = func {
|
||||
return new_class.NotificationType~"."~new_class.Ident~"."~new_class.UniqueIndex;
|
||||
};
|
||||
new_class.bridgeProperties = func
|
||||
{
|
||||
return
|
||||
[
|
||||
{
|
||||
getValue:func{return emesary.TransferCoord.encode(new_class.Position);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferCoord.decode(v, pos);new_class.Position=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.Kind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.Kind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.SecondaryKind);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.SecondaryKind=dv.value;return dv},
|
||||
},
|
||||
{
|
||||
getValue:func{return emesary.TransferByte.encode(new_class.UniqueIdentity);},
|
||||
setValue:func(v,root,pos){var dv=emesary.TransferByte.decode(v,pos);new_class.UniqueIdentity=dv.value;return dv},
|
||||
},
|
||||
|
||||
];
|
||||
};
|
||||
return new_class;
|
||||
},
|
||||
};
|
53
ZSU-23/Nasal/GeoBridgedTransmitter.nas
Normal file
53
ZSU-23/Nasal/GeoBridgedTransmitter.nas
Normal file
@ -0,0 +1,53 @@
|
||||
# Emesary bridged transmitter for armament notifications.
|
||||
#
|
||||
# Richard Harrison 2017
|
||||
#
|
||||
# NOTES:
|
||||
# 1.The incoming bridges that is defined here will apply to all models that
|
||||
# are loaded over MP; it is better to create the bridges here rather than in the model.xml
|
||||
# So given that we don't want a bridge on all MP models only those that are on OPRF
|
||||
# aircraft that want to receive notifications we will create the incoming bridge here
|
||||
# and thus only an OPRF model will receive notifications from another OPRF model.
|
||||
#
|
||||
# 2. The Emesary MP bridge requires two sides; the outgoing and incoming.
|
||||
# - The outgoing aircraft will forwards all received notifications via MP;
|
||||
# and these will be received by a similarly equipped craft.
|
||||
# - The receiving aircraft will receive all notifications from other MP craft via
|
||||
# the globalTransmitter - which is bridged via property #18 /sim/multiplay/emesary/bridge[18]
|
||||
#------------------------------------------------------------------------------------------
|
||||
|
||||
# Setup the bridge
|
||||
# armament notification 24 bytes
|
||||
# geoEventNotification - 34 bytes + the length of the RemoteCallsign and Name fields.
|
||||
#NOTE: due to bug in Emesary MP Bridge (fixed in 2019.2 after 24/3/2020) we can only
|
||||
# reliably send one message type per bridge - so for the maximum compatibility
|
||||
# we will use two bridges.
|
||||
# If at some point in the future we target 2019.2 as a min ver we can use a single
|
||||
# bridge and setup the notification list to contain all of the armament hit/flying notifications
|
||||
#i.e. change to [notifications.ArmamentInFlightNotification.new(nil), notifications.ArmamentNotification.new(nil)];
|
||||
var geoRoutedNotifications = [notifications.ArmamentInFlightNotification.new()];
|
||||
var geoBridgedTransmitter = emesary.Transmitter.new("geoOutgoingBridge");
|
||||
var geooutgoingBridge = emesary_mp_bridge.OutgoingMPBridge.new("mp.geo",geoRoutedNotifications, 18, "", geoBridgedTransmitter);
|
||||
|
||||
# bridge should be tuned to be around 90% of the packet size full.
|
||||
geooutgoingBridge.TransmitFrequencySeconds = 0.75;
|
||||
geooutgoingBridge.MPStringMaxLen = 150;
|
||||
emesary_mp_bridge.IncomingMPBridge.startMPBridge(geoRoutedNotifications, 18, emesary.GlobalTransmitter);
|
||||
|
||||
|
||||
#----- bridge hit (armament) notifications
|
||||
var hitRoutedNotifications = [notifications.ArmamentNotification.new(),notifications.StaticNotification.new()];
|
||||
var hitBridgedTransmitter = emesary.Transmitter.new("armamentNotificationBridge");
|
||||
var hitoutgoingBridge = emesary_mp_bridge.OutgoingMPBridge.new("mp.hit",hitRoutedNotifications, 19, "", hitBridgedTransmitter);
|
||||
hitoutgoingBridge.TransmitFrequencySeconds = 1.5;
|
||||
hitoutgoingBridge.MPStringMaxLen = 120;
|
||||
emesary_mp_bridge.IncomingMPBridge.startMPBridge(hitRoutedNotifications, 19, emesary.GlobalTransmitter);
|
||||
|
||||
#----- bridge object notifications
|
||||
var objectRoutedNotifications = [notifications.ObjectInFlightNotification.new()];
|
||||
var objectBridgedTransmitter = emesary.Transmitter.new("objectNotificationBridge");
|
||||
var objectoutgoingBridge = emesary_mp_bridge.OutgoingMPBridge.new("mp.object",objectRoutedNotifications, 17, "", objectBridgedTransmitter);
|
||||
objectoutgoingBridge.TransmitFrequencySeconds = 0.2;
|
||||
objectoutgoingBridge.MessageLifeTime = 1;
|
||||
objectoutgoingBridge.MPStringMaxLen = 150;
|
||||
emesary_mp_bridge.IncomingMPBridge.startMPBridge(objectRoutedNotifications, 17, emesary.GlobalTransmitter);
|
1267
ZSU-23/Nasal/damage.nas
Normal file
1267
ZSU-23/Nasal/damage.nas
Normal file
File diff suppressed because it is too large
Load Diff
16
ZSU-23/Nasal/dialogs.nas
Normal file
16
ZSU-23/Nasal/dialogs.nas
Normal file
@ -0,0 +1,16 @@
|
||||
# Copyright (C) 2015 onox
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
var control_panel = gui.Dialog.new("sim/gui/dialogs/control-panel/dialog", "Aircraft/CVN-70/Dialogs/control-panel.xml");
|
100
ZSU-23/Nasal/fdm.nas
Normal file
100
ZSU-23/Nasal/fdm.nas
Normal file
@ -0,0 +1,100 @@
|
||||
# Copyright (C) 2015 onox
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#io.include("Aircraft/ExpansionPack/Nasal/init.nas");
|
||||
|
||||
#with("updateloop");
|
||||
|
||||
print("loading fdm");
|
||||
|
||||
# Number of iterations per second
|
||||
var frequency = 60.0;
|
||||
|
||||
# Change in heading per second at full rudder deflection
|
||||
var heading_ps = 0.5;
|
||||
|
||||
time_last = 0;
|
||||
sim_speed = 1;
|
||||
|
||||
setprop("/carrier/pitch-deg",0);
|
||||
setprop("/carrier/pitch-offset",0);
|
||||
setprop("/carrier/roll-deg",0);
|
||||
setprop("/carrier/roll-offset",0);
|
||||
setprop("/carrier/sunk",0);
|
||||
var arrived = 0;
|
||||
var PositionUpdater = func () {
|
||||
|
||||
settimer( PositionUpdater, 1/frequency );
|
||||
|
||||
var position = geo.aircraft_position();
|
||||
|
||||
if ( arrived == 0 and getprop("/carrier/sunk") == 0 and getprop("/autopilot/route-manager/wp-last/dist") != nil and getprop("/autopilot/route-manager/wp-last/dist") < 1 ) {
|
||||
setprop("/sim/multiplay/chat",getprop("sim/multiplay/callsign") ~ " has arrived safely!");
|
||||
print("arrived");
|
||||
arrived = 1;
|
||||
#return;
|
||||
}
|
||||
|
||||
var time_now = getprop("/sim/time/elapsed-sec");
|
||||
var dt = (time_now - time_last) * sim_speed;
|
||||
if (dt == 0) return;
|
||||
|
||||
time_last = time_now;
|
||||
|
||||
#var heading = getprop("/orientation/heading-deg");
|
||||
#var speed = getprop("/velocities/groundspeed-kt");
|
||||
var rudder = getprop("/surface-positions/rudder-pos-norm");
|
||||
|
||||
if ( getprop("/carrier/sunk") == 0 and getprop("/autopilot/route-manager/active") == 1 ) {
|
||||
|
||||
#for event
|
||||
var speed = 25;
|
||||
var cur_waypoint = getprop("/autopilot/route-manager/current-wp");
|
||||
var cur_wp_lon = getprop("/autopilot/route-manager/route/wp[" ~ cur_waypoint ~ "]/longitude-deg");
|
||||
var cur_wp_lat = getprop("/autopilot/route-manager/route/wp[" ~ cur_waypoint ~ "]/latitude-deg");
|
||||
var rm_destination = geo.Coord.new().set_latlon(cur_wp_lat,cur_wp_lon);
|
||||
|
||||
|
||||
var heading = position.course_to(rm_destination);
|
||||
|
||||
var distance = speed * globals.KT2MPS * dt;
|
||||
position.apply_course_distance(heading, distance);
|
||||
|
||||
# Set new position
|
||||
setprop("/position/latitude-deg", position.lat());
|
||||
setprop("/position/longitude-deg", position.lon());
|
||||
var g_alt = getprop("/position/ground-elev-ft")+1;
|
||||
setprop("/position/altitude-ft",g_alt);
|
||||
|
||||
|
||||
|
||||
|
||||
# Update heading
|
||||
var course = heading + rudder * heading_ps * dt;
|
||||
setprop("/orientation/heading-deg", course);
|
||||
setprop("velocities/groundspeed-kt",speed);
|
||||
} else {
|
||||
setprop("velocities/groundspeed-kt",0);
|
||||
}
|
||||
|
||||
#set pitch
|
||||
setprop("/orientation/pitch-deg",getprop("/carrier/pitch-deg") + getprop("/carrier/pitch-offset"));
|
||||
|
||||
#set roll
|
||||
setprop("/orientation/roll-deg",getprop("/carrier/roll-deg") + getprop("/carrier/roll-offset"));
|
||||
|
||||
};
|
||||
|
||||
PositionUpdater();
|
338
ZSU-23/Nasal/vector.nas
Normal file
338
ZSU-23/Nasal/vector.nas
Normal file
@ -0,0 +1,338 @@
|
||||
var Math = {
|
||||
#
|
||||
# Authors: Nikolai V. Chr, Axel Paccalin.
|
||||
#
|
||||
# Version 1.93
|
||||
#
|
||||
# When doing euler coords. to cartesian: +x = forw, +y = left, +z = up.
|
||||
# FG struct. coords: +x = back, +y = right, +z = up.
|
||||
#
|
||||
# If euler to cartesian (with inverted heading) then:
|
||||
# cartesian vector will be x: north, y: west, z: skyward
|
||||
#
|
||||
# When doing euler angles (from pilots point of view): yaw = yaw left, pitch = rotate up, roll = roll right.
|
||||
# FG rotations: heading = yaw right, pitch = rotate up, roll = roll right.
|
||||
#
|
||||
clamp: func(v, min, max) { v < min ? min : v > max ? max : v },
|
||||
|
||||
convertCoords: func (x,y,z) {
|
||||
return [-x, -y, z];
|
||||
},
|
||||
|
||||
convertAngles: func (heading,pitch,roll) {
|
||||
return [-heading, pitch, roll];
|
||||
},
|
||||
|
||||
# returns direction in geo coordinate system
|
||||
vectorToGeoVector: func (a, coord) {
|
||||
me.handp = me.cartesianToEuler(a);
|
||||
me.end_dist_m = 100;# not too low for floating point precision. Not too high to get into earth curvature stuff.
|
||||
me.tgt_coord = geo.Coord.new(coord);
|
||||
if (me.handp[0] != nil) {
|
||||
me.tgt_coord.apply_course_distance(me.handp[0],me.end_dist_m);
|
||||
me.upamount = me.end_dist_m * math.tan(me.handp[1]*D2R);
|
||||
} elsif (me.handp[1] == 90) {
|
||||
me.upamount = me.end_dist_m;
|
||||
} else {
|
||||
me.upamount = -me.end_dist_m;
|
||||
}
|
||||
me.tgt_coord.set_alt(coord.alt()+me.upamount);
|
||||
|
||||
return {"x":me.tgt_coord.x()-coord.x(), "y":me.tgt_coord.y()-coord.y(), "z":me.tgt_coord.z()-coord.z()};
|
||||
},
|
||||
|
||||
# When observing another MP aircraft the groundspeed velocity info is in body frame, this method will convert it to cartesian vector.
|
||||
getCartesianVelocity: func (yaw_deg, pitch_deg, roll_deg, uBody_fps, vBody_fps, wBody_fps) {
|
||||
me.bodyVelocity = [uBody_fps, -vBody_fps, -wBody_fps];
|
||||
return me.yawPitchRollVector(yaw_deg, pitch_deg, roll_deg, me.bodyVelocity);
|
||||
},
|
||||
|
||||
# angle between 2 vectors. Returns 0-180 degrees.
|
||||
angleBetweenVectors: func (a,b) {
|
||||
a = me.normalize(a);
|
||||
b = me.normalize(b);
|
||||
me.value = me.clamp((me.dotProduct(a,b)/me.magnitudeVector(a))/me.magnitudeVector(b),-1,1);#just to be safe in case some floating point error makes it out of bounds
|
||||
return R2D * math.acos(me.value);
|
||||
},
|
||||
|
||||
# length of vector
|
||||
magnitudeVector: func (a) {
|
||||
return math.sqrt(math.pow(a[0],2)+math.pow(a[1],2)+math.pow(a[2],2));
|
||||
},
|
||||
|
||||
# dot product of 2 vectors
|
||||
dotProduct: func (a,b) {
|
||||
return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];
|
||||
},
|
||||
|
||||
# rotate a vector. Order: roll, pitch, yaw
|
||||
rollPitchYawVector: func (roll, pitch, yaw, vector) {
|
||||
me.rollM = me.rollMatrix(roll);
|
||||
me.pitchM = me.pitchMatrix(pitch);
|
||||
me.yawM = me.yawMatrix(yaw);
|
||||
me.rotation = me.multiplyMatrices(me.rollM, me.multiplyMatrices(me.pitchM, me.yawM));
|
||||
return me.multiplyMatrixWithVector(me.rotation, vector);
|
||||
},
|
||||
|
||||
# rotate a vector. Order: yaw, pitch, roll (like an aircraft)
|
||||
yawPitchRollVector: func (yaw, pitch, roll, vector) {
|
||||
me.rollM = me.rollMatrix(roll);
|
||||
me.pitchM = me.pitchMatrix(pitch);
|
||||
me.yawM = me.yawMatrix(yaw);
|
||||
me.rotation = me.multiplyMatrices(me.yawM, me.multiplyMatrices(me.pitchM, me.rollM));
|
||||
return me.multiplyMatrixWithVector(me.rotation, vector);
|
||||
},
|
||||
|
||||
# multiply 3x3 matrix with vector
|
||||
multiplyMatrixWithVector: func (matrix, vector) {
|
||||
return [matrix[0]*vector[0]+matrix[1]*vector[1]+matrix[2]*vector[2],
|
||||
matrix[3]*vector[0]+matrix[4]*vector[1]+matrix[5]*vector[2],
|
||||
matrix[6]*vector[0]+matrix[7]*vector[1]+matrix[8]*vector[2]];
|
||||
},
|
||||
|
||||
# multiply 2 3x3 matrices
|
||||
multiplyMatrices: func (a,b) {
|
||||
return [a[0]*b[0]+a[1]*b[3]+a[2]*b[6], a[0]*b[1]+a[1]*b[4]+a[2]*b[7], a[0]*b[2]+a[1]*b[5]+a[2]*b[8],
|
||||
a[3]*b[0]+a[4]*b[3]+a[5]*b[6], a[3]*b[1]+a[4]*b[4]+a[5]*b[7], a[3]*b[2]+a[4]*b[5]+a[5]*b[8],
|
||||
a[6]*b[0]+a[7]*b[3]+a[8]*b[6], a[6]*b[1]+a[7]*b[4]+a[8]*b[7], a[6]*b[2]+a[7]*b[5]+a[8]*b[8]];
|
||||
},
|
||||
|
||||
# matrix for rolling
|
||||
rollMatrix: func (roll) {
|
||||
roll = roll * D2R;
|
||||
return [1,0,0,
|
||||
0,math.cos(roll),-math.sin(roll),
|
||||
0,math.sin(roll), math.cos(roll)];
|
||||
},
|
||||
|
||||
# matrix for pitching
|
||||
pitchMatrix: func (pitch) {
|
||||
pitch = pitch * D2R;
|
||||
return [math.cos(pitch),0,-math.sin(pitch),
|
||||
0,1,0,
|
||||
math.sin(pitch),0,math.cos(pitch)];
|
||||
},
|
||||
|
||||
# matrix for yawing
|
||||
yawMatrix: func (yaw) {
|
||||
yaw = yaw * D2R;
|
||||
return [math.cos(yaw),-math.sin(yaw),0,
|
||||
math.sin(yaw),math.cos(yaw),0,
|
||||
0,0,1];
|
||||
},
|
||||
|
||||
# vector to heading/pitch
|
||||
cartesianToEuler: func (vector) {
|
||||
me.horz = math.sqrt(vector[0]*vector[0]+vector[1]*vector[1]);
|
||||
if (me.horz != 0) {
|
||||
me.pitch = math.atan2(vector[2],me.horz)*R2D;
|
||||
me.hdg = math.asin(-vector[1]/me.horz)*R2D;
|
||||
|
||||
if (vector[0] < 0) {
|
||||
# south
|
||||
if (me.hdg >= 0) {
|
||||
me.hdg = 180-me.hdg;
|
||||
} else {
|
||||
me.hdg = -180-me.hdg;
|
||||
}
|
||||
}
|
||||
me.hdg = geo.normdeg(me.hdg);
|
||||
} else {
|
||||
me.pitch = vector[2]>=0?90:-90;
|
||||
me.hdg = nil;
|
||||
}
|
||||
return [me.hdg, me.pitch];
|
||||
},
|
||||
|
||||
# gives an vector that points up from fuselage
|
||||
eulerToCartesian3Z: func (yaw_deg, pitch_deg, roll_deg) {
|
||||
me.yaw = yaw_deg * D2R;
|
||||
me.pitch = pitch_deg * D2R;
|
||||
me.roll = roll_deg * D2R;
|
||||
me.x = -math.cos(me.yaw)*math.sin(me.pitch)*math.cos(me.roll) + math.sin(me.yaw)*math.sin(me.roll);
|
||||
me.y = -math.sin(me.yaw)*math.sin(me.pitch)*math.cos(me.roll) - math.cos(me.yaw)*math.sin(me.roll);
|
||||
me.z = math.cos(me.pitch)*math.cos(me.roll);#roll changed from sin to cos, since the rotation matrix is wrong
|
||||
return [me.x,me.y,me.z];
|
||||
},
|
||||
|
||||
# gives an vector that points forward from fuselage
|
||||
eulerToCartesian3X: func (yaw_deg, pitch_deg, roll_deg) {
|
||||
me.yaw = yaw_deg * D2R;
|
||||
me.pitch = pitch_deg * D2R;
|
||||
me.roll = roll_deg * D2R;
|
||||
me.x = math.cos(me.yaw)*math.cos(me.pitch);
|
||||
me.y = math.sin(me.yaw)*math.cos(me.pitch);
|
||||
me.z = math.sin(me.pitch);
|
||||
return [me.x,me.y,me.z];
|
||||
},
|
||||
|
||||
# gives an vector that points left from fuselage
|
||||
eulerToCartesian3Y: func (yaw_deg, pitch_deg, roll_deg) {
|
||||
me.yaw = yaw_deg * D2R;
|
||||
me.pitch = pitch_deg * D2R;
|
||||
me.roll = roll_deg * D2R;
|
||||
me.x = -math.cos(me.yaw)*math.sin(me.pitch)*math.sin(me.roll) - math.sin(me.yaw)*math.cos(me.roll);
|
||||
me.y = -math.sin(me.yaw)*math.sin(me.pitch)*math.sin(me.roll) + math.cos(me.yaw)*math.cos(me.roll);
|
||||
me.z = math.cos(me.pitch)*math.sin(me.roll);
|
||||
return [me.x,me.y,me.z];
|
||||
},
|
||||
|
||||
# same as eulerToCartesian3X, except it needs no roll
|
||||
eulerToCartesian2: func (yaw_deg, pitch_deg) {
|
||||
me.yaw = yaw_deg * D2R;
|
||||
me.pitch = pitch_deg * D2R;
|
||||
me.x = math.cos(me.pitch) * math.cos(me.yaw);
|
||||
me.y = math.cos(me.pitch) * math.sin(me.yaw);
|
||||
me.z = math.sin(me.pitch);
|
||||
return [me.x,me.y,me.z];
|
||||
},
|
||||
|
||||
#pitch from coord1 to coord2 in degrees (takes curvature of earth into effect.)
|
||||
getPitch: func (coord1, coord2) {
|
||||
if (coord1.lat() == coord2.lat() and coord1.lon() == coord2.lon()) {
|
||||
if (coord2.alt() > coord1.alt()) {
|
||||
return 90;
|
||||
} elsif (coord2.alt() < coord1.alt()) {
|
||||
return -90;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (coord1.alt() != coord2.alt()) {
|
||||
me.d12 = coord1.direct_distance_to(coord2);
|
||||
me.coord3 = geo.Coord.new(coord1);
|
||||
me.coord3.set_alt(coord1.alt()-me.d12*0.5);# this will increase the area of the triangle so that rounding errors dont get in the way.
|
||||
me.d13 = coord1.alt()-me.coord3.alt();
|
||||
if (me.d12 == 0) {
|
||||
# on top of each other, maybe rounding error..
|
||||
return 0;
|
||||
}
|
||||
me.d32 = me.coord3.direct_distance_to(coord2);
|
||||
if (math.abs(me.d13)+me.d32 < me.d12) {
|
||||
# rounding errors somewhere..one triangle side is longer than other 2 sides combined.
|
||||
return 0;
|
||||
}
|
||||
# standard formula for a triangle where all 3 side lengths are known:
|
||||
me.len = (math.pow(me.d12, 2)+math.pow(me.d13,2)-math.pow(me.d32, 2))/(2 * me.d12 * math.abs(me.d13));
|
||||
if (me.len < -1 or me.len > 1) {
|
||||
# something went wrong, maybe rounding error..
|
||||
return 0;
|
||||
}
|
||||
me.angle = R2D * math.acos(me.len);
|
||||
me.pitch = -1* (90 - me.angle);
|
||||
#printf("d12 %.4f d32 %.4f d13 %.4f len %.4f pitch %.4f angle %.4f", me.d12, me.d32, me.d13, me.len, me.pitch, me.angle);
|
||||
return me.pitch;
|
||||
} else {
|
||||
# same altitude
|
||||
me.nc = geo.Coord.new();
|
||||
me.nc.set_xyz(0,0,0); # center of earth
|
||||
me.radiusEarth = coord1.direct_distance_to(me.nc);# current distance to earth center
|
||||
me.d12 = coord1.direct_distance_to(coord2);
|
||||
# standard formula for a triangle where all 3 side lengths are known:
|
||||
me.len = (math.pow(me.d12, 2)+math.pow(me.radiusEarth,2)-math.pow(me.radiusEarth, 2))/(2 * me.d12 * me.radiusEarth);
|
||||
if (me.len < -1 or me.len > 1) {
|
||||
# something went wrong, maybe rounding error..
|
||||
return 0;
|
||||
}
|
||||
me.angle = R2D * math.acos(me.len);
|
||||
me.pitch = -1* (90 - me.angle);
|
||||
return me.pitch;
|
||||
}
|
||||
},
|
||||
|
||||
# supply a normal to the plane, and a vector. The vector will be projected onto the plane, and that projection is returned as a vector.
|
||||
projVectorOnPlane: func (planeNormal, vector) {
|
||||
return me.minus(vector, me.product(me.dotProduct(vector,planeNormal)/math.pow(me.magnitudeVector(planeNormal),2), planeNormal));
|
||||
},
|
||||
|
||||
# unary - vector
|
||||
opposite: func (v){
|
||||
# author: Paccalin
|
||||
return [-v[0], -v[1], -v[2]];
|
||||
},
|
||||
|
||||
# vector a - vector b
|
||||
minus: func (a, b) {
|
||||
return [a[0]-b[0], a[1]-b[1], a[2]-b[2]];
|
||||
},
|
||||
|
||||
# vector a + vector b
|
||||
plus: func (a, b) {
|
||||
return [a[0]+b[0], a[1]+b[1], a[2]+b[2]];
|
||||
},
|
||||
|
||||
# float * vector
|
||||
product: func (scalar, vector) {
|
||||
return [scalar*vector[0], scalar*vector[1], scalar*vector[2]]
|
||||
},
|
||||
|
||||
# print vector to console
|
||||
format: func (v) {
|
||||
return sprintf("(%.1f, %.1f, %.1f)",v[0],v[1],v[2]);
|
||||
},
|
||||
|
||||
# make vector length 1.0
|
||||
normalize: func (v) {
|
||||
me.mag = me.magnitudeVector(v);
|
||||
return [v[0]/me.mag, v[1]/me.mag, v[2]/me.mag];
|
||||
},
|
||||
|
||||
crossProduct: func (a,b) {
|
||||
return [a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]];
|
||||
},
|
||||
|
||||
distance_from_point_to_line: func (coordP, coordL1, coordL2) {
|
||||
var P = [coordP.x(), coordP.y(), coordP.z()];
|
||||
var L1 = [coordL1.x(), coordL1.y(), coordL1.z()];
|
||||
var L2 = [coordL2.x(), coordL2.y(), coordL2.z()];
|
||||
|
||||
return me.magnitudeVector(me.crossProduct(me.minus(L2,L1), me.minus(L1,P)))/me.magnitudeVector(me.minus(L2,L1));
|
||||
},
|
||||
|
||||
# Orthogonal projection of a vector `vec` onto another `ref` !!can throw an exception if the referential vector is null!!.
|
||||
orthogonalProjection: func(vec, ref){
|
||||
# author: Paccalin
|
||||
me.op_refMag = me.magnitudeVector(ref);
|
||||
if(me.op_refMag == 0)
|
||||
die("Orthogonal projection on a null vector referential");
|
||||
|
||||
return me.dotProduct(vec, ref) / me.op_refMag;
|
||||
},
|
||||
|
||||
# Time at which two particles will be at shortest distance !!can throw an exception if the relative speed is null!!
|
||||
particleShortestDistTime: func (orig1, speed1, orig2, speed2) {
|
||||
# author: Paccalin
|
||||
# Compute the origin of the second particle in a referential positionally centered on the first particle.
|
||||
me.psdt_tgtOrig = me.minus(orig2, orig1);
|
||||
# Compute the speed of the second particle in a referential inertially based on the first particle.
|
||||
me.psdt_tgtSpeed = me.minus(speed2, speed1);
|
||||
|
||||
# Project the origin of the particle1 referential onto the line supported by the particle2 trajectory in 1 unit of time.
|
||||
# And divide the result by the magnitude of the speed to have it normalized relative to the time.
|
||||
return me.orthogonalProjection(me.opposite(me.psdt_tgtOrig), me.psdt_tgtSpeed) / me.magnitudeVector(me.psdt_tgtSpeed);
|
||||
},
|
||||
|
||||
# rotation matrices
|
||||
#
|
||||
#
|
||||
#| 1 0 0 |
|
||||
#| 0 cos(roll) -sin(roll) |
|
||||
#| 0 sin(roll) cos(roll) |
|
||||
#
|
||||
#| cos(pitch) 0 -sin(pitch) |
|
||||
#| 0 1 0 |
|
||||
#| sin(pitch) 0 cos(pitch) |
|
||||
#
|
||||
#| cos(yaw) -sin(yaw) 0 |
|
||||
#| sin(yaw) cos(yaw) 0 |
|
||||
#| 0 0 1 |
|
||||
#
|
||||
# combined matrix from yaw, pitch, roll:
|
||||
#
|
||||
#| cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(roll)|
|
||||
#| sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(roll)|
|
||||
#| sin(pitch) cos(pitch)sin(roll) cos(pitch)cos(roll)|
|
||||
#
|
||||
#
|
||||
|
||||
};
|
280
ZSU-23/Sim/#views.xml#
Normal file
280
ZSU-23/Sim/#views.xml#
Normal file
@ -0,0 +1,280 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (C) 2008 Alex (D-HUND)
|
||||
Copyright (C) 2009 Vivian Meazza
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<current-view>
|
||||
<view-number type="int">1</view-number>
|
||||
</current-view>
|
||||
|
||||
<chase-distance-m type="double">-200.0</chase-distance-m>
|
||||
|
||||
<view n="0">
|
||||
<name>Cockpit View</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="1">
|
||||
<name>Helicopter View</name>
|
||||
<config>
|
||||
<pitch-offset-deg>-5</pitch-offset-deg>
|
||||
<target-y-offset-m type="double">21.925</target-y-offset-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="2">
|
||||
<name>Chase View</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="5">
|
||||
<name>Chase View Without Yaw</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="100">
|
||||
<name>Hangar View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>2</x-offset-m><!-- right -->
|
||||
<y-offset-m>15</y-offset-m><!-- up -->
|
||||
<z-offset-m>113</z-offset-m><!-- back -->
|
||||
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="101">
|
||||
<name>Phalanx Forward Left</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>-21.1147</x-offset-m><!-- right -->
|
||||
<y-offset-m>16.8345</y-offset-m><!-- up -->
|
||||
<z-offset-m>-121.2666</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="102">
|
||||
<name>Phalanx Forward Right</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.1336</x-offset-m><!-- right -->
|
||||
<y-offset-m>16.6478</y-offset-m><!-- up -->
|
||||
<z-offset-m>-112.684</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="103">
|
||||
<name>Phalanx Aft</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.3165</x-offset-m><!-- right -->
|
||||
<y-offset-m>18.1198</y-offset-m><!-- up -->
|
||||
<z-offset-m>134.344</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="104">
|
||||
<name>Landing Signal Officer View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<x-offset-m>-19.7208</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>100.307</z-offset-m><!-- back -->
|
||||
<pitch-offset-deg>2.5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="105">
|
||||
<name>Approach View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<!-- All these eye-*-deg-path elements are needed because
|
||||
eye-heading-deg-path is overridden.
|
||||
-->
|
||||
<eye-lat-deg-path>/position/latitude-deg</eye-lat-deg-path>
|
||||
<eye-lon-deg-path>/position/longitude-deg</eye-lon-deg-path>
|
||||
<eye-alt-ft-path>/position/altitude-ft</eye-alt-ft-path>
|
||||
<eye-heading-deg-path>/orientation/heading-runway-deg</eye-heading-deg-path>
|
||||
<eye-pitch-deg-path>/orientation/pitch-deg</eye-pitch-deg-path>
|
||||
<eye-roll-deg-path>/orientation/roll-deg</eye-roll-deg-path>
|
||||
|
||||
<x-offset-m>-15.4979</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.9</y-offset-m><!-- up -->
|
||||
<z-offset-m>-8.315</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>3</pitch-offset-deg>
|
||||
<default-field-of-view-deg>25</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="106">
|
||||
<name>Flight Deck Aft View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>10</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>42</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>163</heading-offset-deg>
|
||||
<pitch-offset-deg>5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="107">
|
||||
<name>Flight Deck Forward View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>0</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>-35</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>10</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="108">
|
||||
<name>Bubble View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>4.1</x-offset-m><!-- right -->
|
||||
<y-offset-m>20.325</y-offset-m><!-- up -->
|
||||
<z-offset-m>-93</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>0</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="109">
|
||||
<name>Goofers' View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>27.074</x-offset-m><!-- right -->
|
||||
<y-offset-m>35.3325</y-offset-m><!-- up -->
|
||||
<z-offset-m>42.67</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>136</heading-offset-deg>
|
||||
<pitch-offset-deg>-11</pitch-offset-deg>
|
||||
<default-field-of-view-deg>40</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="110">
|
||||
<name>Primary Flight Control View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.2669</x-offset-m><!-- right -->
|
||||
<y-offset-m>35.082</y-offset-m><!-- up -->
|
||||
<z-offset-m>20.1064</z-offset-m><!-- back -->
|
||||
|
||||
<pitch-offset-deg>-5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="111">
|
||||
<name>Bridge View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>29.2083</x-offset-m><!-- right -->
|
||||
<y-offset-m>33.235233</y-offset-m><!-- up -->
|
||||
<z-offset-m>19.45</z-offset-m><!-- back -->
|
||||
|
||||
<pitch-offset-deg>-2</pitch-offset-deg>
|
||||
<default-field-of-view-deg>45</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
</PropertyList>
|
74
ZSU-23/Sim/mice.xml
Normal file
74
ZSU-23/Sim/mice.xml
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<mouse n="0">
|
||||
|
||||
<mode n="0">
|
||||
<button n="3">
|
||||
<binding n="0">
|
||||
<script></script>
|
||||
</binding>
|
||||
<binding n="1">
|
||||
<condition>
|
||||
<property>/sim/current-view/can-change-z-offset</property>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var distance = getprop("/sim/current-view/z-offset-m");
|
||||
var multiple = getprop("/sim/current-view/z-offset-inc-step");
|
||||
var min_dist = getprop("/sim/current-view/z-offset-min-m");
|
||||
|
||||
# Round distance to a multiple of the step
|
||||
distance = math.round(std.min(-min_dist, distance + multiple) / multiple) * multiple;
|
||||
setprop("/sim/current-view/z-offset-m", distance);
|
||||
|
||||
gui.popupTip(sprintf("%d meter", abs(getprop("/sim/current-view/z-offset-m"))));
|
||||
</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button n="4">
|
||||
<binding n="0">
|
||||
<script></script>
|
||||
</binding>
|
||||
<binding n="1">
|
||||
<condition>
|
||||
<property>/sim/current-view/can-change-z-offset</property>
|
||||
</condition>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var distance = getprop("/sim/current-view/z-offset-m");
|
||||
var multiple = getprop("/sim/current-view/z-offset-dec-step");
|
||||
var max_dist = getprop("/sim/current-view/z-offset-max-m");
|
||||
|
||||
# Round distance to a multiple of the step
|
||||
distance = math.round(std.max(-max_dist, distance + multiple) / multiple) * multiple;
|
||||
setprop("/sim/current-view/z-offset-m", distance);
|
||||
|
||||
gui.popupTip(sprintf("%d meter", abs(getprop("/sim/current-view/z-offset-m"))));
|
||||
</script>
|
||||
</binding>
|
||||
</button>
|
||||
</mode>
|
||||
|
||||
</mouse>
|
||||
|
||||
</PropertyList>
|
280
ZSU-23/Sim/views.xml
Normal file
280
ZSU-23/Sim/views.xml
Normal file
@ -0,0 +1,280 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (C) 2008 Alex (D-HUND)
|
||||
Copyright (C) 2009 Vivian Meazza
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<current-view>
|
||||
<view-number type="int">1</view-number>
|
||||
</current-view>
|
||||
|
||||
<chase-distance-m type="double">-200.0</chase-distance-m>
|
||||
|
||||
<view n="0">
|
||||
<name>Cockpit View</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="1">
|
||||
<name>Helicopter View</name>
|
||||
<config>
|
||||
<pitch-offset-deg>-5</pitch-offset-deg>
|
||||
<target-y-offset-m type="double">21.925</target-y-offset-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="2">
|
||||
<name>Chase View</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="5">
|
||||
<name>Chase View Without Yaw</name>
|
||||
<enabled type="bool">false</enabled>
|
||||
</view>
|
||||
|
||||
<view n="100">
|
||||
<name>Hangar View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>2</x-offset-m><!-- right -->
|
||||
<y-offset-m>15</y-offset-m><!-- up -->
|
||||
<z-offset-m>113</z-offset-m><!-- back -->
|
||||
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="101">
|
||||
<name>Phalanx Forward Left</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>-21.1147</x-offset-m><!-- right -->
|
||||
<y-offset-m>16.8345</y-offset-m><!-- up -->
|
||||
<z-offset-m>-121.2666</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="102">
|
||||
<name>Phalanx Forward Right</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.1336</x-offset-m><!-- right -->
|
||||
<y-offset-m>16.6478</y-offset-m><!-- up -->
|
||||
<z-offset-m>-112.684</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="103">
|
||||
<name>Phalanx Aft</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.3165</x-offset-m><!-- right -->
|
||||
<y-offset-m>18.1198</y-offset-m><!-- up -->
|
||||
<z-offset-m>134.344</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>90</heading-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="104">
|
||||
<name>Landing Signal Officer View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<x-offset-m>-19.7208</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>100.307</z-offset-m><!-- back -->
|
||||
<pitch-offset-deg>2.5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="105">
|
||||
<name>Approach View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<!-- All these eye-*-deg-path elements are needed because
|
||||
eye-heading-deg-path is overridden.
|
||||
-->
|
||||
<eye-lat-deg-path>/position/latitude-deg</eye-lat-deg-path>
|
||||
<eye-lon-deg-path>/position/longitude-deg</eye-lon-deg-path>
|
||||
<eye-alt-ft-path>/position/altitude-ft</eye-alt-ft-path>
|
||||
<eye-heading-deg-path>/orientation/heading-runway-deg</eye-heading-deg-path>
|
||||
<eye-pitch-deg-path>/orientation/pitch-deg</eye-pitch-deg-path>
|
||||
<eye-roll-deg-path>/orientation/roll-deg</eye-roll-deg-path>
|
||||
|
||||
<x-offset-m>-15.4979</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.9</y-offset-m><!-- up -->
|
||||
<z-offset-m>-8.315</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>3</pitch-offset-deg>
|
||||
<default-field-of-view-deg>25</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="106">
|
||||
<name>Flight Deck Aft View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>10</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>42</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>163</heading-offset-deg>
|
||||
<pitch-offset-deg>5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="107">
|
||||
<name>Flight Deck Forward View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>0</x-offset-m><!-- right -->
|
||||
<y-offset-m>21.925</y-offset-m><!-- up -->
|
||||
<z-offset-m>-35</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>10</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="108">
|
||||
<name>Bubble View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>4.1</x-offset-m><!-- right -->
|
||||
<y-offset-m>20.325</y-offset-m><!-- up -->
|
||||
<z-offset-m>-93</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>180</heading-offset-deg>
|
||||
<pitch-offset-deg>0</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="109">
|
||||
<name>Goofers' View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>27.074</x-offset-m><!-- right -->
|
||||
<y-offset-m>35.3325</y-offset-m><!-- up -->
|
||||
<z-offset-m>42.67</z-offset-m><!-- back -->
|
||||
|
||||
<heading-offset-deg>136</heading-offset-deg>
|
||||
<pitch-offset-deg>-11</pitch-offset-deg>
|
||||
<default-field-of-view-deg>40</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="110">
|
||||
<name>Primary Flight Control View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>23.2669</x-offset-m><!-- right -->
|
||||
<y-offset-m>35.082</y-offset-m><!-- up -->
|
||||
<z-offset-m>20.1064</z-offset-m><!-- back -->
|
||||
|
||||
<pitch-offset-deg>-5</pitch-offset-deg>
|
||||
<default-field-of-view-deg>60</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<view n="111">
|
||||
<name>Bridge View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">true</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
|
||||
<x-offset-m>29.2083</x-offset-m><!-- right -->
|
||||
<y-offset-m>33.235233</y-offset-m><!-- up -->
|
||||
<z-offset-m>19.45</z-offset-m><!-- back -->
|
||||
|
||||
<pitch-offset-deg>-2</pitch-offset-deg>
|
||||
<default-field-of-view-deg>45</default-field-of-view-deg>
|
||||
<ground-level-nearplane-m type="double">0.1f</ground-level-nearplane-m>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
</PropertyList>
|
22
ZSU-23/Sounds/sound.xml
Normal file
22
ZSU-23/Sounds/sound.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
</PropertyList>
|
46
ZSU-23/Systems/fbw.xml
Normal file
46
ZSU-23/Systems/fbw.xml
Normal file
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<filter>
|
||||
<name>FBW Throttle</name>
|
||||
<type>gain</type>
|
||||
<gain>80.0</gain>
|
||||
<input>
|
||||
<property>/controls/engines/engine[0]/throttle</property>
|
||||
</input>
|
||||
<output>
|
||||
<property>/carrier/fbw/target/groundspeed-kt</property>
|
||||
</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>FBW Rudder</name>
|
||||
<type>gain</type>
|
||||
<gain>8.0</gain>
|
||||
<input>
|
||||
<property>/controls/flight/rudder</property>
|
||||
</input>
|
||||
<output>
|
||||
<property>/surface-positions/rudder-pos-norm</property>
|
||||
</output>
|
||||
</filter>
|
||||
|
||||
</PropertyList>
|
69
ZSU-23/Systems/fdm.xml
Normal file
69
ZSU-23/Systems/fdm.xml
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Copyright (c) 2015 onox
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<!-- Simulate the groundspeed -->
|
||||
<filter>
|
||||
<name>FDM Groundspeed</name>
|
||||
<type>noise-spike</type>
|
||||
<input>
|
||||
<property>/carrier/fbw/target/groundspeed-kt</property>
|
||||
</input>
|
||||
<output>
|
||||
<property>/velocities/groundspeed-kt</property>
|
||||
</output>
|
||||
|
||||
<!-- Reaching maximum speed takes 20 minutes -->
|
||||
<max-rate-of-change>7</max-rate-of-change>
|
||||
</filter>
|
||||
|
||||
<!-- Flags use true-heading-deg because only that property is available
|
||||
in multiplayer.
|
||||
-->
|
||||
<filter>
|
||||
<name>FDM True Heading For Flags</name>
|
||||
<type>gain</type>
|
||||
<input>
|
||||
<property>/orientation/heading-deg</property>
|
||||
</input>
|
||||
<output>
|
||||
<property>/orientation/true-heading-deg</property>
|
||||
</output>
|
||||
</filter>
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- Roll -->
|
||||
<!-- ================================================================== -->
|
||||
|
||||
<!--
|
||||
<filter>
|
||||
<name>FDM Rudder</name>
|
||||
<type>noise-spike</type>
|
||||
<input>
|
||||
<property>/controls/flight/rudder</property>
|
||||
</input>
|
||||
<output>
|
||||
<property>/surface-positions/rudder-pos-norm</property>
|
||||
</output>
|
||||
|
||||
<max-rate-of-change>5</max-rate-of-change>
|
||||
</filter>-->
|
||||
|
||||
</PropertyList>
|
31
ZSU-23/Systems/radar-pos.xml
Normal file
31
ZSU-23/Systems/radar-pos.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0"?>
|
||||
<PropertyList>
|
||||
<filter>
|
||||
<name>radar spin</name>
|
||||
<type>gain</type>
|
||||
<input>
|
||||
<expression>
|
||||
<mod>
|
||||
<product>
|
||||
<property>/sim/time/elapsed-sec</property>
|
||||
<value>36</value>
|
||||
</product>
|
||||
<value>360</value>
|
||||
</mod>
|
||||
</expression>
|
||||
</input>
|
||||
<gain>1</gain>
|
||||
<output>sim/multiplay/generic/float[2]</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<name>radar nod</name>
|
||||
<type>gain</type>
|
||||
<input>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
</input>
|
||||
<gain>1</gain>
|
||||
<output>sim/multiplay/generic/float[4]</output>
|
||||
</filter>
|
||||
</PropertyList>
|
||||
|
BIN
ZSU-23/thumbnail.png
Normal file
BIN
ZSU-23/thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 MiB |
278
ZSU-23/zsu-23-set.xml
Normal file
278
ZSU-23/zsu-23-set.xml
Normal file
@ -0,0 +1,278 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
systems adapted from truck by onox
|
||||
model by Jüttner Domokos aka Rudolf
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<environment>
|
||||
<in-to-wind type="bool">false</in-to-wind>
|
||||
</environment>
|
||||
|
||||
<carrier>
|
||||
<fdm>
|
||||
<settings>
|
||||
<!-- The maximum bank angle during full rudder deflection -->
|
||||
<bank-limit type="double">15.0</bank-limit>
|
||||
|
||||
<!-- Frequency and overshoot of the oscillator used to
|
||||
simulate heeling (roll).
|
||||
-->
|
||||
<heel-frequency type="double">0.5</heel-frequency>
|
||||
<heel-overshoot type="double">4.0</heel-overshoot>
|
||||
|
||||
<!-- Frequency and overshoot of the oscillator used to
|
||||
simulate trimming (pitch).
|
||||
-->
|
||||
<trim-frequency type="double">0.32</trim-frequency>
|
||||
<trim-overshoot type="double">0.45</trim-overshoot>
|
||||
|
||||
<!-- The speed of the waves plus speed of the ship in knots
|
||||
which generates the maximum overshoot of the trim
|
||||
oscillation.
|
||||
-->
|
||||
<max-trim-oscillation-wave-kt type="double">30.0</max-trim-oscillation-wave-kt>
|
||||
|
||||
<!-- The speed of the waves in knots which generates the
|
||||
maximum overshoot of the heel oscillation.
|
||||
-->
|
||||
<max-heel-oscillation-wave-kt type="double">20.0</max-heel-oscillation-wave-kt>
|
||||
|
||||
<movement type="bool">true</movement>
|
||||
</settings>
|
||||
</fdm>
|
||||
</carrier>
|
||||
|
||||
<sim> <!-- include="Sim/views.xml"> -->
|
||||
<author>pinto, onox, Rudolf</author>
|
||||
<description>ZSU-23-4M "Shilka" AAA defence system</description>
|
||||
<status>alpha</status>
|
||||
<aircraft-version>0.1</aircraft-version>
|
||||
|
||||
<flight-model>null</flight-model>
|
||||
|
||||
<aero>KPN-D</aero>
|
||||
<aircraft-operator>KPN</aircraft-operator>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/ZSU-23/Models/ZSU-23-4M.xml</path>
|
||||
|
||||
<!-- Uncloak weather balloons visiting Earth -->
|
||||
<always-show-in-MP type="bool">true</always-show-in-MP>
|
||||
</model>
|
||||
|
||||
<sound>
|
||||
<path>Sounds/sound.xml</path>
|
||||
</sound>
|
||||
|
||||
<presets>
|
||||
<onground>true</onground>
|
||||
</presets>
|
||||
|
||||
|
||||
<current-view>
|
||||
<deck-park type="bool">true</deck-park>
|
||||
|
||||
<z-offset-dec-step type="double">0.0</z-offset-dec-step>
|
||||
<z-offset-inc-step type="double">0.0</z-offset-inc-step>
|
||||
<can-change-z-offset type="bool">false</can-change-z-offset>
|
||||
|
||||
<z-offset-min-m type="float">100.0</z-offset-min-m>
|
||||
<z-offset-max-m type="float">2000.0</z-offset-max-m>
|
||||
</current-view>
|
||||
|
||||
<hud>
|
||||
<path n="1">Aircraft/ZSU-23/Hud/hud.xml</path>
|
||||
<visibility n="1">true</visibility>
|
||||
<font>
|
||||
<size type="float">11.0</size>
|
||||
</font>
|
||||
</hud>
|
||||
|
||||
<menubar include="Dialogs/menu.xml"/>
|
||||
|
||||
<multiplay>
|
||||
<generic>
|
||||
<int n="0" type="int">0</int>
|
||||
<float n="0" type="double">0</float> <!-- Turret azimuth -->
|
||||
<float n="1" type="double">0</float> <!-- gun elevation -->
|
||||
<float n="2" type="double">0</float> <!-- radar azimuth -->
|
||||
<float n="3" type="double">0</float> <!-- radar elevation -->
|
||||
<bool n="0" type="bool" alias="/controls/armament/trigger"/>
|
||||
</generic>
|
||||
</multiplay>
|
||||
|
||||
<systems>
|
||||
<autopilot>
|
||||
<path>Systems/fbw.xml</path>
|
||||
</autopilot>
|
||||
<autopilot>
|
||||
<path>Systems/fdm.xml</path>
|
||||
</autopilot>
|
||||
<property-rule>
|
||||
<path>Systems/radar-pos.xml</path>\
|
||||
</property-rule>
|
||||
|
||||
</systems>
|
||||
|
||||
<menubar>
|
||||
<default>
|
||||
<menu n="100">
|
||||
<label>Truck</label>
|
||||
<enabled type="bool">true</enabled>
|
||||
<item>
|
||||
<label>Event Log</label>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>flightlog</dialog-name>
|
||||
</binding>
|
||||
</item>
|
||||
</menu>
|
||||
</default>
|
||||
</menubar>
|
||||
|
||||
<previews>
|
||||
<preview>
|
||||
<type>exterior</type>
|
||||
<splash type="bool">true</splash>
|
||||
<path>thumbnail.png</path>
|
||||
</preview>
|
||||
</previews>
|
||||
|
||||
</sim>
|
||||
|
||||
<input>
|
||||
<keyboard>
|
||||
|
||||
<key n="97">
|
||||
<name>a</name>
|
||||
<desc>Rotate Gun Left</desc>
|
||||
<repeatable>true</repeatable>
|
||||
<interval-sec>0.001</interval-sec>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>sim/multiplay/generic/float[0]</property>
|
||||
<step>1</step>
|
||||
<min>-180</min>
|
||||
<max>180</max>
|
||||
<wrap>true</wrap>
|
||||
</binding>
|
||||
</key>
|
||||
|
||||
<key n="100">
|
||||
<name>d</name>
|
||||
<desc>Rotate Gun Right</desc>
|
||||
<repeatable>true</repeatable>
|
||||
<interval-sec>0.001</interval-sec>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>sim/multiplay/generic/float[0]</property>
|
||||
<step>-1</step>
|
||||
<min>-180</min>
|
||||
<max>180</max>
|
||||
<wrap>true</wrap>
|
||||
</binding>
|
||||
</key>
|
||||
|
||||
<key n="101">
|
||||
<name>e</name>
|
||||
<desc>Gun Trigger</desc>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>controls/armament/trigger</property>
|
||||
<value>true</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>controls/armament/trigger</property>
|
||||
<value>false</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</key>
|
||||
|
||||
<key n="115">
|
||||
<name>s</name>
|
||||
<desc>Rotate Gun Down</desc>
|
||||
<repeatable>true</repeatable>
|
||||
<interval-sec>0.001</interval-sec>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
<step>-1</step>
|
||||
<min>-10</min>
|
||||
<max>85</max>
|
||||
</binding>
|
||||
</key>
|
||||
|
||||
<key n="119">
|
||||
<name>w</name>
|
||||
<desc>Rotate Gun Up</desc>
|
||||
<repeatable>true</repeatable>
|
||||
<interval-sec>0.001</interval-sec>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>sim/multiplay/generic/float[1]</property>
|
||||
<step>1</step>
|
||||
<min>-10</min>
|
||||
<max>85</max>
|
||||
</binding>
|
||||
</key>
|
||||
|
||||
</keyboard>
|
||||
</input>
|
||||
|
||||
<controls>
|
||||
<armament>
|
||||
<trigger type="bool">0</trigger>
|
||||
</armament>
|
||||
</controls>
|
||||
|
||||
<payload>
|
||||
<armament>
|
||||
<models type="string">Aircraft/ZSU-23/Models/emesary/</models>
|
||||
<msg type="bool">true</msg>
|
||||
<enable-craters type="bool">true</enable-craters>
|
||||
<MLW-bearing type="double">0</MLW-bearing>
|
||||
<MLW-count type="int">0</MLW-count>
|
||||
<MLW-launcher type="string"></MLW-launcher>
|
||||
<MAW-bearing type="double">0</MAW-bearing>
|
||||
<MAW-active type="bool">false</MAW-active>
|
||||
<spike type="bool">false</spike>
|
||||
</armament>
|
||||
</payload>
|
||||
|
||||
<nasal>
|
||||
<notifications>
|
||||
<file>Aircraft/ZSU-23/Nasal/ArmamentNotification.nas</file>
|
||||
<file>Aircraft/ZSU-23/Nasal/GeoBridgedTransmitter.nas</file>
|
||||
</notifications>
|
||||
<carrier>
|
||||
<file>Aircraft/ZSU-23/Nasal/fdm.nas</file>
|
||||
</carrier>
|
||||
|
||||
<damage>
|
||||
<file>Aircraft/ZSU-23/Nasal/damage.nas</file>
|
||||
</damage>
|
||||
</nasal>
|
||||
|
||||
<input>
|
||||
<mice include="Sim/mice.xml"/>
|
||||
</input>
|
||||
|
||||
</PropertyList>
|
Loading…
Reference in New Issue
Block a user