// Initialize this Joystick controller //-------------------------------------------------------------------------- // Construction //-------------------------------------------------------------------------- public JoystickController(DirectInput dinput, Guid guid) { this.directInputDevice = dinput.CreateDevice(guid); foreach (DIDEVICEOBJECTINSTANCE ddoi in this.directInputDevice.EnumObjects(DIDFT.AXIS)) { if ((ddoi.dwType & (int)DIDFT.AXIS) != 0) // can omit? { this.directInputDevice.SetRange(ddoi, -128, 127); } } // We stick formatDesc in a member variable because we're not sure whether // we're allowed to free it right after the SetDataFormat call or whether // we're responsible for keeping it alive so long as we use the IDirectInputDevice8 // instance. this.formatDesc = State.GetDataRetrievalDescriptor(); this.directInputDevice.SetDataFormat(ref this.formatDesc); }
public void SetDataFormat(ref DIDATAFORMAT pdf) { this.pInputDevice.SetDataFormat(pdf); }
public static unsafe DIDATAFORMAT GetDataRetrievalDescriptor() { DIDATAFORMAT format = new DIDATAFORMAT(); int cFields = typeof(State).GetFields().Length; format.Init(cFields); format.dwFlags = (int)DIDF.ABSAXIS; format.dwDataSize = Marshal.SizeOf(typeof(State)); // format.rgodf[0].Set(ref Guids.XAxis, Marshal.OffsetOf(typeof(State), "x"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.AXIS, DIDOI.ASPECTPOSITION); format.rgodf[1].Set(ref Guids.YAxis, Marshal.OffsetOf(typeof(State), "y"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.AXIS, DIDOI.ASPECTPOSITION); format.rgodf[2].Set(ref Guids.ZAxis, Marshal.OffsetOf(typeof(State), "z"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.AXIS, DIDOI.ASPECTPOSITION); format.rgodf[3].Set(ref Guids.RZAxis, Marshal.OffsetOf(typeof(State), "rotationZ"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.AXIS, DIDOI.ASPECTPOSITION); format.rgodf[4].Set(ref Guids.POV, Marshal.OffsetOf(typeof(State), "pov"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.POV, DIDOI.NONE); format.rgodf[5].Set(null, Marshal.OffsetOf(typeof(State), "button0"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[6].Set(null, Marshal.OffsetOf(typeof(State), "button1"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[7].Set(null, Marshal.OffsetOf(typeof(State), "button2"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[8].Set(null, Marshal.OffsetOf(typeof(State), "button3"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[9].Set(null, Marshal.OffsetOf(typeof(State), "button4"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[10].Set(null, Marshal.OffsetOf(typeof(State), "button5"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[11].Set(null, Marshal.OffsetOf(typeof(State), "button6"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[12].Set(null, Marshal.OffsetOf(typeof(State), "button7"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[13].Set(null, Marshal.OffsetOf(typeof(State), "button8"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[14].Set(null, Marshal.OffsetOf(typeof(State), "button9"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[15].Set(null, Marshal.OffsetOf(typeof(State), "button10"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); format.rgodf[16].Set(null, Marshal.OffsetOf(typeof(State), "button11"), DIDFT.MYSTERY|DIDFT.ANYINSTANCE|DIDFT.BUTTON, DIDOI.NONE); // return format; }