1
0
Fork 0
Commit graph

61 commits

Author SHA1 Message Date
Richard Harrison
522d7e8450 Finish 2021-carriers-and-ai-part-1-towers
Carrier improvements

- Calculate lineup deviation (degrees left/right)
- Position for touchdown added (for more accurate lineup and glideslope deviation checks)
- LSO position and Tower position added (for views)
- Better logic for controlling the FLOLS
- Added ability to start on a specific course (works better
  with the launcher if the carrier starts on a recovery course
  when positioning in air for recovery (approach)
- Support for normal, tower, LSO views (via controls/view-index)
- Aircraft can define offset for FLOLS in sim/model/reference-offset-{xyz}

Added the ability to find the nearest carrier to use as a tower

Rework of the tower position so that it updates frequently to support moving towers.

TODO: Need to review how to better implement/integrate 'sub-views' i.e. ai/models/carrier[]/controls/view-index which is actually a sub index for the tower view.
2021-04-16 22:02:11 +02:00
James Turner
9b25e25935 Remove an unnecessary SG_ALERT 2021-01-07 09:57:47 +00:00
Julian Smith
f62e5b9ce3 CompositeViewer: Support for multiple view windows using osgViewer::CompositeViewer.
Overview:

    Previously Flightgear always used a single osgViewer::Viewer(), which
    inherits from both osgViewer::ViewerBase and osgViewer::View, giving a
    single view window.

    If CompositeViewer is enabled, we instead use a osgViewer::CompositeViewer
    which contains a list of osgViewer::View's. Each of these View's can have
    its own eye position, so we can have multiple different views of the same
    scene.

    Enable at runtime with: --composite-viewer=1

Changes to allow use of osgViewer::CompositeViewer:

    Previously FGRenderer had this method:

        osgViewer::Viewer* getViewer();

    This has been replaced by these two new methods:

        osgViewer::ViewerBase* getViewerBase();
        osgViewer::View* getView();

    If CompositeViewer is not enabled (the default), the actual runtime state
    is unchanged, and getViewerBase() and getView() both return a pointer to
    the singleton osgViewer::Viewer() object.

    If CompositeViewer is enabled, getViewerBase() returns a pointer to a
    singleton osgViewer::CompositeViewer object, and getView() returns a
    pointer to the first osgViewer::View in the osgViewer::CompositeViewer's
    list.

    The other significant change to FGRenderer() is the new method:

        osg::FrameStamp* getFrameStamp()

    If CompositeViewer is not enabled, this simply returns
    getView()->getFrameStamp(). If CompositeViewer is enabled it returns
    getViewerBase()->getFrameStamp(). It is important that code that previously
    called getView()->getFrameStamp() is changed to use the new method, because
    when CompositeViewer is enabled individual osgViewer::View's appear to
    return an osg::FrameStamp with zero frame number).

    All code that uses FGRenderer has been patched up to use the new methods so
    that things work as before regardless of whether CompositeViewer is enabled
    or not.

    We make FGRenderer::update() call SviewUpdate() which updates any extra
    views.

