MonoTouch.GameController Namespace

Supports external game controllers.

Remarks

The Game Controller namespace was added in iOS 7 and adds support for game controllers.

Game controllers come in two forms: "form-fitting" controllers that contain an iOS device and "extended wireless" controllers that wirelessly connect to an iOS device or a Mac.

Game controllers must be optional components: game developers must make their game playable by users who do not have game controllers.

Form-fitting controllers are automatically discovered by the system. Extended wireless controllers are discovered by the system subsequent to the application developer calling MonoTouch.GameController.GCController.StartWirelessControllerDiscovery and will cause the MonoTouch.GameController.GCController.Notifications.ObserveDidConnect notification handler to fire. When wireless controller disconnect, the MonoTouch.GameController.GCController.Notifications.ObserveDidDisconnect notification fires.

There are two supported profiles for Game Controllers: MonoTouch.GameController.GCGamepad and MonoTouch.GameController.CGExtendedGamepad. A MonoTouch.GameController.GCController will have a non-null value for either its MonoTouch.GameController.CGController.Gamepad or its MonoTouch.GameController.CGController.ExtendedGamepad property, the application developer must read those to determine the type.

MonoTouch.GameController.CGGamepads have two shoulder buttons, a D-pad (see MonoTouch.GameController. GCControllerDirectionPad), and 4 face buttons labeled Y-B-A-X.

MonoTouch.GameController.CGExtendedGamepads have the same elements, plus two trigger buttons and two joysticks (see MonoTouch.GameController.GCControllerAxisInput). Apple conceptual schematics additionally show an LED array, but there is currently no programmatic access to this element.

There are three ways to read game controller data:

TechniqueMethod(s)Use
PollingProperties such as MonoTouch.GameController.GCControllerButtonInput.Pressed or MonoTouch.GameController.GCControllerDirectionPad.XAxisDirectly read from the game-loop (see MonoTouch.SpriteKit.SKScene.Update).
Event-drivenElement's ValueChangedHandler property (such as MonoTouch.GameController.GControllerButtonInput.ValueChangedHandler)Game Controller processes updates on the main thread. The framework ensures that simultaneously-occurring events result in a series of single callbacks.
Coordinated Snapshot MonoTouch.GameController.CGGamepad.SaveSnapshot, MonoTouch.GameController.CGExtendedGamepad.SaveSnapshotSnapshots the controller state. Appropriate for marshalling, serialization, or delayed processing.

The major classes in the Game Controller namespace are shown in the following illustration:

Classes

TypeReason
GCControllerA game controller, either form-fitting or extended wireless.
GCController+NotificationsNotification posted by the MonoTouch.GameController.GCController class.
GCControllerAxisInputA MonoTouch.GameController.GCControllerElement representing a joystick.
GCControllerAxisValueChangedHandlerThe delegate used as the value-changed handler for MonoTouch.GameController.GCControllerAxisInput.ValueChangedHandler.
GCControllerButtonInputA MonoTouch.GameController.GCControllerElement representing a game-controller button.
GCControllerButtonValueChangedHandler that can be passed to the MonoTouch.GameController.GCControllerButtonInput.SetPressedChangedHandler method to respond to changes to button states.
GCControllerDirectionPadA MonoTouch.GameController.GCControllerElement representing a direction-pad.
GCControllerDirectionPadValueChangedHandlerThe delegate used as the value-changed handler for MonoTouch.GameController.GCControllerDirectionPad.ValueChangedHandler.
GCControllerElementThe base class for input elements of a game controller.
GCExtendedGamepadA gamepad with two shoulder buttons, two triggers, two thumbsticks, a D-Pad, and a directional button array.
GCExtendedGamepadSnapshotA serializable snapshot of the game controller's state.
GCExtendedGamepadSnapShotDataV100The state of a MonoTouch.GameController.GCExtendedGamepad. Produced by MonoTouch.GameController.GCExtendedGamepadSnapshot.TryGetSnapshotData.
GCExtendedGamepadValueChangedHandlerThe delegate used as the value-changed handler for MonoTouch.GameController.GCExtendedGamepad.ValueChangedHandler.
GCGamepadA gamepad with two shoulder buttons, a D-Pad, and a directional button array..
GCGamepadSnapshotA serializable snapshot of the game controller's state.
GCGamepadSnapShotDataV100The state of a MonoTouch.GameController.GCGamepad. Produced by MonoTouch.GameController.GCGamepadSnapshot.TryGetSnapshotData.
GCGamepadValueChangedHandlerThe delegate used as the value-changed handler for MonoTouch.GameController.GCGamepad.ValueChangedHandler.
GCMotionHolds position data of a game controller.