Results 1 to 2 of 2
  1. #1
    New Member
    Join Date
    Jul 2007
    Location
    UK
    Posts
    1
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    AI Objects and Waypoints Sample

    Hi

    I have just istalled Visual C++ 2008 express, and as a first experiment have tried to Debug and build the AI objects sample from the SDK.

    //------------------------------------------------------------------------------
    //
    // SimConnect AI Objects sample
    //
    // Description:
    // Adds Non ATC controlled simulation objects.
    // With the default flight (Cessna at Seatac) - turn off the engine
    // and watch the antics.
    // Press z to create the objects
    // Press x to load them with their waypoint lists
    //------------------------------------------------------------------------------


    #define WIN32_LEAN_AND_MEAN



    #include
    #include
    #include
    #include

    #include "SimConnect.h"

    int quit = 0;
    HANDLE hSimConnect = NULL;
    DWORD BalloonID = SIMCONNECT_OBJECT_ID_USER;
    DWORD BellID = SIMCONNECT_OBJECT_ID_USER;
    DWORD MooneyID = SIMCONNECT_OBJECT_ID_USER;
    DWORD TruckID = SIMCONNECT_OBJECT_ID_USER;

    static enum EVENT_ID {
    EVENT_SIM_START,
    EVENT_Z,
    EVENT_X,
    EVENT_C,
    EVENT_V,
    };

    static enum DATA_REQUEST_ID7 {
    REQUEST_BALLOON1,
    REQUEST_BELL,
    REQUEST_MOONEY,
    REQUEST_DOUGLAS,
    REQUEST_TRUCK,
    REQUEST_WHALE,
    };

    static enum GROUP_ID {
    GROUP_ZX,
    };

    static enum INPUT_ID {
    INPUT_ZX,
    };

    static enum DEFINITION_ID {
    DEFINITION_WAYPOINT,
    DEFINITION_THROTTLE
    };

    struct structBalloonControl
    {
    double throttlePercent;
    };

    structBalloonControl bc;

    // Set up flags so these operations only happen once
    static bool plansSent = false;
    static bool objectsCreated = false;

    void sendFlightPlans()
    {
    HRESULT hr;
    SIMCONNECT_DATA_WAYPOINT wp[3]; // Mooney waypoint list
    SIMCONNECT_DATA_WAYPOINT ft[2]; // Truck waypoint list

    // Mooney aircraft should fly in circles across the North end of the runway

    wp[0].Flags = SIMCONNECT_WAYPOINT_SPEED_REQUESTED;
    wp[0].Altitude = 800;
    wp[0].Latitude = 47 + (27.79/60);
    wp[0].Longitude = -122 - (18.46/60);
    wp[0].ktsSpeed = 100;

    wp[1].Flags = SIMCONNECT_WAYPOINT_SPEED_REQUESTED;
    wp[1].Altitude = 600;
    wp[1].Latitude = 47 + (27.79/60);
    wp[1].Longitude = -122 - (17.37/60);
    wp[1].ktsSpeed = 100;

    wp[2].Flags = SIMCONNECT_WAYPOINT_WRAP_TO_FIRST | SIMCONNECT_WAYPOINT_SPEED_REQUESTED;
    wp[2].Altitude = 800;
    wp[2].Latitude = 47 + (27.79/60);
    wp[2].Longitude = -122 - (19.92/60);
    wp[2].ktsSpeed = 100;

    // Send the three waypoints to the Mooney
    hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_WAYPOINT, MooneyID, 0, ARRAYSIZE(wp), sizeof(wp[0]), wp);

    // Truck goes down the runway
    ft[0].Flags = SIMCONNECT_WAYPOINT_SPEED_REQUESTED;
    ft[0].Altitude = 433;
    ft[0].Latitude = 47 + (25.93/60);
    ft[0].Longitude = -122 - (18.46/60);
    ft[0].ktsSpeed = 75;

    ft[1].Flags = SIMCONNECT_WAYPOINT_WRAP_TO_FIRST | SIMCONNECT_WAYPOINT_SPEED_REQUESTED;
    ft[1].Altitude = 433;
    ft[1].Latitude = 47 + (26.25/60);
    ft[1].Longitude = -122 - (18.46/60);
    ft[1].ktsSpeed = 55;

    // Send the two waypoints to the truck
    hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_WAYPOINT, TruckID, 0, ARRAYSIZE(ft), sizeof(ft[0]), ft);


    }

    void setUpSimObjects()
    {
    SIMCONNECT_DATA_INITPOSITION Init;
    HRESULT hr;

    // Add a parked museum aircraft, just west of the runway

    Init.Altitude = 433.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (25.97/60); // Convert from 47 25.97 N
    Init.Longitude = -122 - (18.51/60); // Convert from 122 18.51 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 90.0;
    Init.OnGround = 1;
    Init.Airspeed = 0;
    hr = SimConnect_AICreateSimulatedObject(hSimConnect, "Douglas DC-3", Init, REQUEST_DOUGLAS);

    // Add a hot air balloon

    Init.Altitude = 500.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (25.97/60); // Convert from 47 26.22 N
    Init.Longitude = -122 - (18.45/60); // Convert from 122 18.45 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 0.0;
    Init.OnGround = 0;
    Init.Airspeed = 0;
    hr = SimConnect_AICreateSimulatedObject(hSimConnect, "Hot_Air_Balloon", Init, REQUEST_BALLOON1);

    // Add a helicopter

    Init.Altitude = 433.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (26.22/60); // Convert from 47 26.22 N
    Init.Longitude = -122 - (18.48/60); // Convert from 122 18.48 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 0.0;
    Init.OnGround = 1;
    Init.Airspeed = 100;

    //hr = SimConnect_AICreateNonATCAircraft(hSimConnect, "Bell 206B JetRanger", "H1000", Init, REQUEST_BELL);

    // Initialize Mooney aircraft just in front of user aircraft
    // User aircraft is at 47 25.89 N, 122 18.48 W

    Init.Altitude = 433.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (25.91/60); // Convert from 47 25.90 N
    Init.Longitude = -122 - (18.48/60); // Convert from 122 18.48 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 360.0;
    Init.OnGround = 1;
    Init.Airspeed = 1;

    hr = SimConnect_AICreateNonATCAircraft(hSimConnect, "Mooney Bravo", "N1001", Init, REQUEST_MOONEY);

    // Initialize truck just in front of user aircraft
    // User aircraft is at 47 25.89 N, 122 18.48 W

    Init.Altitude = 433.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (25.91/60); // Convert from 47 25.90 N
    Init.Longitude = -122 - (18.47/60); // Convert from 122 18.48 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 360.0;
    Init.OnGround = 1;
    Init.Airspeed = 0;

    hr = SimConnect_AICreateSimulatedObject(hSimConnect, "VEH_jetTruck", Init, REQUEST_TRUCK);

    // Add a humpback whale

    Init.Altitude = 433.0; // Altitude of Sea-tac is 433 feet
    Init.Latitude = 47 + (25.89/60); // Convert from 47 25.89 N
    Init.Longitude = -122 - (18.51/60); // Convert from 122 18.51 W
    Init.Pitch = 0.0;
    Init.Bank = 0.0;
    Init.Heading = 0.0;
    Init.OnGround = 1;
    Init.Airspeed = 0;
    hr = SimConnect_AICreateSimulatedObject(hSimConnect, "Humpbackwhale", Init, REQUEST_WHALE);
    }

    void CALLBACK MyDispatchProcSO(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
    {
    HRESULT hr;

    switch(pData->dwID)
    {
    case SIMCONNECT_RECV_ID_EVENT:
    {
    SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData;

    switch(evt->uEventID)
    {
    case EVENT_SIM_START:

    // Sim has started so turn the input events on
    hr = SimConnect_SetInputGroupState(hSimConnect, INPUT_ZX, SIMCONNECT_STATE_ON);

    break;

    case EVENT_Z:
    if (!objectsCreated)
    {
    setUpSimObjects();
    objectsCreated = true;
    }
    break;

    case EVENT_X:
    if (!plansSent && objectsCreated)
    {
    sendFlightPlans();
    plansSent = true;
    }
    break;

    case EVENT_C:
    {

    // Give the balloon some throttle
    if (bc.throttlePercent < 100.0f)
    bc.throttlePercent += 5.0f;

    hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_THROTTLE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeof(bc), &bc);

    break;
    }

    case EVENT_V:
    {

    // Give the balloon some throttle
    if (bc.throttlePercent > 0.0f)
    bc.throttlePercent -= 5.0f;

    hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_THROTTLE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeof(bc), &bc);

    break;
    }

    default:
    printf("\nUnknown event: %d", evt->uEventID);
    break;
    }
    break;
    }

    case SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID:
    {
    SIMCONNECT_RECV_ASSIGNED_OBJECT_ID *pObjData = (SIMCONNECT_RECV_ASSIGNED_OBJECT_ID*)pData;

    switch( pObjData ->dwRequestID)
    {

    case REQUEST_BALLOON1:
    BalloonID = pObjData->dwObjectID;
    printf("\nCreated Balloon 1 id = %d", BalloonID);
    break;

    case REQUEST_BELL:
    BellID = pObjData->dwObjectID;
    printf("\nCreated Bell Helicopter id = %d", BellID);
    break;

    case REQUEST_MOONEY:
    MooneyID = pObjData->dwObjectID;
    printf("\nCreated Mooney Bravo id = %d", MooneyID);
    break;

    case REQUEST_DOUGLAS:
    printf("\nCreated stationary Douglas DC3 id = %d", pObjData->dwObjectID);
    break;

    case REQUEST_TRUCK:
    TruckID = pObjData->dwObjectID;
    printf("\nCreated truck id = %d", TruckID);
    break;

    case REQUEST_WHALE:
    printf("\nCreated humpback whale id = %d", pObjData->dwObjectID);
    break;

    default:
    printf("\nUnknown creation %d", pObjData->dwRequestID);
    break;

    }
    break;
    }

    case SIMCONNECT_RECV_ID_QUIT:
    {
    quit = 1;
    break;
    }

    default:
    printf("\nReceived:%d",pData->dwID);
    break;
    }
    }

    void testSimObjects()
    {
    HRESULT hr;

    if (SUCCEEDED(SimConnect_Open(&hSimConnect, "AI Objects and Waypoints", NULL, 0, 0, 0)))
    {
    printf("\nConnected to Flight Simulator!");

    // Create some private events
    hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_Z);
    hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_X);
    hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_C);
    hr = SimConnect_MapClientEventToSimEvent(hSimConnect, EVENT_V);


    // Link the private events to keyboard keys, and ensure the input events are off
    hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT_ZX, "Z", EVENT_Z);
    hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT_ZX, "X", EVENT_X);
    hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT_ZX, "C", EVENT_C);
    hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT_ZX, "V", EVENT_V);

    hr = SimConnect_SetInputGroupState(hSimConnect, INPUT_ZX, SIMCONNECT_STATE_OFF);

    // Sign up for notifications
    hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_ZX, EVENT_Z);
    hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_ZX, EVENT_X);
    hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_ZX, EVENT_C);
    hr = SimConnect_AddClientEventToNotificationGroup(hSimConnect, GROUP_ZX, EVENT_V);

    // Set up a definition for a waypoint list
    hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_WAYPOINT,
    "AI Waypoint List", "number", SIMCONNECT_DATATYPE_WAYPOINT);

    // Set up a definition for the balloon throttle
    bc.throttlePercent = 0.0f;

    hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_THROTTLE,
    "GENERAL ENG THROTTLE LEVER POSITION:1", "percent");

    // Request a simulation start event
    hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");

    while( 0 == quit )
    {
    SimConnect_CallDispatch(hSimConnect, MyDispatchProcSO, NULL);
    Sleep(1);
    }

    hr = SimConnect_Close(hSimConnect);
    }
    }


    int __cdecl _tmain(int argc, _TCHAR* argv[])
    {
    testSimObjects();
    return 0;
    }


    I keep getting the following error;


    1>LINK : fatal error LNK1104: cannot open file 'I:\FSX.obj'

    I: is the drive where I have FSX and the SDK installed.

    I have tried adding the directory folder paths to

    C++ General

    and

    Linker General and command line







    But with no succces.

    Does anyone have any ideas please ?

    Thanks
    Last edited by BFFS; 10-14-2009 at 04:00 PM. Reason: Added Code

  2. #2
    75+ Posting Member
    Join Date
    Aug 2008
    Location
    USA
    Posts
    100
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    Re: AI Objects and Waypoints Sample

    Is that file the result of your code? It seems to me that your project has the directories messed up.
    Thanks,

    Boaz
    KSEA
    Lose money - ask me how.

Similar Threads

  1. Fly -over -waypoints
    By ktroemer in forum PM Boeing FMC/CDU
    Replies: 7
    Last Post: 11-29-2010, 02:26 PM
  2. FSX - 737 - PM - Waypoints
    By ktroemer in forum PM General Q & A
    Replies: 65
    Last Post: 12-21-2008, 07:28 AM
  3. CDU: Fly-By vs. Fly-Over waypoints
    By stefanloss in forum PM General Q & A
    Replies: 13
    Last Post: 05-29-2007, 05:47 PM
  4. Deleting waypoints in PM CDU
    By PaulEMB in forum PM General Q & A
    Replies: 3
    Last Post: 01-07-2007, 04:43 AM
  5. More than two objects per row: LCDText
    By DanFontan in forum FS2Phidget Users
    Replies: 2
    Last Post: 02-17-2005, 07:06 PM