Extra view windows:

    If CompositeViewer is enabled, one can create top-level extra view windows
    by calling SviewCreate(). See src/Viewer/sview.hxx for details.

    Each extra view window has its own simgear::compositor::Compositor
    instance.

    Currently SviewCreate() can create extra view windows that clone the
    current view, or view from one point to another (e.g. from one multiplayer
    aircraft to the user's aircradt) or keep two aircraft in view, one at a
    fixed distance in the foreground.

    SviewCreate() can be called from nasal via new nasal commands "view-clone",
    "view-last-pair", "view-last-pair-double" and "view-push". Associated
    changes to fgdata gives access to these via the View menu. The "view-push"
    command tags the current view for later use by "view-last-pair" and
    "view-last-pair-double".

    Extra view windows created by SviewCreate() use a new view system called
    Sview, which allows views to be constructed at runtime instead of being
    hard-coded in *-set.xml files. This is work in progress and views aren't
    all fully implemented. For example Pilot view gets things slightly wrong
    with large roll values, Tower View AGL is not implemented, and we don't
    implement damping. See top of src/Viewer/sview.cxx for an overview.

OpenSceneGraph-3.4 issues:

    OSG-3.4's event handling seems to be incorrect with CompositeViewer -
    events get sent for the wrong window which causes issues with resize and
    closing. It doesn't seem to be possible to work around this, so closing
    extra view windows can end up closing the main window for example.

    OSG-3.6 seems to fix the problems.

    We warn if CompositeViewer is enabled and OpenSceneGraph is 3.4.
2020-11-21 13:27:02 +00:00
Julian Smith
bf7d8bbbb3 src/Main/positioninit.cxx: don't open popup if unable to position on taxiway.
Have downgraded from SG_POPUP to SG_ALERT.
2020-11-02 10:53:38 +00:00
Julian Smith
d34f7dc451 src/Main/positioninit.cxx: open popup if we can't find taxiway to avoid starting on runway. 2020-11-01 09:29:20 +00:00
Automatic Release Builder
6e947f59eb Change MP on-runway-start message to MANDATORY_INFO 2020-10-29 14:47:48 +00:00
James Turner
423c754009 Reposition: tolerate more scenarios in ATC_mgr
When starting at an airport, but not at parking or a runway, create
an empty AIFlightPlan, and ensure the AIManager code doesn’t choke on
empty FPs.

Add a unit-test which simulates the C172 tutorial reposition logic,
which is a little gnarly.
2020-10-27 18:32:18 +00:00
James Turner
63fe5237c6 Improve interaction of —parkpos and repositioning
Re-work how position-init and ATC-manager work together to do
parking assignment and fallback (when the parking is unavailable).
Improve the logic for the reposition case, and teach ATC-manager about
reposition explicitly.

When the parking is unavailable, explicitly fall back to best-runway
selection in finalizePosition.

Add many additional position-init tests, to cover all of this.
2020-05-19 18:00:34 +01:00
Stuart Buchanan
682293c0d0 Fix for C++11 using simgear::strutils::lowercase 2020-04-18 22:00:04 +01:00
Stuart Buchanan
52a6245b49 Add --carrier-position command line argument
Takes special values "FLOLS" and "abeam" to set up
aligned for final approach or at the 180 for the carrier flight
deck.  Or alternatively a catapult or parking position.
2020-04-17 20:25:18 +01:00
Stuart Buchanan
6ab7c08aa5 Fix --heading for --ndb position option.
Previously setting an offset for an NDB start position
resuled in any --heading setting being ignored.  This fixes it.
2020-04-12 21:45:20 +01:00
James Turner
b1395a86ba Add —disable-hold-short option for MP
Allow explicit disabling of the hold-short behaviour when it causes
problems.
2020-04-10 10:40:32 +01:00
Richard Harrison
b8f28d54c6 Carrier init:
As well as "FLOLS" in the runway allow it in the parkpos; probably we should rename this to "position" rather than "parkpos"
2020-04-10 00:06:00 +02:00
Stuart Buchanan
00fd5fbaec Carrier "abeam" position support
Support for --carrier-abeam option, which places the aircraft
at the end of a downwind opposite the FLOLS.

Add launcher support for above.

Add carrier display for launcher showing position relative to
carrier.
2020-04-05 23:13:32 +01:00
Stuart Buchanan
6b17604ba8 Carrier launcher: Allow setting altitude 2020-04-03 20:37:37 +01:00
James Turner
177fc565da Launcher: initial carrier support
Allow selecting carriers from scenarios, and starting at either a
parking position, or a distance offset from the FLOLS (effectively
a crude ‘on-final’)

Extend the —carrier startup option to accept a runway ident of FLOLS,
in conjunction with the existing —offset-distance argument.
2020-03-20 15:51:47 +00:00
James Turner
88a78dd314 Remove last hard-coded default airport ID
Neither Torsten nor I can recall why we continued to hard-code this,
so make it dynamic for now. When we remember why we hard-code it,
we can add a BigComment from future-James to future-future-James about
why not to do this again :)
2019-05-27 11:42:53 +01:00
Dan Wickstrom
1948304157 Fix problem where AI planes are placed on top of user aircraft when user either selects a specific spot or user selects parking to be an available spot. 2019-04-25 11:39:41 +01:00
James Turner
845e7c6bef Improved ‘is MP enabled’ check for pos-init
This fixes the MP detection check when selecting MP on the command-line
2019-01-08 23:20:51 +00:00
Edward d'Auvergne
feb854946e TestSuite: Complete removal of FG_TESTLIB. 2018-07-26 15:52:07 +02:00
Richard Harrison
a6718cc73d 2018.1: fix default Airport.
As it says in the comments this really shouldn't be hardcoded...
2018-02-27 05:09:11 +01:00
James Turner
06d206828a De-boost-ify position-init code
Also remove some now redundant parking-availability code, which is now
covered inside the dynamics code.
2017-09-26 16:52:48 +01:00
Torsten Dreyer
a82d955554 set fallback location to LKPR 2017-09-18 19:55:10 +02:00
James Turner
d422992b2d Re-indent my fix from yesterday to 2-space mode.
This will fix a misleading indentation warning from GCC, although to
doubly sure I also added explicit braces to the code.
2017-09-09 19:03:53 +01:00
James Turner
bf2c363e50 Fix carrier starts
Rewrite the position-init code for carrier starts, to precisely wait
on the carrier model being loaded, before proceeding with FDM init.
This allows the FDM to see the correct carrier model in the ground
cache, and hence avoids starting in the water.

