ray

Owner: IIIlllIIIllI URL: git@github.com:nyangkosense/ray.git

SDK/CHeaders/XPLM/XPLMPlanes.h

#ifndef _XPLMPlanes_h_
#define _XPLMPlanes_h_

/*
 * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All
 * rights reserved.  See license.txt for usage. X-Plane SDK Version: 4.0.0
 *
 */

/***************************************************************************
 * XPLMPlanes
 ***************************************************************************/
/*
 * The XPLMPlanes APIs allow you to control the various aircraft in X-Plane,
 * both the user's and the sim's.
 * 
 * *Note*: unlike almost all other APIs in the SDK, aircraft paths are _full_
 *  file system paths for historical reasons. You'll need to prefix all
 *  relative paths with the X-Plane path as accessed via XPLMGetSystemPath.
 *
 */

#include "XPLMDefs.h"

#ifdef __cplusplus
extern "C" {
#endif

/***************************************************************************
 * USER AIRCRAFT ACCESS
 ***************************************************************************/

/*
 * XPLMSetUsersAircraft
 * 
 * This routine changes the user's aircraft.  Note that this will reinitialize
 * the user to be on the nearest airport's first runway.  Pass in a full path
 * (hard drive and everything including the .acf extension) to the .acf file.
 *
 */
XPLM_API void       XPLMSetUsersAircraft(
                         const char *         inAircraftPath);
/*
 * XPLMPlaceUserAtAirport
 * 
 * This routine places the user at a given airport.  Specify the airport by
 * its X-Plane airport ID (e.g. 'KBOS').
 *
 */
XPLM_API void       XPLMPlaceUserAtAirport(
                         const char *         inAirportCode);
#if defined(XPLM300)
/*
 * XPLMPlaceUserAtLocation
 * 
 * Places the user at a specific location after performing any necessary
 * scenery loads.
 * 
 * As with in-air starts initiated from the X-Plane user interface, the
 * aircraft will always start with its engines running, regardless of the
 * user's preferences (i.e., regardless of what the dataref
 * `sim/operation/prefs/startup_running` says).
 *
 */
XPLM_API void       XPLMPlaceUserAtLocation(
                         double               latitudeDegrees,
                         double               longitudeDegrees,
                         float                elevationMetersMSL,
                         float                headingDegreesTrue,
                         float                speedMetersPerSecond);
#endif /* XPLM300 */
/***************************************************************************
 * GLOBAL AIRCRAFT ACCESS
 ***************************************************************************/

/* The user's aircraft is always index 0.                                     */
#define XPLM_USER_AIRCRAFT   0
#if defined(XPLM_DEPRECATED)
/*
 * XPLMPlaneDrawState_t
 * 
 * This structure contains additional plane parameter info to be passed to
 * draw plane.  Make sure to fill in the size of the structure field with
 * sizeof(XPLMDrawPlaneState_t) so that the XPLM can tell how many fields you
 * knew about when compiling your plugin (since more fields may be added
 * later).
 * 
 * Most of these fields are ratios from 0 to 1 for control input.  X-Plane
 * calculates what the actual controls look like based on the .acf file for
 * that airplane.  Note for the yoke inputs, this is what the pilot of the
 * plane has commanded (post artificial stability system if there were one)
 * and affects ailerons, rudder, etc.  It is not necessarily related to the
 * actual position of the plane's surfaces!
 *
 */
typedef struct {
    /* The size of the draw state struct.                                         */
     int                       structSize;
    /* A ratio from [0..1] describing how far the landing gear is extended.       */
     float                     gearPosition;
    /* Ratio of flap deployment, 0 = up, 1 = full deploy.                         */
     float                     flapRatio;
    /* Ratio of spoiler deployment, 0 = none, 1 = full deploy.                    */
     float                     spoilerRatio;
    /* Ratio of speed brake deployment, 0 = none, 1 = full deploy.                */
     float                     speedBrakeRatio;
    /* Ratio of slat deployment, 0 = none, 1 = full deploy.                       */
     float                     slatRatio;
    /* Wing sweep ratio, 0 = forward, 1 = swept.                                  */
     float                     wingSweep;
    /* Thrust power, 0 = none, 1 = full fwd, -1 = full reverse.                   */
     float                     thrust;
    /* Total pitch input for this plane.                                          */
     float                     yokePitch;
    /* Total Heading input for this plane.                                        */
     float                     yokeHeading;
    /* Total Roll input for this plane.                                           */
     float                     yokeRoll;
} XPLMPlaneDrawState_t;
#endif /* XPLM_DEPRECATED */
/*
 * XPLMCountAircraft
 * 
 * This function returns the number of aircraft X-Plane is capable of having,
 * as well as the number of aircraft that are currently active.  These numbers
 * count the user's aircraft.  It can also return the plugin that is currently
 * controlling aircraft.  In X-Plane 7, this routine reflects the number of
 * aircraft the user has enabled in the rendering options window.
 *
 */
XPLM_API void       XPLMCountAircraft(
                         int *                outTotalAircraft,
                         int *                outActiveAircraft,
                         XPLMPluginID *       outController);
/*
 * XPLMGetNthAircraftModel
 * 
 * This function returns the aircraft model for the Nth aircraft.  Indices are
 * zero based, with zero being the user's aircraft.  The file name should be
 * at least 256 chars in length; the path should be at least 512 chars in
 * length.
 *
 */
XPLM_API void       XPLMGetNthAircraftModel(
                         int                  inIndex,
                         char *               outFileName,
                         char *               outPath);
/***************************************************************************
 * EXCLUSIVE AIRCRAFT ACCESS
 ***************************************************************************/
/*
 * The following routines require exclusive access to the airplane APIs. Only
 * one plugin may have this access at a time.
 *
 */


/*
 * XPLMPlanesAvailable_f
 * 
 * Your airplanes available callback is called when another plugin gives up
 * access to the multiplayer planes.  Use this to wait for access to
 * multiplayer.
 *
 */
typedef void (* XPLMPlanesAvailable_f)(
                         void *               inRefcon);

/*
 * XPLMAcquirePlanes
 * 
 * XPLMAcquirePlanes grants your plugin exclusive access to the aircraft.  It
 * returns 1 if you gain access, 0 if you do not.
 * 
 * inAircraft - pass in an array of pointers to strings specifying the planes
 * you want loaded.  For any plane index you do not want loaded, pass a
 * 0-length string.  Other strings should be full paths with the .acf
 * extension.  NULL terminates this array, or pass NULL if there are no planes
 * you want loaded.
 * 
 * If you pass in a callback and do not receive access to the planes your
 * callback will be called when the airplanes are available. If you do receive
 * airplane access, your callback will not be called.
 *
 */
XPLM_API int        XPLMAcquirePlanes(
                         char **              inAircraft,             /* Can be NULL */
                         XPLMPlanesAvailable_f inCallback,
                         void *               inRefcon);

/*
 * XPLMReleasePlanes
 * 
 * Call this function to release access to the planes.  Note that if you are
 * disabled, access to planes is released for you and you must reacquire it.
 *
 */
XPLM_API void       XPLMReleasePlanes(void);

/*
 * XPLMSetActiveAircraftCount
 * 
 * This routine sets the number of active planes.  If you pass in a number
 * higher than the total number of planes availables, only the total number of
 * planes available is actually used.
 *
 */
XPLM_API void       XPLMSetActiveAircraftCount(
                         int                  inCount);

/*
 * XPLMSetAircraftModel
 * 
 * This routine loads an aircraft model.  It may only be called if you have
 * exclusive access to the airplane APIs.  Pass in the path of the model with
 * the .acf extension.  The index is zero based, but you may not pass in 0
 * (use XPLMSetUsersAircraft to load the user's aircracft).
 *
 */
XPLM_API void       XPLMSetAircraftModel(
                         int                  inIndex,
                         const char *         inAircraftPath);

/*
 * XPLMDisableAIForPlane
 * 
 * This routine turns off X-Plane's AI for a given plane.  The plane will
 * continue to draw and be a real plane in X-Plane, but will not move itself.
 *
 */
XPLM_API void       XPLMDisableAIForPlane(
                         int                  inPlaneIndex);

#if defined(XPLM_DEPRECATED)
/*
 * XPLMDrawAircraft
 * 
 * WARNING: Aircraft drawing via this API is deprecated and WILL NOT WORK in
 * future versions of X-Plane.  Use XPLMInstance for 3-d drawing of custom
 * aircraft models.
 * 
 * This routine draws an aircraft.  It can only be called from a 3-d drawing
 * callback.  Pass in the position of the plane in OpenGL local coordinates
 * and the orientation of the plane.  A 1 for full drawing indicates that the
 * whole plane must be drawn; a 0 indicates you only need the nav lights
 * drawn. (This saves rendering time when planes are far away.)
 *
 */
XPLM_API void       XPLMDrawAircraft(
                         int                  inPlaneIndex,
                         float                inX,
                         float                inY,
                         float                inZ,
                         float                inPitch,
                         float                inRoll,
                         float                inYaw,
                         int                  inFullDraw,
                         XPLMPlaneDrawState_t * inDrawStateInfo);
#endif /* XPLM_DEPRECATED */

#if defined(XPLM_DEPRECATED)
/*
 * XPLMReinitUsersPlane
 * 
 * WARNING: DO NOT USE.  Use XPLMPlaceUserAtAirport or
 * XPLMPlaceUserAtLocation.
 * 
 * This function recomputes the derived flight model data from the aircraft
 * structure in memory.  If you have used the data access layer to modify the
 * aircraft structure, use this routine to resynchronize X-Plane; since
 * X-Plane works at least partly from derived values, the sim will not behave
 * properly until this is called.
 * 
 * WARNING: this routine does not necessarily place the airplane at the
 * airport; use XPLMSetUsersAircraft to be compatible.  This routine is
 * provided to do special experimentation with flight models without resetting
 * flight.
 *
 */
XPLM_API void       XPLMReinitUsersPlane(void);
#endif /* XPLM_DEPRECATED */

#ifdef __cplusplus
}
#endif

#endif