from time import sleep
import xpc

def ex():
    print "X-Plane Connect example script"
    print "Setting up simulation"
    with xpc.XPlaneConnect() as client:
        # Verify connection
        try:
            # If X-Plane does not respond to the request, a timeout error
            # will be raised.
            client.getDREF("sim/test/test_float")
        except:
            print "Error establishing connection to X-Plane."
            print "Exiting..."
            return

        # Set position of the player aircraft
        print "Setting position"
        #       Lat     Lon         Alt   Pitch Roll Yaw Gear
        posi = [37.524, -122.06899, 2500, 0,    0,   0,  1]
        client.sendPOSI(posi)
        
        # Set position of a non-player aircraft
        print "Setting NPC position"
        #       Lat       Lon         Alt   Pitch Roll Yaw Gear
        posi = [37.52465, -122.06899, 2500, 0,    20,   0,  1]
        client.sendPOSI(posi, 1)

        # Set angle of attack, velocity, and orientation using the DATA command
        print "Setting orientation"
        data = [\
            [18,   0, -998,   0, -998, -998, -998, -998, -998],\
            [ 3, 130,  130, 130,  130, -998, -998, -998, -998],\
            [16,   0,    0,   0, -998, -998, -998, -998, -998]\
            ]
        client.sendDATA(data)

        # Set control surfaces and throttle of the player aircraft using sendCTRL
        print "Setting controls"
        ctrl = [0.0, 0.0, 0.0, 0.8]
        client.sendCTRL(ctrl)

        # Pause the sim
        print "Pausing"
        client.pauseSim(True)
        sleep(2)

        # Toggle pause state to resume
        print "Resuming"
        client.pauseSim(False)

        # Stow landing gear using a dataref
        print "Stowing gear"
        gear_dref = "sim/cockpit/switches/gear_handle_status"
        client.sendDREF(gear_dref, 0)

        # Let the sim run for a bit.
        sleep(4)

        # Make sure gear was stowed successfully
        gear_status = client.getDREF(gear_dref)
        if gear_status[0] == 0:
            print "Gear stowed"
        else:
            print "Error stowing gear"

        print "End of Python client example"
        raw_input("Press any key to exit...")

if __name__ == "__main__":
    ex()