You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(24) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(47) |
2006 |
Jan
(353) |
Feb
(445) |
Mar
(417) |
Apr
(227) |
May
(230) |
Jun
(327) |
Jul
(267) |
Aug
(336) |
Sep
(78) |
Oct
(215) |
Nov
(275) |
Dec
(411) |
2007 |
Jan
(570) |
Feb
(322) |
Mar
(425) |
Apr
(316) |
May
(536) |
Jun
(1280) |
Jul
(475) |
Aug
(235) |
Sep
(207) |
Oct
(478) |
Nov
(751) |
Dec
(1020) |
2008 |
Jan
(352) |
Feb
(607) |
Mar
(488) |
Apr
(406) |
May
(276) |
Jun
(295) |
Jul
(924) |
Aug
(1415) |
Sep
(481) |
Oct
(1169) |
Nov
(692) |
Dec
(889) |
2009 |
Jan
(521) |
Feb
(612) |
Mar
(1014) |
Apr
(855) |
May
(854) |
Jun
(620) |
Jul
(558) |
Aug
(260) |
Sep
(487) |
Oct
(823) |
Nov
(471) |
Dec
(464) |
2010 |
Jan
(761) |
Feb
(453) |
Mar
(783) |
Apr
(328) |
May
(42) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:59:48
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel/Instruments/ai In directory baron.flightgear.org:/tmp/cvs-serv25280/ai Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel/Instruments/ai added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:59:43
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel/Instruments In directory baron.flightgear.org:/tmp/cvs-serv25270/Instruments Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel/Instruments added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:59:26
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel In directory baron.flightgear.org:/tmp/cvs-serv25252/Panel Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior/Panel added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:59:13
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior In directory baron.flightgear.org:/tmp/cvs-serv25238/Interior Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Interior added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:58:49
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/light In directory baron.flightgear.org:/tmp/cvs-serv25223/light Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/light added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:58:37
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Liveries In directory baron.flightgear.org:/tmp/cvs-serv25211/Liveries Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Liveries added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:58:23
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Pilot In directory baron.flightgear.org:/tmp/cvs-serv25190/Pilot Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models/Pilot added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:58:05
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models In directory baron.flightgear.org:/tmp/cvs-serv25175/Models Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Models added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:57:47
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Nasal In directory baron.flightgear.org:/tmp/cvs-serv25156/Nasal Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Nasal added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:57:31
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Sounds In directory baron.flightgear.org:/tmp/cvs-serv25140/Sounds Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Sounds added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:57:16
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Dialogs In directory baron.flightgear.org:/tmp/cvs-serv25128/Dialogs Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl/Dialogs added to the repository |
From: Emmanuel B. <he...@ba...> - 2010-05-02 16:54:52
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl In directory baron.flightgear.org:/tmp/cvs-serv25106/Pterodactyl Log Message: Directory /var/cvs/FlightGear-0.9/data/Aircraft/Pterodactyl added to the repository |
From: Torsten D. <to...@ba...> - 2010-05-01 20:44:05
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/SenecaII/Systems In directory baron.flightgear.org:/tmp/cvs-serv19553 Modified Files: CENTURYIII.xml Log Message: Prepare for manual electric pitch trim. autopilot/CENTURYIII/controls/manual-trim should be connected to the yoke's trim switch. Legal values are +1/-1. Using this switch also disconnects the autopilot. Index: CENTURYIII.xml =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/SenecaII/Systems/CENTURYIII.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- CENTURYIII.xml 18 Mar 2010 07:46:33 -0000 1.6 +++ CENTURYIII.xml 1 May 2010 20:42:26 -0000 1.7 @@ -435,9 +435,24 @@ <condition> <property alias="../../../../params/serviceable"/> <property alias="../../../../params/power"/> - <property alias="../../../../params/controls/pitch/lock"/> + <or> + <property alias="../../../../../params/controls/pitch/lock"/> + <not-equals> + <property alias="../../../../../../params/controls/manual-trim"/> + <value type="double">0.0</value> + </not-equals> + </or> </condition> </enable> + <input> + <condition> + <not-equals> + <property alias="../../../../../params/controls/manual-trim"/> + <value type="double">0.0</value> + </not-equals> + </condition> + <property alias="../../../params/controls/manual-trim"/> + </input> <input alias="../../params/elevator-trim-cmd"/> <output>controls/flight/elevator-trim</output> <type>noise-spike</type> |
From: Torsten D. <to...@ba...> - 2010-05-01 20:03:18
|
Update of /var/cvs/FlightGear-0.9/data/Aircraft/SenecaII/Systems In directory baron.flightgear.org:/tmp/cvs-serv16135 Modified Files: Instrument-filter.xml kcs55.xml Log Message: Lowpass filter the GS needle a bit to react smoother to the side lobes. Index: Instrument-filter.xml =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/SenecaII/Systems/Instrument-filter.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Instrument-filter.xml 22 Mar 2010 19:49:44 -0000 1.2 +++ Instrument-filter.xml 1 May 2010 19:19:02 -0000 1.3 @@ -18,6 +18,24 @@ <!-- Some low pass filters to soften the response of various instruments --> <PropertyList> <filter> + <name>NAV1 gs-needle deflection filter</name> + <debug>false</debug> + <type>exponential</type> + <filter-time>2.0</filter-time> + <input>instrumentation/nav[0]/gs-needle-deflection-norm</input> + <output>instrumentation/nav[0]/gs-needle-deflection-filtered</output> + </filter> + + <filter> + <name>NAV2 gs-needle deflection filter</name> + <debug>false</debug> + <type>exponential</type> + <filter-time>1.5</filter-time> + <input>instrumentation/nav[1]/gs-needle-deflection-norm</input> + <output>instrumentation/nav[1]/gs-needle-deflection-filtered</output> + </filter> + + <filter> <name>RPM Indicator-Left filter</name> <debug>false</debug> <type>exponential</type> Index: kcs55.xml =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Aircraft/SenecaII/Systems/kcs55.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- kcs55.xml 18 Mar 2010 07:46:35 -0000 1.4 +++ kcs55.xml 1 May 2010 19:19:32 -0000 1.5 @@ -31,7 +31,7 @@ <!-- The property from where the deflection the gs arrows is read --> - <gs-deflection-property type="string">instrumentation/nav[0]/gs-needle-deflection-norm</gs-deflection-property> + <gs-deflection-property type="string">instrumentation/nav[0]/gs-needle-deflection-filtered</gs-deflection-property> <!-- The property from where the the state of the TO flag is read --> <to-flag-property type="string">instrumentation/nav[0]/to-flag</to-flag-property> |
From: Frederic B. <fr...@ba...> - 2010-05-01 12:02:49
|
Update of /var/cvs/FlightGear-0.9/source/docs-mini In directory baron.flightgear.org:/tmp/cvs-serv25312/docs-mini Modified Files: README.MSVC Removed Files: README.MSVC8 Log Message: Cleanup MSVC projects, and update readme file Index: README.MSVC =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/docs-mini/README.MSVC,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- README.MSVC 11 Sep 2005 09:48:19 -0000 1.3 +++ README.MSVC 1 May 2010 11:06:55 -0000 1.4 @@ -1,20 +1,70 @@ -How to compile FlightGear with Microsoft Visual C++ 7.0 -====================================================== +Use FlightGear.sln to compile fgfs executable for Win32 or x64 architectures with Visual Studio 2008. +Previous versions of Visual Studio are not officially supported anymore. -I am receiving an increasing number of request for working -project files for MSVC. While I can't reply specifically -to everybody, I packed my current, unedited, project files -here : -ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/ - -They are for MSVC 7. I am not trying to compile with MSVC 6 -anymore because it is an old compiler ( released 5 years ago ) -that has serious bugs and limitations that would make the -source ugly. For those that want to try, there are already -.dsp files in plib, SimGear and FlightGear source trees. +Precompiled librairies and headers for compiling x64 executables with VS2008 : +ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-x64-VS90-3rdParty+OSG-20100501.zip -Support request must be directed to the mailing list. +Precompiled librairies and headers for compiling Win32 executables with VS2008 : +ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-win32-VS90-3rdParty+OSG-20100501.zip +The VS2008 / v9.0 project files assume the directory layout below : -Pthread support for Windows can be obtained here: -http://sourceware.org/pthreads-win32/ +Win32 build : + * any_directory_on_any_drive / + 3rdParty / ( includes plib, fltk, zlib, libpng, libjpeg, libtiff, freetype, libsvn, gdal, ... + bin / + include / + lib / + boost_1_39_0 / + boost / + source / ( Flightgear CVS directory - It can also be renamed FlightGear or anything else + src / + projects / + VC90 / + Win32 / ( generated at build time + Debug / ( Debug executable + Release / ( Release executable + FlightGear.sln ( Main solution + utils / + install / + msvc90 / + OpenSceneGraph / ( OSG CMake install + bin / + include / + lib / + SimGear / ( SimGear CVS directory + simgear / + projects / + VC90 / + +3rdParty, boost_1_39_0 and install/msvc90 are included in the Win32 3rdParty archive. + +x64 build : + * any_directory_on_any_drive / + 3rdParty.x64 / ( includes plib, fltk, zlib, libpng, libjpeg, libtiff, freetype, ... + bin / + include / + lib / + boost_1_39_0 / + boost / + source / ( Flightgear CVS directory - It can also be renamed FlightGear or anything else + src / + projects / + VC90 / + x64 / ( generated at build time + Debug / ( Debug executable + Release / ( Release executable + FlightGear.sln ( Main solution + utils / + install / + msvc90-64 / + OpenSceneGraph / ( OSG CMake install + bin / + include / + lib / + SimGear / ( SimGear CVS directory + simgear / + projects / + VC90 / + +3rdParty.x64, boost_1_39_0 and install/msvc90-64 are included in the x32 3rdParty archive. --- "README.MSVC8" DELETED --- |
Update of /var/cvs/FlightGear-0.9/source/projects/VC7.1 In directory baron.flightgear.org:/tmp/cvs-serv25312/projects/VC7.1 Removed Files: .cvsignore 3dconvert.vcproj fgadmin.rc fgadmin.vcproj fgjs.vcproj fgviewer.vcproj flightgear.ico flightgear.rc FlightGear.sln FlightGear.vcproj GPSsmooth.vcproj metar.vcproj MIDGsmooth.vcproj terrasync.vcproj UGsmooth.vcproj xmlgrep.vcproj yasim.vcproj Log Message: Cleanup MSVC projects, and update readme file --- ".cvsignore" DELETED --- --- "3dconvert.vcproj" DELETED --- --- "fgadmin.rc" DELETED --- --- "fgadmin.vcproj" DELETED --- --- "fgjs.vcproj" DELETED --- --- "fgviewer.vcproj" DELETED --- --- "flightgear.ico" DELETED --- --- "flightgear.rc" DELETED --- --- "FlightGear.sln" DELETED --- --- "FlightGear.vcproj" DELETED --- --- "GPSsmooth.vcproj" DELETED --- --- "metar.vcproj" DELETED --- --- "MIDGsmooth.vcproj" DELETED --- --- "terrasync.vcproj" DELETED --- --- "UGsmooth.vcproj" DELETED --- --- "xmlgrep.vcproj" DELETED --- --- "yasim.vcproj" DELETED --- |
From: Frederic B. <fr...@ba...> - 2010-05-01 12:02:39
|
Update of /var/cvs/FlightGear-0.9/source/projects/VC90 In directory baron.flightgear.org:/tmp/cvs-serv25312/projects/VC90 Removed Files: README.msvc Log Message: Cleanup MSVC projects, and update readme file --- "README.msvc" DELETED --- |
From: Tim M. <ti...@ba...> - 2010-04-30 15:20:47
|
Update of /var/cvs/FlightGear-0.9/data/Shaders In directory baron.flightgear.org:/tmp/cvs-serv13945/Shaders Modified Files: landmass-g.vert landmass.geom Log Message: Another go at the landmass geometry shader, using fewer varying parameters Author: Tim Moore <ti...@re...> Index: landmass-g.vert =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Shaders/landmass-g.vert,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- landmass-g.vert 22 Apr 2010 14:56:35 -0000 1.2 +++ landmass-g.vert 30 Apr 2010 15:20:36 -0000 1.3 @@ -15,18 +15,14 @@ // model position of original terrain poly; the bottom of the forest. varying vec4 rawposIn; -// model forest top -varying vec4 rawTopIn; // model normal varying vec3 NormalIn; varying vec4 ecPosIn; -varying vec4 ecTopIn; varying vec3 ecNormalIn; // eye spacce tangent and binormal varying vec3 VTangentIn; varying vec3 VBinormalIn; // screen-space position of top -varying vec4 positionTopIn; // constant color component varying vec4 constantColorIn; @@ -40,15 +36,15 @@ rawposIn = gl_Vertex; ecPosIn = gl_ModelViewMatrix * gl_Vertex; NormalIn = normalize(gl_Normal); - rawTopIn = rawposIn + vec4(0.0, 0.0, canopy_height, 0.0); - ecTopIn = gl_ModelViewMatrix * rawTopIn; + //rawTopIn = rawposIn + vec4(0.0, 0.0, canopy_height, 0.0); + //ecTopIn = gl_ModelViewMatrix * rawTopIn; ecNormalIn = gl_NormalMatrix * NormalIn; VTangentIn = gl_NormalMatrix * tangent; VBinormalIn = gl_NormalMatrix * binormal; gl_FrontColor = gl_Color; gl_Position = ftransform(); - positionTopIn = gl_ModelViewProjectionMatrix * rawTopIn; + //positionTopIn = gl_ModelViewProjectionMatrix * rawTopIn; gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; constantColorIn = gl_FrontMaterial.emission + gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient); Index: landmass.geom =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Shaders/landmass.geom,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- landmass.geom 22 Apr 2010 14:56:35 -0000 1.4 +++ landmass.geom 30 Apr 2010 15:20:36 -0000 1.5 @@ -9,13 +9,10 @@ // See landmass-g.vert for a description of the inputs. varying in vec4 rawposIn[]; varying in vec3 NormalIn[]; -varying in vec4 rawTopIn[]; varying in vec4 ecPosIn[]; -varying in vec4 ecTopIn[]; varying in vec3 ecNormalIn[]; varying in vec3 VTangentIn[]; varying in vec3 VBinormalIn[]; -varying in vec4 positionTopIn[]; varying in vec4 constantColorIn[]; uniform float canopy_height; @@ -67,14 +64,25 @@ void main(void) { + vec4 rawTopDisp = vec4(0.0, 0.0, canopy_height, 0.0); + vec4 ecTopDisp = gl_ModelViewMatrix * rawTopDisp; + vec4 mvpTopDisp = gl_ModelViewProjectionMatrix * rawTopDisp; + // model forest top + vec4 rawTopIn[3]; + vec4 ecTopIn[3]; + vec4 positionTopIn[3]; rawSideNormal[0] = normalize(cross((rawposIn[1] - rawposIn[0]).xyz, NormalIn[0])); rawSideNormal[1] = normalize(cross((rawposIn[2] - rawposIn[1]).xyz, NormalIn[1])); rawSideNormal[2] = normalize(cross((rawposIn[0] - rawposIn[2]).xyz, NormalIn[2])); - for (int i = 0; i < 3; ++i) + for (int i = 0; i < 3; ++i) { sideNormal[i] = gl_NormalMatrix * rawSideNormal[i]; + rawTopIn[i] = rawposIn[i] + rawTopDisp; + ecTopIn[i] = ecPosIn[i] + ecTopDisp; + positionTopIn[i] = gl_PositionIn[i] + mvpTopDisp; + } if (canopy_height > 0.01) { // Sides doSideVertex(0, 0, rawTopIn[0], ecTopIn[0], positionTopIn[0]); |
From: Erik H. <eh...@ba...> - 2010-04-29 13:41:26
|
Update of /var/cvs/FlightGear-0.9/source/src/ATCDCL In directory baron.flightgear.org:/tmp/cvs-serv25586 Modified Files: ATC.cxx Log Message: tie ATIS to the listener position and orientation Index: ATC.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/ATCDCL/ATC.cxx,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- ATC.cxx 2 Jan 2010 20:22:02 -0000 1.11 +++ ATC.cxx 29 Apr 2010 13:40:57 -0000 1.12 @@ -59,6 +59,7 @@ { SGSoundMgr *smgr = globals->get_soundmgr(); _sgr = smgr->find("atc", true); + _sgr->tie_to_listener(); _volume = fgGetNode("/sim/sound/atc/volume", true); _enabled = fgGetNode("/sim/sound/atc/enabled", true); |
From: James T. <jm...@ba...> - 2010-04-26 17:03:46
|
Update of /var/cvs/FlightGear-0.9/data/gui/dialogs In directory baron.flightgear.org:/tmp/cvs-serv23593 Modified Files: route-manager.xml Log Message: Fix tabs in route-manager, and remove the 'x' button in favour of live input widgets. Index: route-manager.xml =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/gui/dialogs/route-manager.xml,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- route-manager.xml 13 Apr 2010 07:58:16 -0000 1.16 +++ route-manager.xml 26 Apr 2010 15:22:26 -0000 1.17 @@ -12,437 +12,442 @@ --> <PropertyList> - <name>route-manager</name> - <layout>vbox</layout> - <resizable>true</resizable> - - <nasal> - <open> - var ft = getprop("/sim/startup/units") == "feet"; - var dlg = props.globals.getNode("/sim/gui/dialogs/route-manager", 1); - var selection = dlg.getNode("selection", 1); - var input = dlg.getNode("input", 1); - var routem = props.globals.getNode("/autopilot/route-manager", 1); - - selection.setIntValue(-1); - input.setValue(""); - - var list = cmdarg().getNode("list"); - var cmd = routem.getNode("input", 1); - var route = routem.getNode("route", 1); - - var sel_index = func { - return int(selection.getValue()); - } - - var clear = func { - cmd.setValue("@clear"); - } - - var insert = func { - var insertIndex = sel_index(); - if (insertIndex >= 0) { - # when selection index is valid, insert *after* the waypoint - insertIndex = insertIndex + 1; - } - - cmd.setValue("@insert" ~ insertIndex ~ ":" ~ input.getValue()); - input.setValue(""); - - if (insertIndex >= 0) { - selection.setValue(insertIndex); - gui.dialog_update("route-manager"); - } - } - - var remove = func { - cmd.setValue("@delete" ~ sel_index()); - } - - var auto_route = func { - cmd.setValue(); - } + <name>route-manager</name> + <layout>vbox</layout> + <resizable>true</resizable> + + <nasal> + <open> + var ft = getprop("/sim/startup/units") == "feet"; + var dlg = props.globals.getNode("/sim/gui/dialogs/route-manager", 1); + var selection = dlg.getNode("selection", 1); + var input = dlg.getNode("input", 1); + var routem = props.globals.getNode("/autopilot/route-manager", 1); + + selection.setIntValue(-1); + input.setValue(""); + + var list = cmdarg().getNode("list"); + var cmd = routem.getNode("input", 1); + var route = routem.getNode("route", 1); + + var sel_index = func { + return int(selection.getValue()); + } + + var clear = func { + cmd.setValue("@clear"); + } + + var insert = func { + var insertIndex = sel_index(); + if (insertIndex >= 0) { + # when selection index is valid, insert *after* the waypoint + insertIndex = insertIndex + 1; + } + + cmd.setValue("@insert" ~ insertIndex ~ ":" ~ input.getValue()); + input.setValue(""); + + if (insertIndex >= 0) { + selection.setValue(insertIndex); + gui.dialog_update("route-manager"); + } + } + + var remove = func { + cmd.setValue("@delete" ~ sel_index()); + } + + var auto_route = func { + cmd.setValue(); + } var jump_to = func { cmd.setValue("@jump" ~ sel_index()); - } - - var load_route = func(path) { - routem.getNode("file-path", 1).setValue(path.getValue()); - cmd.setValue("@load"); - gui.dialog_update("route-manager"); - } + } + + var load_route = func(path) { + routem.getNode("file-path", 1).setValue(path.getValue()); + cmd.setValue("@load"); + gui.dialog_update("route-manager"); + } var save_route = func(path) { - routem.getNode("file-path", 1).setValue(path.getValue()); - cmd.setValue("@save"); - gui.dialog_update("route-manager"); - } - - var file_selector = gui.FileSelector.new(load_route, "Load flight-plan", "Load"); - var save_selector = gui.FileSelector.new(save_route, "Save flight-plan", "Save"); - - var activate_fp = func { - cmd.setValue("@activate"); - } - - var departureRunways = dlg.getNode("departure-runways", 1); - var destRunways = dlg.getNode("destination-runways", 1); - - var updateRunways = func { - gui.dialog_apply("route-manager", "departure-airport"); - gui.dialog_apply("route-manager", "destination-airport"); - - var depIcao = routem.getNode("departure").getNode("airport").getValue(); - departureRunways.removeChildren("value"); - - var apt = airportinfo(depIcao); - if (apt != nil) { - var i=0; - foreach (var rwy; keys(apt.runways)) { - departureRunways.getNode("value[" ~ i ~ "]", 1).setValue(rwy); - i += 1; - } - } - - var destIcao = routem.getNode("destination").getNode("airport").getValue(); - destRunways.removeChildren("value"); - - var apt = airportinfo(destIcao); - if (apt != nil) { - var i=0; - foreach (var rwy; keys(apt.runways)) { - destRunways.getNode("value[" ~ i ~ "]", 1).setValue(rwy); - i += 1; - } - } - - - gui.dialog_update("route-manager"); - } - </open> - - <close> - file_selector.del(); - save_selector.del(); - </close> - </nasal> - - <group> - <layout>hbox</layout> - <empty><stretch>1</stretch></empty> - - <text> - <label>Route Manager</label> - </text> - - <empty><stretch>1</stretch></empty> - - <button> - <pref-width>16</pref-width> - <pref-height>16</pref-height> - <legend></legend> - <default>1</default> - <keynum>27</keynum> - <border>2</border> - - <binding> - <command>dialog-close</command> - </binding> - </button> - </group> - <hrule/> - <!-- departure / arrival airport information --> - - <group> - <layout>hbox</layout> - <text> - <label>Departure:</label> - <pref-width>80</pref-width> - </text> - <input> - <name>departure-airport</name> - <pref-width>60</pref-width> - <property>/autopilot/route-manager/departure/airport</property> - </input> - - <text> - <format>%s</format> - <property>/autopilot/route-manager/departure/name</property> - <live>true</live> - <stretch>true</stretch> - <halign>fill</halign> - </text> - - <button> - <legend>X</legend> - <binding> - <command>nasal</command> - <script> - updateRunways(); - </script> - </binding> - </button> - - <text> - <label>Rwy:</label> - </text> - <combo> - <name>departure-runway</name> - <pref-width>60</pref-width> - <property>/autopilot/route-manager/departure/runway</property> - <editable>false</editable> - <properties>/sim/gui/dialogs/route-manager/departure-runways</properties> - </combo> - </group> - - <group> - <layout>hbox</layout> - <text> - <label>Arrival:</label> - <pref-width>80</pref-width> - </text> - <input> - <name>destination-airport</name> - <pref-width>60</pref-width> - <property>/autopilot/route-manager/destination/airport</property> - </input> - <text> - <stretch>true</stretch> - <format>%s</format> - <property>/autopilot/route-manager/destination/name</property> - <live>true</live> - <halign>fill</halign> - </text> - - <text> - <label>Rwy:</label> - </text> - <combo> - <name>destination-runway</name> - <pref-width>60</pref-width> - <property>/autopilot/route-manager/destination/runway</property> - <editable>false</editable> - <properties>/sim/gui/dialogs/route-manager/destination-runways</properties> - </combo> - </group> - <!-- - <group> - <layout>hbox</layout> - <text> - <label>Alternate:</label> - <pref-width>80</pref-width> - </text> - <input> - <name>alt-airport</name> - <halign>fill</halign> - <stretch>true</stretch> - <pref-width>150</pref-width> - <property>/autopilot/route-manager/alternate/airport</property> - </input> - - </group> - --> - <group> - <layout>hbox</layout> - <text> - <label>Cruise Speed (kts):</label> - <pref-width>80</pref-width> - </text> - <input> - <name>cruise-speed</name> - <live>true</live> - <halign>fill</halign> - <stretch>true</stretch> - <pref-width>150</pref-width> - <property>/autopilot/route-manager/cruise/speed-kts</property> - </input> - - <text> - <label>Cruise Altitude (ft/FL):</label> - <pref-width>80</pref-width> - </text> - <input> - <name>cruise-alt</name> - <live>true</live> - <halign>fill</halign> - <stretch>true</stretch> - <pref-width>150</pref-width> - <property>/autopilot/route-manager/cruise/altitude-ft</property> - </input> - </group> - - <hrule/> - - <group> - <layout>hbox</layout> - <default-padding>2</default-padding> - - <text> - <label>MMMMMMMMMMMMMMMM</label> - <format>Target: %s</format> - <property>/autopilot/route-manager/wp[0]/id</property> - <live>true</live> - </text> - - <text> - <label>MMMMMMMMM</label> - <format>Dist: %.2f nm</format> - <property>/autopilot/route-manager/wp[0]/dist</property> - <live>true</live> - </text> - - <text> - <label>MMMMMMMMM</label> - <format>ETA: %s</format> - <property>/autopilot/route-manager/wp[0]/eta</property> - <live>true</live> - </text> - </group> - - <waypointlist> - <name>list</name> - <halign>fill</halign> - <valign>fill</valign> - <stretch>true</stretch> - <pref-height>150</pref-height> - <property>/sim/gui/dialogs/route-manager/selection</property> - <binding> - <command>dialog-apply</command> - <object-name>list</object-name> - </binding> - </waypointlist> - - <group> - <layout>hbox</layout> - <default-padding>4</default-padding> - - <text> - <label>Waypoint:</label> - <pref-width>60</pref-width> - </text> - - <input> - <name>input</name> - <halign>fill</halign> - <stretch>true</stretch> - <pref-width>220</pref-width> - <property>/sim/gui/dialogs/route-manager/input</property> - </input> - - <button> - <legend>Add</legend> - <default>true</default> - <pref-width>70</pref-width> - <binding> - <command>dialog-apply</command> - </binding> - <binding> - <command>nasal</command> - <script>insert()</script> - </binding> - <binding> - <command>dialog-update</command> - </binding> - </button> - </group> - - <text> - <padding>1</padding> - <label>Format: (airport|fix|nav|lon,lat)[@alt] -- e.g. "KSFO@900"</label> - <color> - <red>0.5</red> - <green>0.5</green> - <blue>0.5</blue> - </color> - </text> - - <group> - <layout>hbox</layout> - <halign>fill</halign> - <default-padding>6</default-padding> - - <button> - <legend>Clear List</legend> - <equal>true</equal> - <binding> - <command>nasal</command> - <script>clear()</script> - </binding> - </button> - - <button> - <legend>Remove</legend> - <enable> + routem.getNode("file-path", 1).setValue(path.getValue()); + cmd.setValue("@save"); + gui.dialog_update("route-manager"); + } + + var file_selector = gui.FileSelector.new(load_route, "Load flight-plan", "Load"); + var save_selector = gui.FileSelector.new(save_route, "Save flight-plan", "Save"); + + var activate_fp = func { + cmd.setValue("@activate"); + } + + var departureRunways = dlg.getNode("departure-runways", 1); + var destRunways = dlg.getNode("destination-runways", 1); + + var updateRunways = func { + var depIcao = routem.getNode("departure").getNode("airport").getValue(); + departureRunways.removeChildren("value"); + + var apt = airportinfo(depIcao); + if (apt != nil) { + var i=0; + foreach (var rwy; keys(apt.runways)) { + departureRunways.getNode("value[" ~ i ~ "]", 1).setValue(rwy); + i += 1; + } + } + + var destIcao = routem.getNode("destination").getNode("airport").getValue(); + destRunways.removeChildren("value"); + + var apt = airportinfo(destIcao); + if (apt != nil) { + var i=0; + foreach (var rwy; keys(apt.runways)) { + destRunways.getNode("value[" ~ i ~ "]", 1).setValue(rwy); + i += 1; + } + } + + gui.dialog_update("route-manager"); + } + </open> + + <close> + file_selector.del(); + save_selector.del(); + </close> + </nasal> + + <group> + <layout>hbox</layout> + <empty><stretch>1</stretch></empty> + + <text> + <label>Route Manager</label> + </text> + + <empty><stretch>1</stretch></empty> + + <button> + <pref-width>16</pref-width> + <pref-height>16</pref-height> + <legend></legend> + <default>1</default> + <keynum>27</keynum> + <border>2</border> + + <binding> + <command>dialog-close</command> + </binding> + </button> + </group> + <hrule/> + <!-- departure / arrival airport information --> + + <group> + <layout>hbox</layout> + <text> + <label>Departure:</label> + <pref-width>80</pref-width> + </text> + <input> + <name>departure-airport</name> + <pref-width>60</pref-width> + <property>/autopilot/route-manager/departure/airport</property> + <live>true</live> + <binding> + <command>dialog-apply</command> + <object-name>departure-airport</object-name> + </binding> + + <binding> + <command>nasal</command> + <script>updateRunways();</script> + </binding> + </input> + + <text> + <format>%s</format> + <property>/autopilot/route-manager/departure/name</property> + <live>true</live> + <stretch>true</stretch> + <halign>fill</halign> + </text> + + <text> + <label>Rwy:</label> + </text> + <combo> + <name>departure-runway</name> + <pref-width>60</pref-width> + <property>/autopilot/route-manager/departure/runway</property> + <editable>false</editable> + <properties>/sim/gui/dialogs/route-manager/departure-runways</properties> + </combo> + </group> + + <group> + <layout>hbox</layout> + <text> + <label>Arrival:</label> + <pref-width>80</pref-width> + </text> + <input> + <name>destination-airport</name> + <pref-width>60</pref-width> + <property>/autopilot/route-manager/destination/airport</property> + <live>true</live> + <binding> + <command>dialog-apply</command> + <object-name>destination-airport</object-name> + </binding> + <binding> + <command>nasal</command> + <script>updateRunways();</script> + </binding> + </input> + <text> + <stretch>true</stretch> + <format>%s</format> + <property>/autopilot/route-manager/destination/name</property> + <live>true</live> + <halign>fill</halign> + </text> + + <text> + <label>Rwy:</label> + </text> + <combo> + <name>destination-runway</name> + <pref-width>60</pref-width> + <property>/autopilot/route-manager/destination/runway</property> + <editable>false</editable> + <properties>/sim/gui/dialogs/route-manager/destination-runways</properties> + </combo> + </group> + <!-- + <group> + <layout>hbox</layout> + <text> + <label>Alternate:</label> + <pref-width>80</pref-width> + </text> + <input> + <name>alt-airport</name> + <halign>fill</halign> + <stretch>true</stretch> + <pref-width>150</pref-width> + <property>/autopilot/route-manager/alternate/airport</property> + </input> + + </group> + --> + <group> + <layout>hbox</layout> + <text> + <label>Cruise Speed (kts):</label> + <pref-width>80</pref-width> + </text> + <input> + <name>cruise-speed</name> + <live>true</live> + <halign>fill</halign> + <stretch>true</stretch> + <pref-width>150</pref-width> + <property>/autopilot/route-manager/cruise/speed-kts</property> + </input> + + <text> + <label>Cruise Altitude (ft/FL):</label> + <pref-width>80</pref-width> + </text> + <input> + <name>cruise-alt</name> + <live>true</live> + <halign>fill</halign> + <stretch>true</stretch> + <pref-width>150</pref-width> + <property>/autopilot/route-manager/cruise/altitude-ft</property> + </input> + </group> + + <hrule/> + + <group> + <layout>hbox</layout> + <default-padding>2</default-padding> + + <text> + <label>MMMMMMMMMMMMMMMM</label> + <format>Target: %s</format> + <property>/autopilot/route-manager/wp[0]/id</property> + <live>true</live> + </text> + + <text> + <label>MMMMMMMMM</label> + <format>Dist: %.2f nm</format> + <property>/autopilot/route-manager/wp[0]/dist</property> + <live>true</live> + </text> + + <text> + <label>MMMMMMMMM</label> + <format>ETA: %s</format> + <property>/autopilot/route-manager/wp[0]/eta</property> + <live>true</live> + </text> + </group> + + <waypointlist> + <name>list</name> + <halign>fill</halign> + <valign>fill</valign> + <stretch>true</stretch> + <pref-height>150</pref-height> + <property>/sim/gui/dialogs/route-manager/selection</property> + <binding> + <command>dialog-apply</command> + <object-name>list</object-name> + </binding> + </waypointlist> + + <group> + <layout>hbox</layout> + <default-padding>4</default-padding> + + <text> + <label>Waypoint:</label> + <pref-width>60</pref-width> + </text> + + <input> + <name>input</name> + <halign>fill</halign> + <stretch>true</stretch> + <pref-width>220</pref-width> + <property>/sim/gui/dialogs/route-manager/input</property> + </input> + + <button> + <legend>Add</legend> + <default>true</default> + <pref-width>70</pref-width> + <binding> + <command>dialog-apply</command> + </binding> + <binding> + <command>nasal</command> + <script>insert()</script> + </binding> + <binding> + <command>dialog-update</command> + </binding> + </button> + </group> + + <text> + <padding>1</padding> + <label>Format: (airport|fix|nav|lon,lat)[@alt] -- e.g. "KSFO@900"</label> + <color> + <red>0.5</red> + <green>0.5</green> + <blue>0.5</blue> + </color> + </text> + + <group> + <layout>hbox</layout> + <halign>fill</halign> + <default-padding>6</default-padding> + + <button> + <legend>Clear List</legend> + <equal>true</equal> + <binding> + <command>nasal</command> + <script>clear()</script> + </binding> + </button> + + <button> + <legend>Remove</legend> + <enable> <greater-than> - <property>/sim/gui/dialogs/route-manager/selection</property> - <value>-1</value> - </greater-than> - </enable> - <binding> - <command>nasal</command> - <script>remove()</script> - </binding> - </button> + <property>/sim/gui/dialogs/route-manager/selection</property> + <value>-1</value> + </greater-than> + </enable> + <binding> + <command>nasal</command> + <script>remove()</script> + </binding> + </button> <!-- <button> - <legend>Auto-route</legend> - <equal>true</equal> - <binding> - <command>nasal</command> - <script>auto_route()</script> - </binding> - </button> + <legend>Auto-route</legend> + <equal>true</equal> + <binding> + <command>nasal</command> + <script>auto_route()</script> + </binding> + </button> --> <button> - <legend>Jump To</legend> - <enable> + <legend>Jump To</legend> + <enable> <greater-than> - <property>/sim/gui/dialogs/route-manager/selection</property> - <value>-1</value> - </greater-than> - </enable> - <binding> - <command>nasal</command> - <script>jump_to()</script> - </binding> - </button> - - <button> - <legend>Activate</legend> - <equal>true</equal> - <enable> - <not><property>/autopilot/route-manager/active</property></not> - </enable> - <binding> - <command>dialog-apply</command> - </binding> - <binding> - <command>nasal</command> - <script>activate_fp()</script> - </binding> - </button> - - <empty><stretch>true</stretch></empty> - - <button> - <legend>Load...</legend> - <equal>true</equal> - <enable> - <not><property>/autopilot/route-manager/active</property></not> - </enable> - <binding> - <command>nasal</command> - <script>file_selector.open()</script> - </binding> - </button> - <button> - <legend>Save...</legend> - <equal>true</equal> - <binding> - <command>nasal</command> - <script>save_selector.open();</script> - </binding> - </button> - </group> + <property>/sim/gui/dialogs/route-manager/selection</property> + <value>-1</value> + </greater-than> + </enable> + <binding> + <command>nasal</command> + <script>jump_to()</script> + </binding> + </button> + + <button> + <legend>Activate</legend> + <equal>true</equal> + <enable> + <not><property>/autopilot/route-manager/active</property></not> + </enable> + <binding> + <command>dialog-apply</command> + </binding> + <binding> + <command>nasal</command> + <script>activate_fp()</script> + </binding> + </button> + + <empty><stretch>true</stretch></empty> + + <button> + <legend>Load...</legend> + <equal>true</equal> + <enable> + <not><property>/autopilot/route-manager/active</property></not> + </enable> + <binding> + <command>nasal</command> + <script>file_selector.open()</script> + </binding> + </button> + <button> + <legend>Save...</legend> + <equal>true</equal> + <binding> + <command>nasal</command> + <script>save_selector.open();</script> + </binding> + </button> + </group> </PropertyList> |
From: James T. <jm...@ba...> - 2010-04-26 17:03:02
|
Update of /var/cvs/FlightGear-0.9/source/src/Instrumentation In directory baron.flightgear.org:/tmp/cvs-serv25731/src/Instrumentation Modified Files: navradio.cxx Log Message: Fix a crash if startup fails before the navradio is inited. Index: navradio.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Instrumentation/navradio.cxx,v retrieving revision 1.66 retrieving revision 1.67 diff -u -r1.66 -r1.67 --- navradio.cxx 27 Mar 2010 17:00:26 -0000 1.66 +++ navradio.cxx 26 Apr 2010 16:04:41 -0000 1.67 @@ -129,9 +129,14 @@ // Destructor FGNavRadio::~FGNavRadio() { - gps_course_node->removeChangeListener(this); - nav_slaved_to_gps_node->removeChangeListener(this); - + if (gps_course_node) { + gps_course_node->removeChangeListener(this); + } + + if (nav_slaved_to_gps_node) { + nav_slaved_to_gps_node->removeChangeListener(this); + } + delete term_tbl; delete low_tbl; delete high_tbl; |
From: Vivian M. <vmm...@ba...> - 2010-04-25 21:05:42
|
Update of /var/cvs/FlightGear-0.9/data/Nasal In directory baron.flightgear.org:/tmp/cvs-serv31194 Modified Files: controls.nas Log Message: Bugfix Index: controls.nas =================================================================== RCS file: /var/cvs/FlightGear-0.9/data/Nasal/controls.nas,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- controls.nas 14 Mar 2009 20:56:07 -0000 1.37 +++ controls.nas 25 Apr 2010 21:05:30 -0000 1.38 @@ -324,9 +324,9 @@ ## # Joystick axis handlers. Don't call from other contexts. # -var elevatorTrimAxis = func { elevatorTrim(cmdarg().getNode("value").getValue()); } -var aileronTrimAxis = func { aileronTrim(cmdarg().getNode("value").getValue()); } -var rudderTrimAxis = func { rudderTrim(cmdarg().getNode("value").getValue()); } +var elevatorTrimAxis = func { elevatorTrim(cmdarg().getNode("setting").getValue()); } +var aileronTrimAxis = func { aileronTrim(cmdarg().getNode("setting").getValue()); } +var rudderTrimAxis = func { rudderTrim(cmdarg().getNode("setting").getValue()); } ## # Gear handling. |
From: Frederic B. <fr...@ba...> - 2010-04-25 16:11:41
|
Update of /var/cvs/FlightGear-0.9/source/src/ATC In directory baron.flightgear.org:/tmp/cvs-serv15966/src/ATC Modified Files: trafficcontrol.hxx Log Message: setState doesn't return a value Index: trafficcontrol.hxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/ATC/trafficcontrol.hxx,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- trafficcontrol.hxx 25 Apr 2010 08:33:26 -0000 1.9 +++ trafficcontrol.hxx 25 Apr 2010 16:11:30 -0000 1.10 @@ -129,7 +129,7 @@ void setLeg(int lg) { leg = lg;}; int getId() { return id;}; int getState() { return state;}; - int setState(int s) { state = s;} + void setState(int s) { state = s;} FGATCInstruction getInstruction() { return instruction;}; bool hasInstruction() { return instruction.hasInstruction(); }; void setPositionAndHeading(double lat, double lon, double hdg, double spd, double alt); |
From: Durk T. <du...@ba...> - 2010-04-25 08:34:47
|
Update of /var/cvs/FlightGear-0.9/source/src/Airports In directory baron.flightgear.org:/tmp/cvs-serv18630/src/Airports Modified Files: apt_loader.cxx dynamics.cxx groundnetwork.cxx groundnetwork.hxx Log Message: Expanded ATC communication between AI aircraft and Airport ground control. Index: apt_loader.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Airports/apt_loader.cxx,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- apt_loader.cxx 5 Jan 2010 20:04:55 -0000 1.30 +++ apt_loader.cxx 25 Apr 2010 08:33:27 -0000 1.31 @@ -237,7 +237,6 @@ SGGeod pos(SGGeod::fromDegFt(lon, lat, last_apt_elev)); FGAirport* apt = new FGAirport(last_apt_id, pos, tower, last_apt_name, false, fptypeFromRobinType(atoi(last_apt_type.c_str()))); - apt->setRunwaysAndTaxiways(runways, taxiways, pavements); } Index: dynamics.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Airports/dynamics.cxx,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- dynamics.cxx 21 Aug 2009 14:42:51 -0000 1.28 +++ dynamics.cxx 25 Apr 2010 08:33:29 -0000 1.29 @@ -50,31 +50,34 @@ #include "simple.hxx" #include "dynamics.hxx" -FGAirportDynamics::FGAirportDynamics(FGAirport* ap) : - _ap(ap), rwyPrefs(ap), SIDs(ap) { - lastUpdate = 0; +FGAirportDynamics::FGAirportDynamics(FGAirport * ap): +_ap(ap), rwyPrefs(ap), SIDs(ap) +{ + lastUpdate = 0; - // For testing only. This needs to be refined when we move ATIS functionality over. - atisInformation = "Sierra"; + // For testing only. This needs to be refined when we move ATIS functionality over. + atisInformation = "Sierra"; } // Note that the ground network should also be copied -FGAirportDynamics::FGAirportDynamics(const FGAirportDynamics& other) : - rwyPrefs(other.rwyPrefs), - SIDs(other.SIDs) -{ - for (FGParkingVecConstIterator ip= other.parkings.begin(); ip != other.parkings.end(); ip++) - parkings.push_back(*(ip)); - // rwyPrefs = other.rwyPrefs; - lastUpdate = other.lastUpdate; - - stringVecConstIterator il; - for (il = other.landing.begin(); il != other.landing.end(); il++) - landing.push_back(*il); - for (il = other.takeoff.begin(); il != other.takeoff.end(); il++) - takeoff.push_back(*il); - lastUpdate = other.lastUpdate; - atisInformation = other.atisInformation; +FGAirportDynamics:: +FGAirportDynamics(const FGAirportDynamics & other):rwyPrefs(other. + rwyPrefs), +SIDs(other.SIDs) +{ + for (FGParkingVecConstIterator ip = other.parkings.begin(); + ip != other.parkings.end(); ip++) + parkings.push_back(*(ip)); + // rwyPrefs = other.rwyPrefs; + lastUpdate = other.lastUpdate; + + stringVecConstIterator il; + for (il = other.landing.begin(); il != other.landing.end(); il++) + landing.push_back(*il); + for (il = other.takeoff.begin(); il != other.takeoff.end(); il++) + takeoff.push_back(*il); + lastUpdate = other.lastUpdate; + atisInformation = other.atisInformation; } // Destructor @@ -84,449 +87,404 @@ // Initialization required after XMLRead -void FGAirportDynamics::init() +void FGAirportDynamics::init() { - // This may seem a bit weird to first randomly shuffle the parkings - // and then sort them again. However, parkings are sorted here by ascending - // radius. Since many parkings have similar radii, with each radius class they will - // still be allocated relatively systematically. Randomizing prior to sorting will - // prevent any initial orderings to be destroyed, leading (hopefully) to a more - // naturalistic gate assignment. - random_shuffle(parkings.begin(), parkings.end()); - sort(parkings.begin(), parkings.end()); - // add the gate positions to the ground network. - groundNetwork.addNodes(&parkings); - groundNetwork.init(); - groundNetwork.setTowerController(&towerController); - groundNetwork.setParent(_ap); -} - -bool FGAirportDynamics::getAvailableParking(double *lat, double *lon, double *heading, int *gateId, double rad, const string &flType, const string &acType, const string &airline) -{ - bool found = false; - bool available = false; - //string gateType; - - FGParkingVecIterator i; -// if (flType == "cargo") -// { -// gateType = "RAMP_CARGO"; -// } -// else if (flType == "ga") -// { -// gateType = "RAMP_GA"; -// } -// else gateType = "GATE"; - - if (parkings.begin() == parkings.end()) - { - //cerr << "Could not find parking spot at " << _ap->getId() << endl; - *lat = _ap->getLatitude(); - *lon = _ap->getLongitude(); - *heading = 0; - found = true; - } - else - { - // First try finding a parking with a designated airline code - for (i = parkings.begin(); !(i == parkings.end() || found); i++) - { - //cerr << "Gate Id: " << i->getIndex() - // << " Type : " << i->getType() - // << " Codes : " << i->getCodes() - // << " Radius: " << i->getRadius() - // << " Name : " << i->getName() - // << " Available: " << i->isAvailable() << endl; - available = true; - // Taken by another aircraft - if (!(i->isAvailable())) - { - available = false; - continue; - } - // No airline codes, so skip - if (i->getCodes().empty()) - { - available = false; - continue; - } - else // Airline code doesn't match - { - //cerr << "Code = " << airline << ": Codes " << i->getCodes(); - if (i->getCodes().find(airline, 0) == string::npos) - { - available = false; - //cerr << "Unavailable" << endl; - continue; - } - else - { - //cerr << "Available" << endl; - } - } - // Type doesn't match - if (i->getType() != flType) - { - available = false; - continue; - } - // too small - if (i->getRadius() < rad) - { - available = false; - continue; - } - - if (available) - { - *lat = i->getLatitude (); - *lon = i->getLongitude(); - *heading = i->getHeading (); - *gateId = i->getIndex (); - i->setAvailable(false); - found = true; - } - } - // then try again for those without codes. - for (i = parkings.begin(); !(i == parkings.end() || found); i++) - { - available = true; - if (!(i->isAvailable())) - { - available = false; - continue; - } - if (!(i->getCodes().empty())) - { - if ((i->getCodes().find(airline,0) == string::npos)) - { - available = false; - continue; - } - } - if (i->getType() != flType) - { - available = false; - continue; - } - - if (i->getRadius() < rad) - { - available = false; - continue; - } - - if (available) - { - *lat = i->getLatitude (); - *lon = i->getLongitude(); - *heading = i->getHeading (); - *gateId = i->getIndex (); - i->setAvailable(false); - found = true; - } - } - // And finally once more if that didn't work. Now ignore the airline codes, as a last resort - for (i = parkings.begin(); !(i == parkings.end() || found); i++) - { - available = true; - if (!(i->isAvailable())) - { - available = false; - continue; - } - if (i->getType() != flType) - { - available = false; - continue; - } - - if (i->getRadius() < rad) - { - available = false; - continue; - } - - if (available) - { - *lat = i->getLatitude (); - *lon = i->getLongitude(); - *heading = i->getHeading (); - *gateId = i->getIndex (); - i->setAvailable(false); - found = true; - } - } + // This may seem a bit weird to first randomly shuffle the parkings + // and then sort them again. However, parkings are sorted here by ascending + // radius. Since many parkings have similar radii, with each radius class they will + // still be allocated relatively systematically. Randomizing prior to sorting will + // prevent any initial orderings to be destroyed, leading (hopefully) to a more + // naturalistic gate assignment. + random_shuffle(parkings.begin(), parkings.end()); + sort(parkings.begin(), parkings.end()); + // add the gate positions to the ground network. + groundNetwork.addNodes(&parkings); + groundNetwork.init(); + groundNetwork.setTowerController(&towerController); + groundNetwork.setParent(_ap); +} + +bool FGAirportDynamics::getAvailableParking(double *lat, double *lon, + double *heading, int *gateId, + double rad, + const string & flType, + const string & acType, + const string & airline) +{ + bool found = false; + bool available = false; + + + FGParkingVecIterator i; + if (parkings.begin() == parkings.end()) { + //cerr << "Could not find parking spot at " << _ap->getId() << endl; + *lat = _ap->getLatitude(); + *lon = _ap->getLongitude(); + *heading = 0; + found = true; + } else { + // First try finding a parking with a designated airline code + for (i = parkings.begin(); !(i == parkings.end() || found); i++) { + available = true; + // Taken by another aircraft + if (!(i->isAvailable())) { + available = false; + continue; + } + // No airline codes, so skip + if (i->getCodes().empty()) { + available = false; + continue; + } else { // Airline code doesn't match + //cerr << "Code = " << airline << ": Codes " << i->getCodes(); + if (i->getCodes().find(airline, 0) == string::npos) { + available = false; + //cerr << "Unavailable" << endl; + continue; + } else { + //cerr << "Available" << endl; + } + } + // Type doesn't match + if (i->getType() != flType) { + available = false; + continue; + } + // too small + if (i->getRadius() < rad) { + available = false; + continue; + } + + if (available) { + *lat = i->getLatitude(); + *lon = i->getLongitude(); + *heading = i->getHeading(); + *gateId = i->getIndex(); + i->setAvailable(false); + found = true; + } + } + // then try again for those without codes. + for (i = parkings.begin(); !(i == parkings.end() || found); i++) { + available = true; + if (!(i->isAvailable())) { + available = false; + continue; + } + if (!(i->getCodes().empty())) { + if ((i->getCodes().find(airline, 0) == string::npos)) { + available = false; + continue; + } + } + if (i->getType() != flType) { + available = false; + continue; + } + + if (i->getRadius() < rad) { + available = false; + continue; + } + + if (available) { + *lat = i->getLatitude(); + *lon = i->getLongitude(); + *heading = i->getHeading(); + *gateId = i->getIndex(); + i->setAvailable(false); + found = true; + } + } + // And finally once more if that didn't work. Now ignore the airline codes, as a last resort + for (i = parkings.begin(); !(i == parkings.end() || found); i++) { + available = true; + if (!(i->isAvailable())) { + available = false; + continue; + } + if (i->getType() != flType) { + available = false; + continue; + } + + if (i->getRadius() < rad) { + available = false; + continue; + } + + if (available) { + *lat = i->getLatitude(); + *lon = i->getLongitude(); + *heading = i->getHeading(); + *gateId = i->getIndex(); + i->setAvailable(false); + found = true; + } + } } - if (!found) - { - //cerr << "Traffic overflow at" << _ap->getId() - // << ". flType = " << flType - // << ". airline = " << airline - // << " Radius = " <<rad - // << endl; - *lat = _ap->getLatitude(); - *lon = _ap->getLongitude(); - *heading = 0; - *gateId = -1; - //exit(1); + if (!found) { + //cerr << "Traffic overflow at" << _ap->getId() + // << ". flType = " << flType + // << ". airline = " << airline + // << " Radius = " <<rad + // << endl; + *lat = _ap->getLatitude(); + *lon = _ap->getLongitude(); + *heading = 0; + *gateId = -1; + //exit(1); } - return found; + return found; } -void FGAirportDynamics::getParking (int id, double *lat, double* lon, double *heading) +void FGAirportDynamics::getParking(int id, double *lat, double *lon, + double *heading) { - if (id < 0) - { - *lat = _ap->getLatitude(); - *lon = _ap->getLongitude(); - *heading = 0; - } - else - { - FGParkingVecIterator i = parkings.begin(); - for (i = parkings.begin(); i != parkings.end(); i++) - { - if (id == i->getIndex()) - { - *lat = i->getLatitude(); - *lon = i->getLongitude(); - *heading = i->getHeading(); - } - } + if (id < 0) { + *lat = _ap->getLatitude(); + *lon = _ap->getLongitude(); + *heading = 0; + } else { + FGParkingVecIterator i = parkings.begin(); + for (i = parkings.begin(); i != parkings.end(); i++) { + if (id == i->getIndex()) { + *lat = i->getLatitude(); + *lon = i->getLongitude(); + *heading = i->getHeading(); + } + } } -} +} -FGParking *FGAirportDynamics::getParking(int id) -{ +FGParking *FGAirportDynamics::getParking(int id) +{ FGParkingVecIterator i = parkings.begin(); - for (i = parkings.begin(); i != parkings.end(); i++) - { - if (id == i->getIndex()) { - return &(*i); - } + for (i = parkings.begin(); i != parkings.end(); i++) { + if (id == i->getIndex()) { + return &(*i); } + } return 0; } -string FGAirportDynamics::getParkingName(int id) -{ + +string FGAirportDynamics::getParkingName(int id) +{ FGParkingVecIterator i = parkings.begin(); - for (i = parkings.begin(); i != parkings.end(); i++) - { - if (id == i->getIndex()) { - return i->getName(); - } + for (i = parkings.begin(); i != parkings.end(); i++) { + if (id == i->getIndex()) { + return i->getName(); } + } return string("overflow"); } + void FGAirportDynamics::releaseParking(int id) { - if (id >= 0) - { - - FGParkingVecIterator i = parkings.begin(); - for (i = parkings.begin(); i != parkings.end(); i++) - { - if (id == i->getIndex()) - { - i -> setAvailable(true); - } - } - } -} - -void FGAirportDynamics::setRwyUse(const FGRunwayPreference& ref) -{ - rwyPrefs = ref; - //cerr << "Exiting due to not implemented yet" << endl; - //exit(1); -} - -bool FGAirportDynamics::innerGetActiveRunway(const string &trafficType, int action, string &runway, double heading) -{ -double windSpeed; - double windHeading; - double maxTail; - double maxCross; - string name; - string type; - - if (!rwyPrefs.available()) { - return false; - } - - RunwayGroup *currRunwayGroup = 0; - int nrActiveRunways = 0; - time_t dayStart = fgGetLong("/sim/time/utc/day-seconds"); - if ((abs((long)(dayStart - lastUpdate)) > 600) || trafficType != prevTrafficType) - { - landing.clear(); - takeoff.clear(); - lastUpdate = dayStart; - prevTrafficType = trafficType; - - FGEnvironment - stationweather = ((FGEnvironmentMgr *) globals->get_subsystem("environment")) - ->getEnvironment(getLatitude(), - getLongitude(), - getElevation()); - - windSpeed = stationweather.get_wind_speed_kt(); - windHeading = stationweather.get_wind_from_heading_deg(); - string scheduleName; - //cerr << "finding active Runway for" << _ap->getId() << endl; - //cerr << "Nr of seconds since day start << " << dayStart << endl; - - ScheduleTime *currSched; - //cerr << "A"<< endl; - currSched = rwyPrefs.getSchedule(trafficType.c_str()); - if (!(currSched)) - return false; - //cerr << "B"<< endl; - scheduleName = currSched->getName(dayStart); - maxTail = currSched->getTailWind (); - maxCross = currSched->getCrossWind (); - //cerr << "SChedule anme = " << scheduleName << endl; - if (scheduleName.empty()) - return false; - //cerr << "C"<< endl; - currRunwayGroup = rwyPrefs.getGroup(scheduleName); - //cerr << "D"<< endl; - if (!(currRunwayGroup)) - return false; - nrActiveRunways = currRunwayGroup->getNrActiveRunways(); + if (id >= 0) { + + FGParkingVecIterator i = parkings.begin(); + for (i = parkings.begin(); i != parkings.end(); i++) { + if (id == i->getIndex()) { + i->setAvailable(true); + } + } + } +} + +void FGAirportDynamics::setRwyUse(const FGRunwayPreference & ref) +{ + rwyPrefs = ref; + //cerr << "Exiting due to not implemented yet" << endl; + //exit(1); +} + +bool FGAirportDynamics::innerGetActiveRunway(const string & trafficType, + int action, string & runway, + double heading) +{ + double windSpeed; + double windHeading; + double maxTail; + double maxCross; + string name; + string type; + + if (!rwyPrefs.available()) { + return false; + } + + RunwayGroup *currRunwayGroup = 0; + int nrActiveRunways = 0; + time_t dayStart = fgGetLong("/sim/time/utc/day-seconds"); + if ((abs((long) (dayStart - lastUpdate)) > 600) + || trafficType != prevTrafficType) { + landing.clear(); + takeoff.clear(); + lastUpdate = dayStart; + prevTrafficType = trafficType; + + FGEnvironment + stationweather = + ((FGEnvironmentMgr *) globals->get_subsystem("environment")) + ->getEnvironment(getLatitude(), getLongitude(), + getElevation()); + + windSpeed = stationweather.get_wind_speed_kt(); + windHeading = stationweather.get_wind_from_heading_deg(); + string scheduleName; + //cerr << "finding active Runway for" << _ap->getId() << endl; + //cerr << "Nr of seconds since day start << " << dayStart << endl; + + ScheduleTime *currSched; + //cerr << "A"<< endl; + currSched = rwyPrefs.getSchedule(trafficType.c_str()); + if (!(currSched)) + return false; + //cerr << "B"<< endl; + scheduleName = currSched->getName(dayStart); + maxTail = currSched->getTailWind(); + maxCross = currSched->getCrossWind(); + //cerr << "SChedule anme = " << scheduleName << endl; + if (scheduleName.empty()) + return false; + //cerr << "C"<< endl; + currRunwayGroup = rwyPrefs.getGroup(scheduleName); + //cerr << "D"<< endl; + if (!(currRunwayGroup)) + return false; + nrActiveRunways = currRunwayGroup->getNrActiveRunways(); // Keep a history of the currently active runways, to ensure // that an already established selection of runways will not // be overridden once a more preferred selection becomes // available as that can lead to random runway swapping. - if (trafficType == "com") { - currentlyActive = &comActive; + if (trafficType == "com") { + currentlyActive = &comActive; } else if (trafficType == "gen") { - currentlyActive = &genActive; + currentlyActive = &genActive; } else if (trafficType == "mil") { - currentlyActive = &milActive; + currentlyActive = &milActive; } else if (trafficType == "ul") { - currentlyActive = &ulActive; + currentlyActive = &ulActive; + } + + currRunwayGroup->setActive(_ap, + windSpeed, + windHeading, + maxTail, maxCross, currentlyActive); + + // Note that I SHOULD keep multiple lists in memory, one for + // general aviation, one for commercial and one for military + // traffic. + currentlyActive->clear(); + nrActiveRunways = currRunwayGroup->getNrActiveRunways(); + //cerr << "Choosing runway for " << trafficType << endl; + for (int i = 0; i < nrActiveRunways; i++) { + type = "unknown"; // initialize to something other than landing or takeoff + currRunwayGroup->getActive(i, name, type); + if (type == "landing") { + landing.push_back(name); + currentlyActive->push_back(name); + //cerr << "Landing " << name << endl; + } + if (type == "takeoff") { + takeoff.push_back(name); + currentlyActive->push_back(name); + //cerr << "takeoff " << name << endl; + } + } + //cerr << endl; + } + + if (action == 1) // takeoff + { + int nr = takeoff.size(); + if (nr) { + // Note that the randomization below, is just a placeholder to choose between + // multiple active runways for this action. This should be + // under ATC control. + runway = chooseRwyByHeading(takeoff, heading); + } else { // Fallback + runway = chooseRunwayFallback(); + } + } + + if (action == 2) // landing + { + int nr = landing.size(); + if (nr) { + runway = chooseRwyByHeading(landing, heading); + } else { //fallback + runway = chooseRunwayFallback(); } - // - currRunwayGroup->setActive(_ap, - windSpeed, - windHeading, - maxTail, - maxCross, - currentlyActive); - - // Note that I SHOULD keep multiple lists in memory, one for - // general aviation, one for commercial and one for military - // traffic. - currentlyActive->clear(); - nrActiveRunways = currRunwayGroup->getNrActiveRunways(); - //cerr << "Choosing runway for " << trafficType << endl; - for (int i = 0; i < nrActiveRunways; i++) - { - type = "unknown"; // initialize to something other than landing or takeoff - currRunwayGroup->getActive(i, name, type); - if (type == "landing") - { - landing.push_back(name); - currentlyActive->push_back(name); - //cerr << "Landing " << name << endl; - } - if (type == "takeoff") - { - takeoff.push_back(name); - currentlyActive->push_back(name); - //cerr << "takeoff " << name << endl; - } - } - //cerr << endl; - } - - if (action == 1) // takeoff - { - int nr = takeoff.size(); - if (nr) - { - // Note that the randomization below, is just a placeholder to choose between - // multiple active runways for this action. This should be - // under ATC control. - runway = chooseRwyByHeading (takeoff, heading); - } - else - { // Fallback - runway = chooseRunwayFallback(); - } - } - - if (action == 2) // landing - { - int nr = landing.size(); - if (nr) - { - runway = chooseRwyByHeading (landing, heading); - } - else - { //fallback - runway = chooseRunwayFallback(); - } - } - - return true; -} - -string FGAirportDynamics::chooseRwyByHeading(stringVec rwys, double heading) { - double bestError = 360.0; - double rwyHeading, headingError; - string runway; - for (stringVecIterator i = rwys.begin(); i != rwys.end(); i++) { - FGRunway *rwy = _ap->getRunwayByIdent((*i)); - rwyHeading = rwy->headingDeg(); - headingError = fabs(heading - rwyHeading); + } + + return true; +} + +string FGAirportDynamics::chooseRwyByHeading(stringVec rwys, + double heading) +{ + double bestError = 360.0; + double rwyHeading, headingError; + string runway; + for (stringVecIterator i = rwys.begin(); i != rwys.end(); i++) { + FGRunway *rwy = _ap->getRunwayByIdent((*i)); + rwyHeading = rwy->headingDeg(); + headingError = fabs(heading - rwyHeading); if (headingError > 180) headingError = fabs(headingError - 360); if (headingError < bestError) { runway = (*i); bestError = headingError; } - } - //cerr << "Using active runway " << runway << " for heading " << heading << endl; - return runway; + } + //cerr << "Using active runway " << runway << " for heading " << heading << endl; + return runway; } -void FGAirportDynamics::getActiveRunway(const string &trafficType, int action, string &runway, double heading) +void FGAirportDynamics::getActiveRunway(const string & trafficType, + int action, string & runway, + double heading) { - bool ok = innerGetActiveRunway(trafficType, action, runway, heading); - if (!ok) { - runway = chooseRunwayFallback(); - } + bool ok = innerGetActiveRunway(trafficType, action, runway, heading); + if (!ok) { + runway = chooseRunwayFallback(); + } } string FGAirportDynamics::chooseRunwayFallback() -{ - FGRunway* rwy = _ap->getActiveRunwayForUsage(); - return rwy->ident(); +{ + FGRunway *rwy = _ap->getActiveRunwayForUsage(); + return rwy->ident(); } -void FGAirportDynamics::addParking(FGParking& park) { - parkings.push_back(park); +void FGAirportDynamics::addParking(FGParking & park) +{ + parkings.push_back(park); } -double FGAirportDynamics::getLatitude() const { - return _ap->getLatitude(); +double FGAirportDynamics::getLatitude() const +{ + return _ap->getLatitude(); } -double FGAirportDynamics::getLongitude() const { - return _ap->getLongitude(); +double FGAirportDynamics::getLongitude() const +{ + return _ap->getLongitude(); } -double FGAirportDynamics::getElevation() const { - return _ap->getElevation(); +double FGAirportDynamics::getElevation() const +{ + return _ap->getElevation(); } -const string& FGAirportDynamics::getId() const { - return _ap->getId(); +const string & FGAirportDynamics::getId() const +{ + return _ap->getId(); } // Experimental: Return a different ground frequency depending on the leg of the @@ -536,28 +494,34 @@ // so that at least I can start working on assigning different frequencies to different // operations. -int FGAirportDynamics::getGroundFrequency(unsigned leg) { - //return freqGround.size() ? freqGround[0] : 0; }; - int groundFreq = 0; - if (leg < 2) { - SG_LOG(SG_ATC, SG_ALERT, "Leg value is smaller than two at " << SG_ORIGIN); - } - if (freqGround.size() == 0) { - return 0; - } - if ((freqGround.size() > leg-1) && (leg > 1)) { - groundFreq = freqGround[leg-1]; - } - if ((freqGround.size() < leg-1) && (leg > 1)) { - groundFreq = (freqGround.size() < (leg-1)) ? freqGround[freqGround.size()-1] : freqGround[leg-2]; - } - if ((freqGround.size() >= leg-1) && (leg > 1)) { - groundFreq = freqGround[leg-2]; - } +int FGAirportDynamics::getGroundFrequency(unsigned leg) +{ + //return freqGround.size() ? freqGround[0] : 0; }; + int groundFreq = 0; + if (leg < 2) { + SG_LOG(SG_ATC, SG_ALERT, + "Leg value is smaller than two at " << SG_ORIGIN); + } + if (freqGround.size() == 0) { + return 0; + } + if ((freqGround.size() > leg - 1) && (leg > 1)) { + groundFreq = freqGround[leg - 1]; + } + if ((freqGround.size() < leg - 1) && (leg > 1)) { + groundFreq = + (freqGround.size() < + (leg - 1)) ? freqGround[freqGround.size() - + 1] : freqGround[leg - 2]; + } + if ((freqGround.size() >= leg - 1) && (leg > 1)) { + groundFreq = freqGround[leg - 2]; + } return groundFreq; } -FGAIFlightPlan *FGAirportDynamics::getSID(string activeRunway, double heading) +FGAIFlightPlan *FGAirportDynamics::getSID(string activeRunway, + double heading) { - return SIDs.getBest(activeRunway, heading); + return SIDs.getBest(activeRunway, heading); } Index: groundnetwork.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Airports/groundnetwork.cxx,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- groundnetwork.cxx 30 Jan 2010 15:40:33 -0000 1.31 +++ groundnetwork.cxx 25 Apr 2010 08:33:30 -0000 1.32 @@ -32,6 +32,7 @@ #include <Airports/dynamics.hxx> +#include <AIModel/AIAircraft.hxx> #include <AIModel/AIFlightPlan.hxx> #include "groundnetwork.hxx" @@ -40,37 +41,35 @@ * FGTaxiSegment **************************************************************************/ [...1637 lines suppressed...] + // This might be faster using a map instead of a vector, but let's start by taking a safe route + if (activeTraffic.size()) { + //while ((i->getId() != id) && i != activeTraffic.end()) { + while (i != activeTraffic.end()) { + if (i->getId() == id) { + break; + } + i++; + } + } + if (i == activeTraffic.end() || (activeTraffic.size() == 0)) { + SG_LOG(SG_GENERAL, SG_ALERT, + "AI error: requesting ATC instruction for aircraft without traffic record"); + } else { + return i->getInstruction(); + } + return FGATCInstruction(); } - - Index: groundnetwork.hxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Airports/groundnetwork.hxx,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- groundnetwork.hxx 2 Jan 2010 20:00:06 -0000 1.22 +++ groundnetwork.hxx 25 Apr 2010 08:33:31 -0000 1.23 @@ -252,10 +252,10 @@ void init(); bool exists() { return hasNetwork; }; void setTowerController(FGTowerController *twrCtrlr) { towerController = twrCtrlr; }; - + int findNearestNode(double lat, double lon); int findNearestNode(const SGGeod& aGeod); - + FGTaxiNode *findNode(unsigned idx); FGTaxiSegment *findSegment(unsigned idx); FGTaxiRoute findShortestRoute(int start, int end, bool fullSearch=true); |
From: Durk T. <du...@ba...> - 2010-04-25 08:34:21
|
Update of /var/cvs/FlightGear-0.9/source/src/Traffic In directory baron.flightgear.org:/tmp/cvs-serv18630/src/Traffic Modified Files: Schedule.cxx Log Message: Expanded ATC communication between AI aircraft and Airport ground control. Index: Schedule.cxx =================================================================== RCS file: /var/cvs/FlightGear-0.9/source/src/Traffic/Schedule.cxx,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- Schedule.cxx 19 Feb 2010 00:31:39 -0000 1.42 +++ Schedule.cxx 25 Apr 2010 08:33:34 -0000 1.43 @@ -201,15 +201,17 @@ if (firstRun) { if (fgGetBool("/sim/traffic-manager/instantaneous-action") == true) { - deptime = now + rand() % 300; // Wait up to 5 minutes until traffic starts moving to prevent too many aircraft + deptime = now; // + rand() % 300; // Wait up to 5 minutes until traffic starts moving to prevent too many aircraft // from cluttering the gate areas. } firstRun = false; } FGScheduledFlight* flight = flights.front(); - if (!deptime) + if (!deptime) { deptime = flight->getDepartureTime(); + //cerr << "Settiing departure time " << deptime << endl; + } if (AIManagerRef) { // Check if this aircraft has been released. |