To implement this, the CheckSceneryVisitor is used to force the carrier
model to be loaded while the splash-screen is visible.
2017-09-08 22:31:22 +01:00
Torsten Dreyer
406f158067 Change fallback airport to KBOS 2017-05-17 22:34:38 +02:00
Gary Preston
8958b4d130 Cleanup unused variable warning.
Remove, comment out or relocate variables as appropriate to silence
unused variable warning.
2017-04-06 18:26:18 +09:00
James Turner
58a7f2c5c2 Unit-test for initPosition.
Only basic, but can be expanded incrementally now
2017-03-27 15:38:05 +01:00
James Turner
63d8c2fd83 Enable —-metar runway selection.
Thanks to Florent for the catch.
2017-03-19 22:41:07 +00:00
James Turner
b1fa31fa09 Restore METAR-based runway selection.
As part of this, add the ability to distinguish default vs explicit
airport selection via a new /sim/presets/airport-requested flag. This
enables us to more cleanly handle different combinations of startup,
especially the case where the user requests an airport but no runway
(wants auto selection), ensuring we don’t look for the default airport’s
runway (from location-presets.xml) in that case.
2017-03-19 11:55:10 +00:00
Torsten Dreyer
1f9ece8303 Location preset for ENBR (2017.1) 2017-01-25 14:00:06 +01:00
Torsten Dreyer
7f3fa4a3b7 Set fallback (hardcoded) startup airport to LSZH 2016-11-22 09:27:30 +01:00
James Turner
eaf779deb2 Use ground-network to improve MP start location.
Search for the closest ground-net node near but /not/ on, the requested
runway. This works fairly well, although for some airports the selected
node is surprisingly far from the runway.
2016-11-13 22:20:40 +01:00
James Turner
4294966781 Fix setting start offset with MP enabled. 2016-09-07 22:51:27 +01:00
Torsten Dreyer
1947c100d9 Also use SBRJ as fallback.
Sigh. No real good idea how to /not/ hardcode this.
2016-08-06 23:12:43 +02:00
James Turner
e30c886068 Adjust runway startup position with MP enabled
Relocate the start-up position to a plausible hold-short position
when MP is active and a runway start is requested. This does not (yet)
use ground-net data to identify a real hold-short position.
2016-07-17 21:11:14 +01:00
James Turner
4aee633be3 Fix starting up at a parking location.
Move parking-pos selection to finalizePosition, so that dynamics and
ATC controllers are available and work correctly.
2016-07-16 11:45:30 +01:00
James Turner
6d0c2070fd Use future-proof SGPath APIs.
Remove uses of .str(), .c_str() and some other methods of SGPath.
Pass SGPath directly where possible, or explicitly convert to the
appropriate 8-bit encoding.
2016-06-28 10:08:38 +01:00
Torsten Dreyer
5c0a477a47 Slightly better handling of setting initial pos
don't use KSFO as default when an unknown ID was
specified for --airport arg
TODO: don't hardcode default airport
2016-04-24 10:42:58 +02:00
James Turner
2af076e6cb Add airport dynamics manager
- decouple dynamic airport data from the static (nav-db) data.
2015-12-05 00:25:29 +00:00
James Turner
fc887b106b Checkpoint - ground-net skips the cache 2015-12-01 14:01:32 +00:00
James Turner
a39df48772 Navaid diagram for launcher
- work in progress, needs labels
2015-11-23 00:47:01 +00:00
James Turner
56d7d049bc Launcher GUI for in-air / navaid starts 2015-11-23 00:46:25 +00:00
Durk Talsma
98682c0c68 Fix bug when starting using the --parkpos option. Create a pointer to a ParkingAssignment object, so that the reference counter doesn't get reset to 0 when the local class is destroyed. 2015-05-14 18:15:30 +02:00
James Turner
99fd9513d9 Metar: finalise-position fast if Metar fails
- when METAR lookup fails (as opposed to timing out), report
this immediately so finalise-position doesn't wait.
2014-02-24 19:43:21 +00:00
Christian Schmitt
9d995907db Support helipad names in the --runway startup option
also give better user feedback if runway/helipad ID is unknown
2014-02-14 20:05:11 +01:00
James Turner
7ff9792b96 Reset: listener cleanup 2013-12-04 09:11:26 +00:00
James Turner
0191b597e7 Environment manager: use aircraft_pos helper 2013-11-16 12:28:51 +00:00
Tom Paoletti
81cd33e2fa Performance optimization: empty() instead of size()>0
empty() is guaranteed to be constant complexity for both vectors and lists, while size() has linear complexity for lists.
2013-08-19 09:01:59 +01:00
James Turner
a7e4f2a971 std:: namespace fixes, AIBase cleanup.
Make data members in AIBase protected, and move FGAIModelData to be
a private helper in the .cxx file.
2013-03-28 16:49:52 +00:00