109 lines
3.5 KiB
Objective-C
109 lines
3.5 KiB
Objective-C
//
|
|
// GCVirtualController.h
|
|
// GameController
|
|
//
|
|
// Copyright © 2021 Apple Inc. All rights reserved.
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/**
|
|
* @class GCVirtualControllerConfiguration
|
|
*/
|
|
API_AVAILABLE(ios(15.0)) API_UNAVAILABLE(macos, tvos) API_UNAVAILABLE(visionos)
|
|
NS_SWIFT_NAME(GCVirtualController.Configuration)
|
|
@interface GCVirtualControllerConfiguration : NSObject
|
|
|
|
/**
|
|
The set of controller elements to be made available on \c GCVirtualController instances created with this configuration. e.g. [GCInputDirectionPad, GCInputLeftShoulder, etc...]
|
|
*/
|
|
@property (nonatomic, strong) NSSet<NSString *> *elements;
|
|
|
|
/**
|
|
Defaults to false, indicating that the default system touch control elements will be drawn using a touchable full-screen overlay. When set to true,
|
|
the application is responsible for drawing its own control UI and should call \c -setValue: and \c -setPosition: methods on the \c GCVirtualController
|
|
in response to touch or other events, which will then be translated into \c GCController events.
|
|
*/
|
|
@property (nonatomic, getter=isHidden) BOOL hidden API_AVAILABLE(ios(17.0));
|
|
|
|
@end
|
|
|
|
|
|
/**
|
|
* @class GCVirtualControllerElementConfiguration
|
|
*/
|
|
API_AVAILABLE(ios(15.0)) API_UNAVAILABLE(macos, tvos) API_UNAVAILABLE(visionos)
|
|
NS_SWIFT_NAME(GCVirtualController.ElementConfiguration)
|
|
@interface GCVirtualControllerElementConfiguration : NSObject
|
|
|
|
/**
|
|
A Boolean value that determines whether the element is hidden
|
|
*/
|
|
@property (nonatomic, getter=isHidden) BOOL hidden;
|
|
|
|
/**
|
|
Path that defines custom element image
|
|
Only supported for button elements
|
|
*/
|
|
@property (nonatomic, strong, nullable) UIBezierPath* path;
|
|
|
|
/**
|
|
A Boolean value that determines if the thumbstick is acting as a touchpad
|
|
Only supported for thumbsticks
|
|
*/
|
|
@property (nonatomic) BOOL actsAsTouchpad;
|
|
|
|
@end
|
|
|
|
|
|
|
|
/**
|
|
* @class GCVirtualController
|
|
*/
|
|
API_AVAILABLE(ios(15.0)) API_UNAVAILABLE(macos, tvos) API_UNAVAILABLE(visionos)
|
|
@interface GCVirtualController : NSObject
|
|
|
|
/**
|
|
Create a virtual controller
|
|
|
|
@see GCVirtualControllerConfiguration
|
|
*/
|
|
+ (GCVirtualController *)virtualControllerWithConfiguration:(GCVirtualControllerConfiguration *)configuration;
|
|
|
|
+ (instancetype)new NS_UNAVAILABLE;
|
|
- (instancetype)init NS_UNAVAILABLE;
|
|
- (instancetype)initWithConfiguration:(GCVirtualControllerConfiguration *)configuration NS_DESIGNATED_INITIALIZER;
|
|
|
|
- (void)connectWithReplyHandler:(nullable void(^)(NSError * _Nullable error))reply NS_SWIFT_ASYNC_NAME(connect());
|
|
- (void)disconnect;
|
|
|
|
|
|
/**
|
|
GCController is only available when GCVirtualController is connected
|
|
*/
|
|
@property (nonatomic, readonly, nullable) GCController *controller;
|
|
|
|
/**
|
|
Changes the GCVirtualControllerElementConfiguration on a per element basis. Only applicable when the GCVirtualController is not hidden and its
|
|
UI is being drawn by the system.
|
|
*/
|
|
- (void)updateConfigurationForElement:(NSString *)element configuration:(NS_NOESCAPE GCVirtualControllerElementConfiguration* (^)(GCVirtualControllerElementConfiguration *oldConfiguration))config;
|
|
|
|
/**
|
|
Sets the value for a GCControllerButton element. Values are clamped to the range (0.0 - 1.0).
|
|
*/
|
|
- (void)setValue:(CGFloat)value forButtonElement:(NSString *)element API_AVAILABLE(ios(17.0));
|
|
|
|
/**
|
|
Sets the (x,y) position for a GCControllerDirectionPad element (D-Pads as well as Joysticks). X and Y values are clamped to the range (-1.0 - 1.0).
|
|
*/
|
|
- (void)setPosition:(CGPoint)position forDirectionPadElement:(NSString *)element API_AVAILABLE(ios(17.0));
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|