CVS: data/Aircraft/B-1B/Nasal cdu900.nas, NONE, 1.1 fuel_load.nas, NONE, 1.1 oso_ikb.nas, NONE, 1.1 wso_mfd.nas, NONE, 1.1 b1b.nas, 1.12, 1.13 cg.nas, 1.3, 1.4 flightcontrols.nas, 1.4, 1.5 guide_to_target.nas, 1.1, 1.2 low.nas, 1.1, 1.2 oso_management.nas, 1.1, 1.2 phd.nas, 1.1, 1.2 radar.nas, 1.2, 1.3 rain.nas, 1.1, 1.2 terrain_follow.nas, 1.1, 1.2 oso_target.nas, 1.1, NONE tfs.nas, 1.3, NONE weapons.nas, 1.4, NONE
Martin Spott <[email protected]>
| Newsgroups | gmane.games.flightgear.cvc |
|---|---|
| Message-ID | <[email protected]> |
Update of /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal
In directory baron.flightgear.org:/tmp/cvs-serv7610/Nasal
Modified Files:
b1b.nas cg.nas flightcontrols.nas guide_to_target.nas low.nas
oso_management.nas phd.nas radar.nas rain.nas
terrain_follow.nas
Added Files:
cdu900.nas fuel_load.nas oso_ikb.nas wso_mfd.nas
Removed Files:
oso_target.nas tfs.nas weapons.nas
Log Message:
Markus Zojer - B-1B easter update:
- terrain following script rewritten
- guided ordonance system rewritten
- exterior model texture improvenments
- new instruments(IKB + MFD) for WSO position
- cdu-900 prototype for nav/com input/display
- radar now sorts for distance, displays closest
--- NEW FILE "cdu900.nas" ---
#cdu900
var cdu_set = func(n,m){
#n >= 0 are direct menu settings
if (n >= 0){
setprop("instrumentation/cdu900/menu", n);
setprop("instrumentation/cdu900/submenu", m);
setprop("instrumentation/cdu900/sel_subm", "");
setprop("instrumentation/cdu900/line-selected", "");
}
var cdu = [
#com1 and 2 entries
[ "COM SET",
{ sub1: "COM1 MHZ", sub2: "instrumentation/comm/frequencies/selected-mhz", sub3: "COM1 STBY", sub4: "instrumentation/comm/frequencies/standby-mhz", sub5: "---", sub6: "instrumentation/cdu900/expr/none"},
{ sub1: "COM2 MHZ", sub2: "instrumentation/comm[1]/frequencies/selected-mhz", sub3: "COM2 STBY", sub4: "instrumentation/comm[1]/frequencies/standby-mhz", sub5: "---", sub6: "instrumentation/cdu900/expr/none"},
],
#nav1 and 2,adf entries
[ "NAV SET",
{ sub1: "NAV1 MHZ", sub2: "instrumentation/nav[0]/frequencies/selected-mhz", sub3: "NAV1 STBY", sub4: "instrumentation/nav[0]/frequencies/standby-mhz", sub5: "NAV1 HDG", sub6: "instrumentation/nav[0]/radials/selected-deg"},
{ sub1: "NAV2 MHZ", sub2: "instrumentation/nav[1]/frequencies/selected-mhz", sub3: "NAV2 STBY", sub4: "instrumentation/nav[1]/frequencies/standby-mhz", sub5: "NAV2 HDG", sub6: "instrumentation/nav[1]/radials/selected-deg"},
{ sub1: "ADF1 KHZ", sub2: "instrumentation/adf[0]/frequencies/selected-khz", sub3: "ADF1 STBY", sub4: "instrumentation/adf[0]/frequencies/standby-khz", sub5: "ADF1 HDG", sub6: "instrumentation/adf[0]/rotation-deg"},
],
#IFF(identify friend foe) entries
[ "IDFY FRI-FOE",
{ sub1: "ONBOARD",sub2: "instrumentation/cdu900/expr/leet", sub3: getprop("sim/multiplay/callsign"), sub4: "instrumentation/cdu900/expr/none", sub5: "ENJOY", sub6: "instrumentation/cdu900/expr/oneone"},
],
#M3(ATHS) entries
[ "ATHS",
{ sub1: "NONE",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
],
#STR(TGT) entries
[ "CODE",
{ sub1: "LISTING",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
],
#FLPN(CODE) entries
[ "FLIGHTPLAN",
{ sub1: "LISTING",sub2: "instrumentation/cdu900/expr/none", sub3: "---", sub4: "instrumentation/cdu900/expr/none", sub5: "NOT AVAILABLE", sub6: "instrumentation/cdu900/expr/none"},
],
#PSN(FDLS) entries
[ "POS INFO",
{ sub1: "LONGITUDE",sub2: "position/longitude-deg", sub3: "LATITUDE", sub4: "position/latitude-deg", sub5: "ALTITUDE-FT", sub6: "position/altitude-ft"},
{ sub1: "GS KTS",sub2: "velocities/groundspeed-kt", sub3: "AS KTS", sub4: "velocities/airspeed-kt", sub5: "MACH", sub6: "velocities/mach"},
],
#DVR(DATA) entries
[ "DATA",
{ sub1: "TOT FUEL NORM",sub2: "consumables/fuel/total-fuel-norm", sub3: "TOT FUEL LBS", sub4: "consumables/fuel/total-fuel-lbs", sub5: "GROSS WGT LBS", sub6: "yasim/gross-weight-lbs"},
],
];
#n == -1 are submenu toggle settings
if (n == -1){
var menu_set = getprop("instrumentation/cdu900/menu");
n = menu_set;
var nr = size(cdu[n]) - 1;
#debug.dump(nr);
var submenu_set = getprop("instrumentation/cdu900/submenu");
m = submenu_set + m;
if (m < 1){
m = 1;
}
if (m > nr){
m = nr;
}
setprop("instrumentation/cdu900/sel_subm", "");
setprop("instrumentation/cdu900/line-selected", "");
}
#n == -2 are sub2/4/6-line2/4/6 selected
if (n == -2){
var submenu_set = getprop("instrumentation/cdu900/submenu");
var menu_set = getprop("instrumentation/cdu900/menu");
var sel_subm = cdu[menu_set][submenu_set]["sub"~ m ~""];
setprop("instrumentation/cdu900/sel_subm", sel_subm);
setprop("instrumentation/cdu900/line-selected", m);
n = menu_set;
m = submenu_set;
}
#n == -10 manipulate aerrow selected
if (n == -10){
var sel_subm = getprop("instrumentation/cdu900/sel_subm");
if (sel_subm){
var subm_value = getprop(""~ sel_subm ~"");
#debug.dump(subm_value);
subm_value = subm_value + m;
setprop(""~ sel_subm ~"", subm_value);
}
#set entries
var submenu_set = getprop("instrumentation/cdu900/submenu");
var menu_set = getprop("instrumentation/cdu900/menu");
n = menu_set;
m = submenu_set;
}
setprop("instrumentation/cdu900/menu", n);
setprop("instrumentation/cdu900/submenu", m);
setprop("instrumentation/cdu900/line0", cdu[n][0]);
setprop("instrumentation/cdu900/line1", cdu[n][m]["sub1"]);
setprop("instrumentation/cdu900/line2", getprop(""~ cdu[n][m]["sub2"] ~""));
setprop("instrumentation/cdu900/line3", cdu[n][m]["sub3"]);
setprop("instrumentation/cdu900/line4", getprop(""~ cdu[n][m]["sub4"] ~""));
setprop("instrumentation/cdu900/line5", cdu[n][m]["sub5"]);
setprop("instrumentation/cdu900/line6", getprop(""~ cdu[n][m]["sub6"] ~""));
}
#var type = cdu[0]["menu0"];
#cdu[0].menu0 = "gbu-31";# set type to gbu-31
--- NEW FILE "fuel_load.nas" ---
### fuel loading
var fuelload = func(n) {
var amount = n / 100;
var wow = getprop("gear/gear[0]/wow");
var roll = getprop("gear/gear[0]/rollspeed-ms");
if ((wow == 1) and (roll < 1)) {
setprop("consumables/fuel/tank[0]/level-gal_us", 5000 * amount);
setprop("consumables/fuel/tank[1]/level-gal_us", 5000 * amount);
setprop("consumables/fuel/tank[2]/level-gal_us", 5000 * amount);
setprop("consumables/fuel/tank[3]/level-gal_us", 5000 * amount);
setprop("consumables/fuel/tank[4]/level-gal_us", 3333 * amount);
setprop("consumables/fuel/tank[5]/level-gal_us", 5000 * amount);
setprop("consumables/fuel/tank[6]/level-gal_us", 1666 * amount);
setprop("consumables/fuel/tank[7]/level-gal_us", 1666 * amount);
var dtext = "Fuel loaded!";
screen.log.write(dtext);
} else {
var ltext = "You have to stop at an airport to be able to onload fuel!";
screen.log.write(ltext);
}
}
--- NEW FILE "oso_ikb.nas" ---
###change settings for sms visible on oso mfd
var ikb_path = props.globals.getNode("instrumentation/ikb/ikb_input",1);
ikb_path.setDoubleValue(0);
var coord_input = [0,1,2,3,4,5,6,7,8];
var coord_pos = 0;
setprop("instrumentation/ikb/coord_pos", coord_pos);
setprop("instrumentation/ikb/ikb_number", 0);
var tgt_input = func(n) {
coord_pos = getprop("instrumentation/ikb/coord_pos");
var ikb_number = getprop("instrumentation/ikb/ikb_number");
var nr = getprop("armament/oso/number-selected");
coord_input[coord_pos] = ikb_number;
if (coord_pos == 0){
if (ikb_number == 0){
coord_input[coord_pos] = -1;
} else {
coord_input[coord_pos] = 1;
}
}
#var t_input = ""~ coord_input[0] ~""~ coord_input[1] ~""~ coord_input[2] ~""~ coord_input[3] ~"."~ coord_input[4] ~""~ coord_input[5] ~""~ coord_input[6] ~""~ coord_input[7] ~""~ coord_input[8] ~"";
var t_input = coord_input[0] * (coord_input[1] * 100 + coord_input[2] * 10 + coord_input[3] * 1 + coord_input[4] * 0.1 + coord_input[5] * 0.01 + coord_input[6] * 0.001 + coord_input[7] * 0.0001 + coord_input[8] * 0.00001);
ikb_path.setDoubleValue(t_input);
print(t_input);
if(n == 1){
setprop("ai/guided/bomb["~ nr ~"]/target-latitude-deg", ikb_path.getValue());
weapons.wpn_info[nr].lat = ikb_path.getValue();
var talt_m = geo.elevation(wpn_info[nr]["lat"], wpn_info[nr]["lon"]);
if ((talt_m == "nil") or (talt_m == "")) {
return(weapons.wpn_info[nr].talt_m = -1);
} else {
wpn_info[nr].talt_m = talt_m;
}
debug.dump(wpn_info[nr]);
}
if(n == 2){
setprop("ai/guided/bomb["~ nr ~"]/target-longitude-deg", ikb_path.getValue());
weapons.wpn_info[nr].lon = ikb_path.getValue();
var talt_m = geo.elevation(wpn_info[nr]["lat"], wpn_info[nr]["lon"]);
if ((talt_m == "nil") or (talt_m == "")) {
return(weapons.wpn_info[nr].talt_m = -1);
} else {
wpn_info[nr].talt_m = talt_m;
}
debug.dump(wpn_info[nr]);
}
}
var change_coord_pos = func(n) {
coord_pos = getprop("instrumentation/ikb/coord_pos");
coord_pos = coord_pos + n;
if((coord_pos < 0) or (coord_pos > 8)){
coord_pos = 0;
}
setprop("instrumentation/ikb/coord_pos", coord_pos);
}
var change_ikb_number = func(n) {
setprop("instrumentation/ikb/ikb_number", n);
tgt_input(0);
}
--- NEW FILE "wso_mfd.nas" ---
#settings for the oso mfd
#header:
#line1
#line2
#line3
#line4
#line5
#line6
#line7
#line8
#footer:menu selections
setprop("instrumentation/ikb/ikb_none", 0);
setprop("instrumentation/ikb/ikb_input", 0);
var wso_mfd = [
#bay intmd
[
["BAY INTMD OVERVIEW", "MENU CHANGE <"],
["STAT1", "armament/bay1/rack0-armed", "DIST", "ai/guided/bomb[0]/target-distance"],
["STAT2", "armament/bay1/rack1-armed", "DIST", "ai/guided/bomb[1]/target-distance"],
["STAT3", "armament/bay1/rack2-armed", "DIST", "ai/guided/bomb[2]/target-distance"],
["STAT4", "armament/bay1/rack3-armed", "DIST", "ai/guided/bomb[3]/target-distance"],
["STAT5", "armament/bay1/rack4-armed", "DIST", "ai/guided/bomb[4]/target-distance"],
["STAT6", "armament/bay1/rack5-armed", "DIST", "ai/guided/bomb[5]/target-distance"],
["STAT7", "armament/bay1/rack6-armed", "DIST", "ai/guided/bomb[6]/target-distance"],
["STAT8", "armament/bay1/rack7-armed", "DIST", "ai/guided/bomb[7]/target-distance"],
],
#station1
[
["STATION1", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack0", "ARMED", "armament/bay1/rack0-armed"],
["LON", "ai/guided/bomb[0]/target-longitude-deg", "LAT", "ai/guided/bomb[0]/target-latitude-deg"],
["DIST", "ai/guided/bomb[0]/target-distance", "TIME", "ai/guided/bomb[0]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station2
[
["STATION2", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack1", "ARMED", "armament/bay1/rack1-armed"],
["LON", "ai/guided/bomb[1]/target-longitude-deg", "LAT", "ai/guided/bomb[1]/target-latitude-deg"],
["DIST", "ai/guided/bomb[1]/target-distance", "TIME", "ai/guided/bomb[1]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station3
[
["STATION3", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack2", "ARMED", "armament/bay1/rack2-armed"],
["LON", "ai/guided/bomb[2]/target-longitude-deg", "LAT", "ai/guided/bomb[2]/target-latitude-deg"],
["DIST", "ai/guided/bomb[2]/target-distance", "TIME", "ai/guided/bomb[2]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station4
[
["STATION4", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack3", "ARMED", "armament/bay1/rack3-armed"],
["LON", "ai/guided/bomb[3]/target-longitude-deg", "LAT", "ai/guided/bomb[3]/target-latitude-deg"],
["DIST", "ai/guided/bomb[3]/target-distance", "TIME", "ai/guided/bomb[3]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station5
[
["STATION5", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack4", "ARMED", "armament/bay1/rack4-armed"],
["LON", "ai/guided/bomb[4]/target-longitude-deg", "LAT", "ai/guided/bomb[4]/target-latitude-deg"],
["DIST", "ai/guided/bomb[4]/target-distance", "TIME", "ai/guided/bomb[4]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station6
[
["STATION6", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack5", "ARMED", "armament/bay1/rack5-armed"],
["LON", "ai/guided/bomb[5]/target-longitude-deg", "LAT", "ai/guided/bomb[5]/target-latitude-deg"],
["DIST", "ai/guided/bomb[5]/target-distance", "TIME", "ai/guided/bomb[5]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station7
[
["STATION7", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack6", "ARMED", "armament/bay1/rack6-armed"],
["LON", "ai/guided/bomb[6]/target-longitude-deg", "LAT", "ai/guided/bomb[6]/target-latitude-deg"],
["DIST", "ai/guided/bomb[6]/target-distance", "TIME", "ai/guided/bomb[6]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
],
#station8
[
["STATION8", "MENU CHANGE <"],
["TYPE", "armament/bay1/rack7", "ARMED", "armament/bay1/rack7-armed"],
["LON", "ai/guided/bomb[7]/target-longitude-deg", "LAT", "ai/guided/bomb[7]/target-latitude-deg"],
["DIST", "ai/guided/bomb[7]/target-distance", "TIME", "ai/guided/bomb[7]/target-distance-sec"],
["-----", "instrumentation/ikb/ikb_none", "-----", "instrumentation/ikb/ikb_none"],
["IKB", "instrumentation/ikb/ikb_input", "SET IKB<", "instrumentation/ikb/ikb_none"],
["POS", "instrumentation/ikb/coord_pos", "", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LON<", "instrumentation/ikb/ikb_none"],
["", "instrumentation/ikb/ikb_none", "SET LAT<", "instrumentation/ikb/ikb_none"]
]
];
setprop("instrumentation/wso_mfd/menu", 0);
#m=direct menu select,n= incr/decr current
var wso_mfd_update = func(m,n){
var cmenu = getprop("instrumentation/wso_mfd/menu");
var cminu = cmenu - 1;
if(m == 1){
#direct select submenu, if we are in topmenu
if((cmenu == 0) or ((m == 1) and (n == 0))){
#n = n;
setprop("instrumentation/wso_mfd/menu", n);
wso_mfd_draw();
}
if((cmenu > 0) and (cmenu < 9)){
if (n == 5){
tgt_input(0);
wso_mfd_draw();
}
if (n == 7){
setprop("ai/guided/bomb["~ cminu ~"]/target-longitude-deg",getprop("instrumentation/ikb/ikb_input"));
weapons.wpn_info[cminu].lon = getprop("instrumentation/ikb/ikb_input");
var talt_m = geo.elevation(wpn_info[cminu]["lat"], wpn_info[cminu]["lon"]);
if ((talt_m == nil) or (talt_m == "")) {
weapons.wpn_info[cminu].talt_m = -11;
} else {
wpn_info[cminu].talt_m = talt_m;
}
wso_mfd_draw();
}
if (n == 8){
setprop("ai/guided/bomb["~ cminu ~"]/target-latitude-deg",getprop("instrumentation/ikb/ikb_input"));
weapons.wpn_info[cminu].lat = getprop("instrumentation/ikb/ikb_input");
var talt_m = geo.elevation(wpn_info[cminu]["lat"], wpn_info[cminu]["lon"]);
if ((talt_m == nil) or (talt_m == "")) {
weapons.wpn_info[cminu].talt_m = -11;
} else {
wpn_info[cminu].talt_m = talt_m;
}
wso_mfd_draw();
}
}
}
#incr current menu entry
if(m == -1){
n = cmenu + n;
if ((n > 8) or (n < 0)){
n = 0;
}
setprop("instrumentation/wso_mfd/menu", n);
wso_mfd_draw();
}
}
var wso_mfd_draw = func(){
var n = getprop("instrumentation/wso_mfd/menu");
#header
setprop("instrumentation/wso_mfd/line00", wso_mfd[n][0][0]);
#line1
setprop("instrumentation/wso_mfd/line10", wso_mfd[n][1][0]);
setprop("instrumentation/wso_mfd/line11", getprop(""~ wso_mfd[n][1][1] ~""));
setprop("instrumentation/wso_mfd/line12", wso_mfd[n][1][2]);
setprop("instrumentation/wso_mfd/line13", getprop(""~ wso_mfd[n][1][3] ~""));
#line2
setprop("instrumentation/wso_mfd/line20", wso_mfd[n][2][0]);
setprop("instrumentation/wso_mfd/line21", getprop(""~ wso_mfd[n][2][1] ~""));
setprop("instrumentation/wso_mfd/line22", wso_mfd[n][2][2]);
setprop("instrumentation/wso_mfd/line23", getprop(""~ wso_mfd[n][2][3] ~""));
#line3
setprop("instrumentation/wso_mfd/line30", wso_mfd[n][3][0]);
setprop("instrumentation/wso_mfd/line31", getprop(""~ wso_mfd[n][3][1] ~""));
setprop("instrumentation/wso_mfd/line32", wso_mfd[n][3][2]);
setprop("instrumentation/wso_mfd/line33", getprop(""~ wso_mfd[n][3][3] ~""));
#line4
setprop("instrumentation/wso_mfd/line40", wso_mfd[n][4][0]);
setprop("instrumentation/wso_mfd/line41", getprop(""~ wso_mfd[n][4][1] ~""));
setprop("instrumentation/wso_mfd/line42", wso_mfd[n][4][2]);
setprop("instrumentation/wso_mfd/line43", getprop(""~ wso_mfd[n][4][3] ~""));
#line5
setprop("instrumentation/wso_mfd/line50", wso_mfd[n][5][0]);
setprop("instrumentation/wso_mfd/line51", getprop(""~ wso_mfd[n][5][1] ~""));
setprop("instrumentation/wso_mfd/line52", wso_mfd[n][5][2]);
setprop("instrumentation/wso_mfd/line53", getprop(""~ wso_mfd[n][5][3] ~""));
#line6
setprop("instrumentation/wso_mfd/line60", wso_mfd[n][6][0]);
setprop("instrumentation/wso_mfd/line61", getprop(""~ wso_mfd[n][6][1] ~""));
setprop("instrumentation/wso_mfd/line62", wso_mfd[n][6][2]);
setprop("instrumentation/wso_mfd/line63", getprop(""~ wso_mfd[n][6][3] ~""));
#line7
setprop("instrumentation/wso_mfd/line70", wso_mfd[n][7][0]);
setprop("instrumentation/wso_mfd/line71", getprop(""~ wso_mfd[n][7][1] ~""));
setprop("instrumentation/wso_mfd/line72", wso_mfd[n][7][2]);
setprop("instrumentation/wso_mfd/line73", getprop(""~ wso_mfd[n][7][3] ~""));
#line8
setprop("instrumentation/wso_mfd/line80", wso_mfd[n][8][0]);
setprop("instrumentation/wso_mfd/line81", getprop(""~ wso_mfd[n][8][1] ~""));
setprop("instrumentation/wso_mfd/line82", wso_mfd[n][8][2]);
setprop("instrumentation/wso_mfd/line83", getprop(""~ wso_mfd[n][8][3] ~""));
#footer
setprop("instrumentation/wso_mfd/line01", wso_mfd[n][0][1]);
}
Index: b1b.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/b1b.nas,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- b1b.nas 23 Jan 2010 09:51:26 -0000 1.12
+++ b1b.nas 30 Mar 2010 21:49:36 -0000 1.13
@@ -33,8 +33,6 @@
setprop("instrumentation/cg/cg_mac", 30);
setprop("instrumentation/tacan/frequencies/selected-channel[12]", 2);
settimer(flightcontrols.fuelsweep, 1);
-setprop("sim/weight[7]/weigth-lb", 0);
-setprop("sim/weight[8]/weigth-lb", 0);
setprop("ai/guided/id-number", 0);
setprop("ai/guided/target-number", 0);
setprop("ai/guided/id-release", 0);
@@ -56,7 +54,8 @@
setprop("sim/multiplay/generic/float[4]",0);
setprop("sim/multiplay/generic/float[5]",0);
b1b.elevon();
-print ("B-1B starting up!");
+b1b.cdu_set(2,1);
+print ("B-1B systems starting!");
}
var elevon = func() {
@@ -81,16 +80,12 @@
setprop("doors/bay_aft/position-norm",m);
}
var refuel_door = func {
-# interpolate("sim/multiplay/generic/float[5]",getprop("controls/switches/refuel-lid"),3);
+ interpolate("sim/multiplay/generic/float[5]",getprop("controls/switches/refuel-lid"),3);
}
-#var bay_fwd = aircraft.door.new ("sim/multiplay/generic/float[2]",3);
-#var bay_intmd = aircraft.door.new ("sim/multiplay/generic/float[3]",3);
-#var bay_aft = aircraft.door.new ("sim/multiplay/generic/float[4]",3);
-#var refuel_door = aircraft.door.new ("sim/multiplay/generic/float[5]",3);
### failure dialog
#var engine_failures = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/failures.xml");
-var distance_tanker = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/distance_to_tanker.xml");
+#var distance_tanker = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/distance_to_tanker.xml");
### tacan follow autopilot
var tacan_follow = func {
@@ -142,15 +137,37 @@
### autoengage afterburner when full throttle applied
setlistener("controls/engines/engine[0]/throttle-lever", func(n) {
var lever_eng0 = n.getValue();
- if (lever_eng0 >= 0.98) {
+ var enabled = getprop("controls/switches/engines/afterburner[0]");
+ if ((lever_eng0 >= 0.98) and (enabled)) {
setprop("controls/engines/engine[0]/afterburner", 1);
- setprop("controls/engines/engine[1]/afterburner", 1);
- setprop("controls/engines/engine[2]/afterburner", 1);
- setprop("controls/engines/engine[3]/afterburner", 1);
} else {
setprop("controls/engines/engine[0]/afterburner", 0);
+ }
+});
+setlistener("controls/engines/engine[1]/throttle-lever", func(n) {
+ var lever_eng1 = n.getValue();
+ var enabled = getprop("controls/switches/engines/afterburner[1]");
+ if ((lever_eng1 >= 0.98) and (enabled)) {
+ setprop("controls/engines/engine[1]/afterburner", 1);
+ } else {
setprop("controls/engines/engine[1]/afterburner", 0);
+ }
+});
+setlistener("controls/engines/engine[2]/throttle-lever", func(n) {
+ var lever_eng2 = n.getValue();
+ var enabled = getprop("controls/switches/engines/afterburner[2]");
+ if ((lever_eng2 >= 0.98) and (enabled)) {
+ setprop("controls/engines/engine[2]/afterburner", 1);
+ } else {
setprop("controls/engines/engine[2]/afterburner", 0);
+ }
+});
+setlistener("controls/engines/engine[3]/throttle-lever", func(n) {
+ var lever_eng3 = n.getValue();
+ var enabled = getprop("controls/switches/engines/afterburner[3]");
+ if ((lever_eng3 >= 0.98) and (enabled)) {
+ setprop("controls/engines/engine[3]/afterburner", 1);
+ } else {
setprop("controls/engines/engine[3]/afterburner", 0);
}
});
@@ -699,43 +716,60 @@
# tacan block
##
var tacan = func(add) {
-var ch2 = getprop("instrumentation/tacan/frequencies/selected-channel");
-var ch21 = int(ch2 / 10);
-var ch21_new = ch21;
-
-if ((add == 1) and (ch21 <= 11.5)) {
-var ch21_new = ch21 + 1;
-} elsif ((add == -1) and (ch21 >= 0.5)) {
-var ch21_new = ch21 - 1;
-}
-
-var ch1_new = int(ch21_new / 10);
-setprop("instrumentation/tacan/frequencies/selected-channel[1]", ch1_new);
-
-if (ch1_new >= 0.95) {
-var ch2_new = ch21_new - 10;
-setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
-} elsif (ch1_new <= 0.95) {
-var ch2_new = ch21_new;
-setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
-}
+ var ch2 = getprop("instrumentation/tacan/frequencies/selected-channel");
+ var ch21 = int(ch2 / 10);
+ var ch21_new = ch21;
+
+ if ((add == 1) and (ch21 <= 11.5)) {
+ var ch21_new = ch21 + 1;
+ } elsif ((add == -1) and (ch21 >= 0.5)) {
+ var ch21_new = ch21 - 1;
+ }
+
+ var ch1_new = int(ch21_new / 10);
+ setprop("instrumentation/tacan/frequencies/selected-channel[1]", ch1_new);
+
+ if (ch1_new >= 0.95) {
+ var ch2_new = ch21_new - 10;
+ setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
+ } elsif (ch1_new <= 0.95) {
+ var ch2_new = ch21_new;
+ setprop("instrumentation/tacan/frequencies/selected-channel[2]", ch2_new);
+ }
}
var tacanxy = func() {
-var xy = getprop("instrumentation/tacan/frequencies/selected-channel[4]");
-if (xy == "X") {
-setprop("instrumentation/tacan/frequencies/selected-channel[4]", "Y");
-} elsif (xy == "Y") {
-setprop("instrumentation/tacan/frequencies/selected-channel[4]", "X");
+ var xy = getprop("instrumentation/tacan/frequencies/selected-channel[4]");
+ if (xy == "X") {
+ setprop("instrumentation/tacan/frequencies/selected-channel[4]", "Y");
+ } elsif (xy == "Y") {
+ setprop("instrumentation/tacan/frequencies/selected-channel[4]", "X");
+ }
}
+
+#----------------------------------------------------------------------------
+# View change: Ctrl-V switchback to view #0 but switch to OSO view when already
+# in view #0.
+#----------------------------------------------------------------------------
+var toggle_cockpit_views = func() {
+var CurrentView_Num = props.globals.getNode("sim/current-view/view-number");
+var oso_view_num = view.indexof("OSO view");
+
+ var cur_v = CurrentView_Num.getValue();
+ if (cur_v != 0 ) {
+ CurrentView_Num.setValue(0);
+ } else {
+ CurrentView_Num.setValue(oso_view_num);
+ }
}
+
##
# nuc switch
##
var nuc = func {
-if (getprop("controls/switches/nuc") == 1) {
-ltext = "Sorry, Duke Nukem not available yet on this plane(t)!";
+ if (getprop("controls/switches/nuc") == 1) {
+ ltext = "Sorry, Duke Nukem not available yet on this plane(t)!";
screen.log.write(ltext);
-}
+ }
}
\ No newline at end of file
Index: cg.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/cg.nas,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- cg.nas 24 Aug 2008 16:00:11 -0000 1.3
+++ cg.nas 30 Mar 2010 21:49:38 -0000 1.4
@@ -93,43 +93,47 @@
var cg_adjust = func {
var cg_on = getprop("controls/switches/cg-adjust");
if (cg_on == 1) {
-#setprop("/sim/freeze/fuel", 1);
-var cg_macf = getprop("instrumentation/cg/cg_mac");
-var cg_mac_set = getprop("instrumentation/cg/cg_mac_set");
-
-var fuel_fwd = getprop("consumables/fuel/tank[3]/level-lbs");
-var fuel_aft = getprop("consumables/fuel/tank[5]/level-lbs");
-var fuel_fwd_cap = getprop("consumables/fuel/tank[3]/capacity-gal_us");
-var fuel_aft_cap = getprop("consumables/fuel/tank[5]/capacity-gal_us");
-var fuel_dens = getprop("consumables/fuel/tank[3]/density-ppg");
-
-var utime = 1;
-var ffrate = (200 * utime);# in lb/sec
-var fuel_fwd_caplb = fuel_fwd_cap * fuel_dens;
-var fuel_aft_caplb = fuel_aft_cap * fuel_dens;
-var fuel_fwd_space = fuel_fwd_caplb - fuel_fwd;
-var fuel_aft_space = fuel_aft_caplb - fuel_aft;
+ #setprop("/sim/freeze/fuel", 1);
+ var cg_macf = getprop("instrumentation/cg/cg_mac");
+ var cg_mac_set = getprop("instrumentation/cg/cg_mac_set");
+ var fuel_fwd = getprop("consumables/fuel/tank[3]/level-lbs");
+ var fuel_aft = getprop("consumables/fuel/tank[5]/level-lbs");
+ #var fuel_fwd1 = props.globals.getNode("consumables/fuel/tank[3]/level-lbs",1);
+ #var fuel_aft1 = props.globals.getNode("consumables/fuel/tank[5]/level-lbs",1);
+ var fuel_fwd_cap = getprop("consumables/fuel/tank[3]/capacity-gal_us");
+ var fuel_aft_cap = getprop("consumables/fuel/tank[5]/capacity-gal_us");
+ var fuel_dens = getprop("consumables/fuel/tank[3]/density-ppg");
-if (cg_macf > cg_mac_set) {
+ var utime = 1;
+ var ffrate = (200 * utime);# in lb/sec
+ var fuel_fwd_caplb = fuel_fwd_cap * fuel_dens;
+ var fuel_aft_caplb = fuel_aft_cap * fuel_dens;
+ var fuel_fwd_space = fuel_fwd_caplb - fuel_fwd;
+ var fuel_aft_space = fuel_aft_caplb - fuel_aft;
+
+
+ if (cg_macf > cg_mac_set) {
if (((fuel_fwd + ffrate) <= fuel_fwd_caplb) and ((fuel_aft) >= (0 + ffrate))) {
var fuel_fwd_new = (fuel_fwd + ffrate) / fuel_dens;
var fuel_aft_new = (fuel_aft - ffrate) / fuel_dens;
+
setprop("/consumables/fuel/tank[3]/level-gal_us", fuel_fwd_new);
setprop("/consumables/fuel/tank[5]/level-gal_us", fuel_aft_new);
#print ("weight dist1");
}
-}
-if (cg_macf < cg_mac_set) {
+ }
+ if (cg_macf < cg_mac_set) {
if (((fuel_fwd) >= (0 + ffrate)) and ((fuel_aft + ffrate) <= fuel_aft_caplb)) {
var fuel_fwd_new = (fuel_fwd - ffrate) / fuel_dens;
var fuel_aft_new = (fuel_aft + ffrate) / fuel_dens;
+
setprop("/consumables/fuel/tank[3]/level-gal_us", fuel_fwd_new);
setprop("/consumables/fuel/tank[5]/level-gal_us", fuel_aft_new);
#print ("weight dist2");
}
-}
-#setprop("/sim/freeze/fuel", 0);
-settimer(cg_adjust, utime);
-}
+ }
+ #setprop("/sim/freeze/fuel", 0);
+ settimer(cg_adjust, utime);
+ }
}
\ No newline at end of file
Index: flightcontrols.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/flightcontrols.nas,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- flightcontrols.nas 10 Dec 2008 23:25:45 -0000 1.4
+++ flightcontrols.nas 30 Mar 2010 21:49:39 -0000 1.5
@@ -68,6 +68,18 @@
var conv = getprop("controls/engines/engine[0]/afterburner");
setprop("engines/engine[4]/n1", conv);
},0,0);
+setlistener("controls/engines/engine[1]/afterburner", func {
+var conv = getprop("controls/engines/engine[1]/afterburner");
+setprop("engines/engine[5]/n1", conv);
+},0,0);
+setlistener("controls/engines/engine[2]/afterburner", func {
+var conv = getprop("controls/engines/engine[2]/afterburner");
+setprop("engines/engine[6]/n1", conv);
+},0,0);
+setlistener("controls/engines/engine[3]/afterburner", func {
+var conv = getprop("controls/engines/engine[3]/afterburner");
+setprop("engines/engine[7]/n1", conv);
+},0,0);
setlistener("controls/engines/engine[0]/cutoff", func {
var conv = getprop("controls/engines/engine[0]/cutoff");
setprop("engines/engine[4]/n2", conv);
Index: guide_to_target.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/guide_to_target.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- guide_to_target.nas 11 Dec 2008 00:02:47 -0000 1.1
+++ guide_to_target.nas 30 Mar 2010 21:49:40 -0000 1.2
@@ -13,7 +13,7 @@
# At the end there is an exp script that calculates if the target is in range/then releases the model
##### by glazmax 2008
-var launch = func {
+var launch = func(n) {
# aircraft parameters = initial bomb position
var calt_m = getprop("position/altitude-ft") / 3.28084;
@@ -23,12 +23,7 @@
var clong = getprop("position/longitude-deg") + 0.00000000;
var cspeed_mps = getprop("velocities/groundspeed-kt") * 0.51444;
-var n = getprop("ai/guided/id-number");
-var m = n + 1;
-if (m == 4) {
-var m = 0;
-}
-setprop("ai/guided/id-number", m);
+#setprop("ai/guided/id-number", n);
setprop("ai/guided/bomb[" ~ n ~ "]/prop-latitude-deg",clat);
setprop("ai/guided/bomb[" ~ n ~ "]/prop-longitude-deg",clong);
@@ -66,234 +61,59 @@
setprop ("models/model[" ~ n ~ "]/heading-deg-prop", "ai/guided/bomb[" ~ n ~ "]/prop-heading-deg");
aircraft.makeNode("models/model[" ~ n ~ "]/load");
-if (n == 0) {
-settimer(target_guide0, 2);
-}
-if (n == 1) {
-settimer(target_guide1, 2);
-}
-if (n == 2) {
-settimer(target_guide2, 2);
-}
-if (n == 3) {
-settimer(target_guide3, 2);
-}
-
+settimer(func{target_guide(n);}, 2);
}
#####
## guidance to target (bomb nr 0)
#####
-var target_guide0 = func {
+var target_guide = func(n) {
# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[0]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[0]/target-longitude-deg");
+var tlat = getprop("ai/guided/bomb["~ n ~"]/target-latitude-deg");
+var tlong = getprop("ai/guided/bomb["~ n ~"]/target-longitude-deg");
var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[0]/target-altitude-m",talt_m);
+setprop("ai/guided/bomb["~ n ~"]/target-altitude-m",talt_m);
#calculation of distance, arrival time and heading
-var alat = getprop("ai/guided/bomb[0]/alat");
-var along = getprop("ai/guided/bomb[0]/along");
-var aalt_m = getprop("ai/guided/bomb[0]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[0]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[0]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[0]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[0]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[0]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[0]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect0();
-}
-
-###guidance to target (bomb nr 1)
-var target_guide1 = func {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[1]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[1]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[1]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[1]/alat");
-var along = getprop("ai/guided/bomb[1]/along");
-var aalt_m = getprop("ai/guided/bomb[1]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[1]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[1]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[1]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[1]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[1]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[1]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect1();
-}
-
-###guidance to target (bomb nr 2)
-var target_guide2 = func {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[2]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[2]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[2]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[2]/alat");
-var along = getprop("ai/guided/bomb[2]/along");
-var aalt_m = getprop("ai/guided/bomb[2]/aalt_m");
+var alat = getprop("ai/guided/bomb["~ n ~"]/alat");
+var along = getprop("ai/guided/bomb["~ n ~"]/along");
+var aalt_m = getprop("ai/guided/bomb["~ n ~"]/aalt_m");
var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[2]/target-distance",tdist);
+setprop("ai/guided/bomb["~ n ~"]/target-distance",tdist);
var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
var ttime = tdist / cspeed_mps;
var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[2]/target-heading",thdg);
+setprop("ai/guided/bomb["~ n ~"]/target-heading",thdg);
#interpolation to target
-interpolate("ai/guided/bomb[2]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[2]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[2]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[2]/prop-heading-deg",thdg,ttime / 4);
+interpolate("ai/guided/bomb["~ n ~"]/prop-latitude-deg",tlat,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-longitude-deg",tlong,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-altitude-ft",talt_m * 3.28084,ttime);
+interpolate("ai/guided/bomb["~ n ~"]/prop-heading-deg",thdg,ttime / 4);
-#settimer(impact_detect, 2);
-impact_detect2();
-}
-
-###guidance to target (bomb nr 3)
-var target_guide3 = func {
-
-# target parameters
-#var target = geo.click_position();
-#var tlat = target.lat();
-#var tlong = target.lon();
-var tlat = getprop("ai/guided/bomb[3]/target-latitude-deg");
-var tlong = getprop("ai/guided/bomb[3]/target-longitude-deg");
-var talt_m = geo.elevation(tlat, tlong);
-setprop("ai/guided/bomb[3]/target-altitude-m",talt_m);
-
-#calculation of distance and arrival time
-var alat = getprop("ai/guided/bomb[3]/alat");
-var along = getprop("ai/guided/bomb[3]/along");
-var aalt_m = getprop("ai/guided/bomb[3]/aalt_m");
-var apos = geo.Coord.new().set_latlon(alat, along, aalt_m);
-var tpos = geo.Coord.new().set_latlon(tlat, tlong, talt_m);
-var tdist = apos.direct_distance_to(tpos);
-setprop("ai/guided/bomb[3]/target-distance",tdist);
-var cspeed_mps = getprop("velocities/airspeed-kt") * 0.51444;
-var ttime = tdist / cspeed_mps;
-var thdg = apos.course_to(tpos);
-setprop("ai/guided/bomb[3]/target-heading",thdg);
-
-#interpolation to target
-interpolate("ai/guided/bomb[3]/prop-latitude-deg",tlat,ttime);
-interpolate("ai/guided/bomb[3]/prop-longitude-deg",tlong,ttime);
-interpolate("ai/guided/bomb[3]/prop-altitude-ft",talt_m * 3.28084,ttime);
-interpolate("ai/guided/bomb[3]/prop-heading-deg",thdg,ttime / 4);
-
-#settimer(impact_detect, 2);
-impact_detect3();
+weapons.impact_detect(n);
}
#####
-## detect impact (bomb 0)
+## detect impact (bomb n)
#####
-var impact_detect0 = func {
-var galt = getprop("ai/guided/bomb[0]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[0]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[0]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[0]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[0]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[0]/i-longitude-deg", glong);
-
-impact_report(0);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
- settimer(impact_detect0, 0);
- }
-}
-
-#detect impact (bomb 1)
-var impact_detect1 = func {
-var galt = getprop("ai/guided/bomb[1]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[1]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[1]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[1]/prop-longitude-deg");
+var impact_detect = func(n) {
+var galt = getprop("ai/guided/bomb["~ n ~"]/prop-altitude-ft");
+var talt = getprop("ai/guided/bomb["~ n ~"]/target-altitude-m");
+var glat = getprop("ai/guided/bomb["~ n ~"]/prop-latitude-deg");
+var glong = getprop("ai/guided/bomb["~ n ~"]/prop-longitude-deg");
if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[1]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[1]/i-longitude-deg", glong);
+ setprop ("ai/guided/bomb["~ n ~"]/i-latitude-deg", glat);
+ setprop ("ai/guided/bomb["~ n ~"]/i-longitude-deg", glong);
-impact_report(1);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
- settimer(impact_detect1, 0);
- }
-}
-
-#detect impact (bomb 2)
-var impact_detect2 = func {
-var galt = getprop("ai/guided/bomb[2]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[2]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[2]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[2]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[2]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[2]/i-longitude-deg", glong);
-
-impact_report(2);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
- settimer(impact_detect2, 0);
- }
-}
-
-#detect impact (bomb 3)
-var impact_detect3 = func {
-var galt = getprop("ai/guided/bomb[3]/prop-altitude-ft");
-var talt = getprop("ai/guided/bomb[3]/target-altitude-m");
-var glat = getprop("ai/guided/bomb[3]/prop-latitude-deg");
-var glong = getprop("ai/guided/bomb[3]/prop-longitude-deg");
-
-if (galt - (talt * 3.28084) <= 3) {
-setprop ("ai/guided/bomb[3]/i-latitude-deg", glat);
-setprop ("ai/guided/bomb[3]/i-longitude-deg", glong);
-
-impact_report(3);
-#props.globals.getNode("/models", 1).removeChild("model", 0);
-} else {
- settimer(impact_detect3, 0);
+ weapons.impact_report(n);
+ #props.globals.getNode("/models", 1).removeChild("model", 0);
+ } else {
+ settimer(func{impact_detect(n);}, 0);
}
}
@@ -344,31 +164,18 @@
#}
}
-#####
-## target designator (mouseclick and button)
-#####
-var target_des_xxx = func {
-var n = getprop("ai/guided/target-number");
-var o = n + 1;
-var m = n + 1;
-if (m == 4) {
-var m = 0;
-}
-setprop("ai/guided/target-number", m);
-# target parameters
-var target = geo.click_position();
-var tlat = target.lat();
-var tlong = target.lon();
-setprop("ai/guided/bomb[" ~ n ~ "]/target-latitude-deg",tlat);
-setprop("ai/guided/bomb[" ~ n ~ "]/target-longitude-deg",tlong);
-setprop("ai/guided/bomb[" ~ n ~ "]/launched",0);
-setprop("ai/guided/bomb[" ~ n ~ "]/target-in_range", 0);
-setprop("ai/guided/number_for_release", 0);
-var ltext = "Coordinates for target " ~ o ~ " stored";
-screen.log.write(ltext);
-}
+## Add listener for bomb impact (from vulcan b2)
+setlistener("ai/models/model-impact", func(n) {
+ var impact = n.getValue();
+ var solid = getprop(impact ~ "/material/solid");
+
+ if (solid){
+ var long = getprop(impact ~ "/impact/longitude-deg");
+ var lat = getprop(impact ~ "/impact/latitude-deg");
+
+ geo.put_model("Aircraft/vulcanb2/Models/crater.ac",lat, long);
+ }
+});
#removing
#props.globals.getNode("/models", 1).removeChild("model", 0);
-
-#print("clear downhill");
Index: low.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/low.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- low.nas 24 Aug 2008 16:09:37 -0000 1.1
+++ low.nas 30 Mar 2010 21:49:41 -0000 1.2
@@ -9,15 +9,11 @@
var calt = getprop("position/altitude-agl-ft");
var cspd = getprop("velocities/groundspeed-kt");
-var burn0 = getprop("controls/engines/engine[0]/afterburner");
-var burn1 = getprop("controls/engines/engine[1]/afterburner");
-if((calt <= 300) and (cspd >= 450)) {
-setprop("controls/state/low_level", 1);
-} elsif ((calt <= 300) and ((burn0 == 1) or (burn1 == 1))) {
-setprop("controls/state/low_level", 1);
- } else {
-setprop("controls/state/low_level", 0);
+if((calt <= 300) and (cspd >= 430)) {
+ setprop("controls/state/low_level", 1);
+} else {
+ setprop("controls/state/low_level", 0);
}
settimer(low_loop, 1);
Index: oso_management.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/oso_management.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- oso_management.nas 11 Dec 2008 00:02:50 -0000 1.1
+++ oso_management.nas 30 Mar 2010 21:49:44 -0000 1.2
@@ -1,16 +1,267 @@
-#arms delivery system
+###arms delivery system
-var intmd_info = [
-{ position: 1, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 2, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 3, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 4, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 5, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 6, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 7, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0},
-{ position: 8, armed: 0, type: "gbu-31", guidable: 1, active: 0, released: 0}
+### weapon dialog
+var weapon_select = gui.Dialog.new("dialog","Aircraft/B-1B/Dialogs/weapons.xml");
+
+###set global vars
+var wpn_info = [
+ { position: 1, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 2, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 3, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 4, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 5, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 6, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 7, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999},
+ { position: 8, armed: 0, type: "", guidable: 1, active: 0, released: 0, lon: 0, lat: 0, talt_m: 0, distance: "9999", timer: 9999}
];
+var rot_launch_seq = [0,0,0,0,0,0,0,0];
+setprop("armament/bay1/launcher-pos", 0);
+setprop("ai/guided/target-number", 0);
+
+#####
+###weapon load
+#####
+var wpn_load = func (n) {
+
+ var wow = getprop("gear/gear[0]/wow");
+ var roll = getprop("gear/gear[0]/rollspeed-ms");
+ if ((wow == 1) and (roll < 1)) {
+ var weight_intmd = 0;
+ for (var i = 0; i < 8; i += 1) {
+ wpn_info[i].type = "gbu-31";
+ wpn_info[i].armed = 0;
+ wpn_info[i].active = 0;
+ wpn_info[i].released = 0;
+ setprop("armament/bay"~ n ~"/rack"~ i ~"-armed",0);
+ setprop("armament/bay"~ n ~"/rack"~ i ~"",1);
+ setprop("ai/guided/bomb["~ i ~"]/target-distance",9999);
+ setprop("ai/guided/bomb["~ i ~"]/target-distance-sec",9999);
+ setprop("ai/guided/bomb["~ i ~"]/target-latitude-deg",0);
+ setprop("ai/guided/bomb["~ i ~"]/target-longitude-deg",0);
+ weight_intmd += 2000;#2000lb for gbu-31
+ }
+ var bw = 4 + n;
+ setprop("sim/weight["~ bw ~"]/weight-lb", weight_intmd);
+ var ltext = "Weapons loaded!";
+ screen.log.write(ltext);
+ #some geo stuff tryout
+ var clat = getprop("position/latitude-deg");
+ var clon = getprop("position/longitude-deg");
+ var geo_info = geodinfo(clat,clon);
+ var solid = geo_info[1]["solid"];
+ var material_name = geo_info[1]["names"][0];
+ #debug.dump(geo_info);#dumps the whole info
+ print("Current landcover:");
+ print(solid);#1 if solid, 0 if not
+ print(material_name);
+
+ } else {
+ var ltext = "You have to stop at an airfield to be able to onload weapons!";
+ screen.log.write(ltext);
+ }
+}
+
+#####
+###weapon status update main
+#####
+var wpn_update = func(){
+
+ var n = getprop("armament/oso/bay-selected");
+
+ ## calculate distance and timer to targets
+ ##
+
+ var on = getprop("armament/oso/x-to-target");
+if (on){
+ # our position
+ var calt_m = getprop("position/altitude-ft") / 3.28084;
+ var clat = getprop("position/latitude-deg");
+ var clong = getprop("position/longitude-deg");
+ var cpos = geo.Coord.new().set_latlon(clat, clong, calt_m);
+
+ # target parameters
+ for (var i = 0; i < 8; i += 1) {
+ # target parameters
+ var tpos = geo.Coord.new().set_latlon(wpn_info[i]["lat"], wpn_info[i]["lon"], wpn_info[i]["talt_m"]);
+
+ var tdist = cpos.distance_to(tpos);#in m
+ var tdist_nm = (tdist / 1000) * 0.539956;#m to nm
+ wpn_info[i].distance = tdist_nm;
+ setprop("ai/guided/bomb["~ i ~"]/target-distance",tdist_nm);
+
+ var tdalt = calt_m - wpn_info[i]["talt_m"];
+ var range_max = tdalt * 3;#30000m downrange for 10000m alt
+
+ #new: calc sec to in range
+ var tdist_range = tdist - range_max;
+ var c_speed = getprop("velocities/groundspeed-kt");
+ var tdist_range_time = tdist_range / (c_speed * 0.51444);#conversions and calc of sec
+ wpn_info[i].timer = tdist_range_time;
+ setprop("ai/guided/bomb["~ i ~"]/target-distance-sec",tdist_range_time);
+ if (tdist_range_time < 4){
+ b1b.bay_intmd(1);
+ }
+
+ var tdeg = cpos.course_to(tpos);
+ setprop("ai/guided/bomb["~ i ~"]/target-bearing", tdeg);
+ var chdg = getprop("orientation/heading-deg");
+ var rel_tdeg = tdeg - chdg;
+
+ #wpn check and release if in range
+ if ((range_max > tdist) and (rel_tdeg > -45) and (rel_tdeg < 45)){
+ setprop("ai/guided/bomb["~ i ~"]/target-in_range", 1);
+ #print("targetinrange" ~ i ~ "");
+ if ((wpn_info[i]["armed"] == 1) and (wpn_info[i]["active"] == 0)){
+ wpn_info[i].active = 1;
+ #prepare rot launcher for release
+ rot_launch_seq[i] = 1;
+ print("target_in_range");
+ }
+ } else {
+ rot_launch_seq[i] = 0;
+ #print("target_out_of_range");
+ }
+
+ }#for end
+ settimer(wpn_update, 1);
+ weapons.wso_mfd_draw();
+ }#on end
+}#end
+
+#####
+###launch weapons from rot launcher
+#####
+var rot_launch_rel = func() {
+
+ # calc how many bombs are in target range
+ var in_range = 0;
+ for (var i = 0; i < 8; i += 1) {
+ if (rot_launch_seq[i] == 1){
+ in_range += 1;
+ }
+ }
+ if (in_range > 0) {
+ var bay = getprop("armament/oso/bay-selected");
+ var launcher_pos = getprop("armament/bay"~ bay ~"/launcher-pos");
+ if (rot_launch_seq[launcher_pos] == 1){
+ weapons.launch(launcher_pos);
+ rot_launch_seq[launcher_pos] = 0;
+ wpn_info[launcher_pos].released = 1;
+ wpn_info[launcher_pos].type = "";
+ wpn_info[launcher_pos].armed = 0;
+ setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"-armed",0);
+ setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"",0);
+ setprop("armament/bay"~ bay ~"/rack"~ launcher_pos ~"-released",1);
+ #weight adjust
+ var bw = 4 + bay;
+ var weight_intmd = getprop("sim/weight["~ bw ~"]/weight-lb");
+ weight_intmd -= 2000;
+ setprop("sim/weight["~ bw ~"]/weight-lb", weight_intmd);
+ #set released
+ print("weapon_released");
+ }
+ launcher_pos += 1;
+ if (launcher_pos >= 8) {
+ launcher_pos = 0;
+ }
+ interpolate("armament/bay"~ bay ~"/launcher-pos",launcher_pos,1);
+ interpolate("armament/bay"~ bay ~"/launcher-pos-anim",launcher_pos,1);
+ }
+ var on = getprop("armament/oso/auto-release");
+ if (on){
+ settimer(rot_launch_rel, 1.1);
+ }
+}
+
+#####
+###OSO SMS buttons and functions
+#####
+var oso_sms_select = func (m, n){
+ #m: 1=bay,2=buttons - n: 0-9
+ if (m == 1){
+ setprop("armament/oso/bay-selected",n);
+ }
+ if (m == 2){
+ setprop("armament/oso/number-selected",n);
+ }
+}
+#arm selected bay and number if weapon is present
+var oso_arm = func(n){
+ var bay = getprop("armament/oso/bay-selected");
+ var nr = getprop("armament/oso/number-selected");
+ if (wpn_info[nr]["type"] == "gbu-31"){
+ wpn_info[nr].armed = n;
+ setprop("armament/bay"~ bay ~"/rack"~ nr ~"-armed",n);
+ }
+}
+
+#rotate bay launcher, n determines racks to rotate
+var launcher_rot = func(n) {
+ var bay = getprop("armament/oso/bay-selected");
+ var launcher_pos = getprop("armament/bay"~ bay ~"/launcher-pos");
+ launcher_pos += n;
+ if (launcher_pos >= 8) {
+ launcher_pos = int(launcher_pos - 8);
+ }
+ interpolate("armament/bay"~ bay ~"/launcher-pos",launcher_pos,n);
+ interpolate("armament/bay"~ bay ~"/launcher-pos-anim",launcher_pos,n);
+}
+
+#####
+## target designator (target_number(), mouseclick and target_des())
+#####
+
+### sets target coordinates via mouseclick and t button
+var target_des = func {
+ var n = getprop("ai/guided/target-number");
+ var m = n + 1;
+
+ # target parameters
+ var target = geo.click_position();
+ var tlat = target.lat();
+ var tlon = target.lon();
+ setprop("ai/guided/bomb["~ n ~"]/target-latitude-deg",tlat);
+ setprop("ai/guided/bomb["~ n ~"]/target-longitude-deg",tlon);
+ wpn_info[n].lon = tlon;
+ wpn_info[n].lat = tlat;
+ var talt_m = geo.elevation(wpn_info[n]["lat"], wpn_info[n]["lon"]);
+ if ((talt_m == "nil") or (talt_m == '')) {
+ return;
+ }
+ wpn_info[n].talt_m = talt_m;
+
+ var ltext = "Coordinates for target " ~ m ~ " stored";
+ screen.log.write(ltext);
+}
-var type = intmd_info[0]["type"];
+var target_number = func(n){
+ var m = getprop("ai/guided/target-number");
+ m = m + n;
+ if ((m > 7) or (m < 0)) {
+ m = 0;
+ }
+ var mpl = m + 1;
+ setprop("ai/guided/target-number", m);
+ var ltext = "Rack " ~ mpl ~ " selected";
+ screen.log.write(ltext);
+}
-intmd_info[0].type = "gbu-31";# set type to gbu-31
+### adjust sniper pod
+var sniper_pod = func(n) {
+var pod_pos = getprop("armament/sniper-pod/position-norm");
+ if ((pod_pos <= 4) and (n == 1)) {
+ var pod_pos_new = pod_pos + n;
+ interpolate("armament/sniper-pod/position-norm",pod_pos_new,1);
+ }
+ if ((pod_pos >= 1) and (n == -1)) {
+ var pod_pos_new = pod_pos + n;
+ interpolate("armament/sniper-pod/position-norm",pod_pos_new,1);
+ }
+# to reset
+ if ((pod_pos >= 0.01) and (pod_pos <= 0.99)) {
+ interpolate("armament/sniper-pod/position-norm",0,1);
+ }
+}
+##
+#var type = wpn_info[0]["type"];
+#wpn_info[0].type = "gbu-31";# set type to gbu-31
Index: phd.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/phd.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- phd.nas 23 Jan 2010 09:51:26 -0000 1.1
+++ phd.nas 30 Mar 2010 21:49:46 -0000 1.2
@@ -5,7 +5,7 @@
var disp_length = 0.0856; # lenght of the plots line in m (3D model).
var disp_def = 50; # number of plots in the line (3D model).
-var dev_calibration = 5.5; # factors vert. deviation for better readability (2.5).
+var dev_calibration = 2.75; # factors vert. deviation for better readability (5.5).
var UPDATE_PERIOD = 0.2;
Index: radar.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/radar.nas,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- radar.nas 23 Jan 2010 09:51:27 -0000 1.2
+++ radar.nas 30 Mar 2010 21:49:46 -0000 1.3
@@ -1,13 +1,5 @@
##### Radar properties for display of multiplayer aircraft
-
-setlistener("/sim/signals/fdm-initialized", func {
-setprop("controls/switches/radar_init", 0);
-radar.mplayer();
-});
-
-#setlistener("controls/switches/terrain-follow", func {
-#settimer(mplayer,1, 0);
-#});
+##### Sorts aircraft (ai,multiplayer,tanker,carrier) due to distance
### calculates the correct mp distance for radar display
#var 10 = 0.0080;
@@ -18,16 +10,115 @@
#var 320 = 0.00025;
#var 640 = 0.000125;
-var mplayer = func {
-var r_init = getprop("controls/switches/radar_init");
+var Mp = props.globals.getNode("ai/models");
+var mp_list = [];
+var tgts_list = [];
+var tgts_dist = [];
+var tgts_ind = [];
+
+var tgt_info = func(){
+ #var our_ac_name = getprop("sim/aircraft");
+ #var my_radardist = radar.my_maxrange( our_ac_name ) / 1.852; # in kilometers ->* to nm
+ #debug.dump(my_radardist);
+ tgts_list = [];
+ tgts_dist = {};
+ tgts_ind = [];
+ var raw_list = Mp.getChildren();
+ foreach( var c; raw_list ) {
+ #debug.dump(c);
+ var type = c.getName();
+ var index = c.getIndex();
+
+ if (type == "aircraft" or type == "multiplayer" or type == "tanker" or type == "carrier"){
+ var radar_av = c.getNode("radar");
+ if (radar_av != nil or ""){
+ var radar_range = c.getNode("radar/range-nm", 1).getValue();
+ var in_range = c.getNode("radar/in-range", 1).getValue();
+ var range_radar = getprop("instrumentation/radar/range[0]");
+ if(radar_range != nil and radar_range > 0 and range_radar > radar_range and in_range == 1){
+ append(tgts_list, c);
+ #var tc = typeof(c);
+ #print(tc);
+ var c_name = type ~ "[" ~ index ~ "]";
+ #print(c_name);
+ tgts_dist[radar_range] = c_name;
+ append(tgts_ind, radar_range);
+ }
- if (r_init == 0) {
-# print("init1");
- setprop("controls/switches/radar_init", 1);
- setprop("controls/switches/radar_i", 0);
}
+
+ }
+ }
+
+ #debug.dump(tgts_dist);
+ #debug.dump(tgts_ind);
+ var tgt_ind_sort = sort_array(tgts_ind);
+ #debug.dump(tgt_ind_sort);
+ mp_list = [];
+ for (var i = 0; i < size(tgt_ind_sort); i += 1){
+ var tgt_close = tgts_dist[tgt_ind_sort[i]];
+ tgt_close = "ai/models/" ~ tgt_close;
+ append(mp_list, tgt_close);
+ }
+ #debug.dump(mp_list);
+
+ settimer(tgt_info,3);
+ show_radar();
+}
+
+#sorting array in ascending order, pass array
+var sort_array = func(n){
+ var Ta = n;
+ var ttemp = 0;
+ var tgt_size = size(tgts_ind);
+ for (var i = 1; i < tgt_size; i += 1) {
+ var k = 0;
+ for (var j = i; j > 0; j -= 1) {
+ k = j - 1;
+ if (Ta[k] > Ta[j]){
+ ttemp = Ta[j];
+ Ta[j] = Ta[k];
+ Ta[k] = ttemp;
+
+ }
+ }
+ }
+ return(Ta);
+}
+
+var show_radar = func(){
+ var r_init = getprop("controls/switches/radar_init");
+ if (r_init == 1) {
+
+ #foreach( var c; mp_list ) {
+ for (var i = 0; i < size(mp_list); i += 1){
+ var c = props.globals.getNode(mp_list[i]);
+ #print(mp_list[i]);
+ var in_range = c.getNode("radar/in-range", 1).getValue();
+ setprop("instrumentation/radar/targets/target["~ i ~"]/in-range", in_range);
+ var radar_range = c.getNode("radar/range-nm", 1).getValue();
+ setprop("instrumentation/radar/targets/target["~ i ~"]/range-nm", radar_range);
+ var radar_bearing = c.getNode("radar/bearing-deg", 1).getValue();
+ setprop("instrumentation/radar/targets/target["~ i ~"]/bearing-deg", radar_bearing);
+ var radar_heading = c.getNode("orientation/true-heading-deg", 1).getValue();
+ setprop("instrumentation/radar/targets/target["~ i ~"]/true-heading-deg", radar_heading);
+ # calc draw distance
+ var range_radar = getprop("instrumentation/radar/range[0]");
+ var factor_range_radar = 0.08 / range_radar;
+ var draw_radar = factor_range_radar * radar_range;
+ setprop("instrumentation/radar/targets/target["~ i ~"]/draw-range-nm", draw_radar);
+
+ }
+
+ }
+}
+
+
+var mplayer = func {
+ var r_init = getprop("controls/switches/radar_init");
+
if (r_init == 1) {
-#print("init2");
+ #print("init2");
var i = getprop("controls/switches/radar_i");
var range_mp = getprop("ai/models/multiplayer[" ~ i ~ "]/distance-to-nm[0]");
var range_radar = getprop("instrumentation/radar/range[0]");
@@ -38,6 +129,7 @@
var factor_range_radar = 0.08 / range_radar;
var draw_radar = factor_range_radar * range_mp;
setprop("ai/models/multiplayer[" ~ i ~ "]/radar/draw-range-nm[0]", draw_radar);
+
###calculates the relative altitude compared to the user
var mp_alt = getprop("ai/models/multiplayer[" ~ i ~ "]/position/altitude-ft");
var my_alt = getprop("position/altitude-ft");
@@ -46,12 +138,18 @@
}
var rel_alt_mp = mp_alt - my_alt;
setprop("ai/models/multiplayer[" ~ i ~ "]/position/rel-altitude-ft", rel_alt_mp);
- var i = i + 1;
+ i = i + 1;
if (i == 13) {
- var i = 0;
+ i = 0;
}
setprop("controls/switches/radar_i", i);
}
-settimer(mplayer, 0.1);
+ settimer(mplayer, 0.5);
}
+setlistener("/sim/signals/fdm-initialized", func {
+ setprop("controls/switches/radar_init", 1);
+ setprop("controls/switches/radar_i", 0);
+ #radar.mplayer();
+ tgt_info();
+});
Index: rain.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/rain.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- rain.nas 4 Mar 2008 18:52:51 -0000 1.1
+++ rain.nas 30 Mar 2010 21:49:46 -0000 1.2
@@ -12,11 +12,11 @@
var speed = getprop("velocities/airspeed-kt");
if (rain >= 50) {
setprop("environment/rain/rain", 1);
-settimer(rain_loop, 0.15);
+settimer(rain_loop, 0.5);
} else {
var rain_new = (rain + 1);
setprop("environment/rain/rain", rain_new);
- settimer(rain_loop, 0.15);
+ settimer(rain_loop, 0.5);
}
}
Index: terrain_follow.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/B-1B/Nasal/terrain_follow.nas,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- terrain_follow.nas 23 Jan 2010 09:51:28 -0000 1.1
+++ terrain_follow.nas 30 Mar 2010 21:49:47 -0000 1.2
@@ -1,79 +1,127 @@
-#terrain following system - max speed 540knots tas
-#print("terrain following system active");
-
-#define local global vars
-var beam_ele = -9999;
-var sec_per_km = nil;
-var fixpos = nil;
-
-#start main loops if terrain-follow activated
-setlistener("controls/switches/terrain-follow", func {
- cont_loop();
- time_loop();
+#Terrain following script by glazmax
+#To activate/use prepare the following properties:
+#1.)set/create property: "instruments/tfs/range" to 1,2 or 3 (=nm radar range terrain prefetch)
+#2.)set/create property: "controls/switches/terrain-follow-clr" to desired terrain clearance in ft (eg.200 or 600)
+#3.)set/create/toggle property: "controls/switches/terrain-follow" to true
+#
+#terrain following 1000km/h:277.778m/s
+
+setlistener("controls/switches/terrain-follow", func() {
+ var act_path = [0,0,0];
+ setprop("controls/switches/terrain-follow-rng",1);
+ setprop("instrumentation/tfs/range",1);
+ setprop("instrumentation/tfs/high", 0);
+ setprop("instrumentation/tfs/time", 0);
+ setprop("instrumentation/tfs/loww", 0);
+ tfs.beam_max();
});
+#create beam interval 0.1s = 27m resolution at 540knots
-var cont_loop = func {
- if(enabled){
- beam();
- dist_cycle();
- follow();
- cont_loop();
- }
-}
-
-var time_loop = func {
- if(enabled){
- time_per_km();
- settimer(time_loop,0.5);
- }
-}
+var beam_max = func() {
-var beam = func {
- var beam_dist = 3000;#in m
- var my_pos = geo.aircraft_position();
- var beam = my_pos.apply_course_distance(hdg, beam_dist);
- var beam_alt = geo.elevation(beam.lat(), beam.lon());
- if(beam_alt > beam_ele){
- beam_ele = beam_alt;
+ #var alt_mat = n;
+ var range = getprop("instrumentation/tfs/range");
+ var radar_range = range * 1852;#to m
+
+ var clat = getprop("position/latitude-deg");
+ var clon = getprop("position/longitude-deg");
+ var c_pos = geo.Coord.new().set_latlon(clat, clon);
+ #debug.dump(c_pos);
+ var c_hdg = getprop("orientation/heading-magnetic-deg");
+ var c_speed = getprop("velocities/groundspeed-kt");
+ var d_alt = getprop("controls/switches/terrain-follow-clr");
+ var m_speed = c_speed * 0.51444;#conv to m/s
+ var t_time = radar_range / m_speed;
+
+ var point_coord = c_pos.apply_course_distance(c_hdg, radar_range);
+ var point_e = geo.elevation(point_coord.lat(),point_coord.lon());
+
+ if (point_e == nil){
+ point_e = 0;
+ print("Radar scan malfunction, no terrain found!");
+ setprop("instrumentation/tfs/beam-malfunction",1);
+ #return(beam_max);
+ } elsif (point_e != nil){
+ setprop("instrumentation/tfs/beam-malfunction",0);
+ }
+
+ var point_ele = int((point_e * 3.2808) + d_alt);
+ #debug.dump(point_ele);
+
+ #if tfs on --> loop and feed ap_react
+ var enabled = getprop("controls/switches/terrain-follow");
+ if (enabled) {
+ ap_react(radar_range, point_ele, t_time);
+ settimer(beam_max,0.1);
}
}
-var time_per_km = func {
- var tas = getprop("velocities/groundspeed-kt");
- var tas_mps = tas * 1.852 / 3.6;
- sec_per_km = 1000 / tas_mps;
-}
-
-var vfps_up = func {
- var calt = getprop("position/altitude-ft");
- var talt = nil;
- target-vfpm = ((talt - calt) / sec_per_km + ((talt - calt) * 1) / (2 * sec_per_km)) * 3600;
- interpolate(instrumentation/teravd/current-vfpm,target-vfpm,(sec_per_km / 3));
-}
-
-var vfps_up_level = func {
- var talt = nil;
- if ((talt - calt) < ((talt - fixalt) / 4)){
- #engage alt hold to level out
- }
+#compute following behaviour according to scan results
+var ap_react = func(n,m,o){
+
+ var radar_range = n;
+ var point_ele = m;
+ var t_time = o;
+
+ #var alt_mat = getprop("instrumentation/tfs/alt_mat");
+ var high = getprop("instrumentation/tfs/high");
+ var time = getprop("instrumentation/tfs/time");
+ var loww = getprop("instrumentation/tfs/loww");
-}
+ var c_alt = getprop("position/altitude-ft");
-var dist_cycle = func {
- if(fixdist == nil or fixdist > 1000){#in m
- beam_ele = -9999;
- fixpos = geo.aircraft_position();
+ if (point_ele > c_alt) {
+ print("^up");
+ if (high < point_ele){
+ high = point_ele;
+ time = t_time;
+ } elsif (high > point_ele){
+ time -= 0.1;
+ if (loww < point_ele){
+ loww = point_ele;
+ }
}
- var fixdist = fixpos.direct_distance_to(geo.aircraft_position());#in m
-}
-
-var follow = func {
- if(talt >= calt){
- #go up
+
+ setprop("instrumentation/tfs/high", high);
+ setprop("instrumentation/tfs/time", time);
+ setprop("instrumentation/tfs/loww", loww);
+ ap_adjust(high);
+
+ } elsif (point_ele < c_alt){
+ print("vdown");
+ setprop("instrumentation/tfs/high", -999);
+ time -= 0.1;
+ setprop("instrumentation/tfs/time", time);
+ if (loww < point_ele){
+ loww = point_ele;
+ setprop("instrumentation/tfs/loww", loww);
+ }
+ if (time < 0){
+
+ time = t_time;
+ setprop("instrumentation/tfs/time", time);
+ setprop("instrumentation/tfs/loww", -999);
+ ap_adjust(loww);
}
- if(talt < calt){
- #go down
}
+}
+#adjust the autopilot "terrain-follow" function
+var ap_adjust = func(n) {
+
+ var t_alt = n;
+ setprop("autopilot/settings/target-follow-altitude-ft",t_alt);
+ setprop("autopilot/locks/altitude", "terrain-follow");
+ #print("t_alt:");
+ #debug.dump(t_alt);
+}
+
+#set range according to knob setting
+var range_set = func(){
+ var ranges = [0.5,1,2];
+ var r_set = getprop("controls/switches/terrain-follow-rng");
+ setprop("instrumentation/tfs/range",ranges[r_set]);
+ var set_print = ranges[r_set];
+ #print("tfs_range: " ~ set_print ~ "!");
}
\ No newline at end of file
--- "oso_target.nas" DELETED ---
--- "tfs.nas" DELETED ---
--- "weapons.nas" DELETED ---
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev