this repo has no description
1import { isFeatureEnabledForCurrentUser } from "../../common/util/lottery";
2import * as serverData from "../../foundation/json-parsing/server-data";
3import * as platformAttributes from "../../foundation/media/platform-attributes";
4import * as contentAttributes from "./attributes";
5export function isGameControllerSupported(objectGraph, data) {
6 switch (controllerRequirementFromData(objectGraph, data)) {
7 case "CONTROLLER_OPTIONAL":
8 case "CONTROLLER_REQUIRED":
9 case "SIRI_REMOTE_REQUIRED":
10 case "SIRI_REMOTE_OR_CONTROLLER_REQUIRED":
11 case "CONTROLLER_RECOMMENDED":
12 return true;
13 default:
14 return false;
15 }
16}
17export function isGameControllerRecommended(objectGraph, data) {
18 return (objectGraph.client.isiOS &&
19 isFeatureEnabledForCurrentUser(objectGraph, objectGraph.bag.gameControllerRecommendedRolloutRate) &&
20 controllerRequirementFromData(objectGraph, data) === "CONTROLLER_RECOMMENDED");
21}
22export function isGameControllerRequired(objectGraph, data) {
23 switch (controllerRequirementFromData(objectGraph, data)) {
24 case "CONTROLLER_REQUIRED":
25 case "SIRI_REMOTE_REQUIRED":
26 case "SIRI_REMOTE_OR_CONTROLLER_REQUIRED":
27 return true;
28 default:
29 return false;
30 }
31}
32export function isSpatialControllerRequired(objectGraph, data) {
33 return spatialControllerRequirementFromData(objectGraph, data) === "REQUIRED";
34}
35export function isSpatialControllerSupported(objectGraph, data) {
36 return (spatialControllerRequirementFromData(objectGraph, data) === "SUPPORTED" ||
37 spatialControllerRequirementFromData(objectGraph, data) === "REQUIRED");
38}
39export function controllerRequirementFromData(objectGraph, data) {
40 // If the data does not contain the current device's OS, we need to use the best alternative that it is compatible with.
41 const platformAttributeForClient = contentAttributes.defaultAttributePlatform(objectGraph);
42 if (platformAttributeForClient === null) {
43 return "NO_BADGE";
44 }
45 const requiresBinaryCompatibilityMode = !platformAttributes.hasPlatformAttribute(data, platformAttributeForClient);
46 if (requiresBinaryCompatibilityMode) {
47 const compatibilityControllerRequirementData = contentAttributes.contentAttributeAsDictionary(objectGraph, data, "compatibilityControllerRequirement");
48 if (compatibilityControllerRequirementData === null ||
49 serverData.isNullOrEmpty(compatibilityControllerRequirementData)) {
50 return "NO_BADGE";
51 }
52 const compatibilityControllerRequirement = compatibilityControllerRequirementData[platformAttributeForClient];
53 if (serverData.isNullOrEmpty(compatibilityControllerRequirement)) {
54 return "NO_BADGE";
55 }
56 return compatibilityControllerRequirement;
57 }
58 const remoteControllerRequirement = contentAttributes.contentAttributeAsString(objectGraph, data, "remoteControllerRequirement");
59 if (serverData.isDefinedNonNullNonEmpty(remoteControllerRequirement)) {
60 return remoteControllerRequirement;
61 }
62 return "NO_BADGE";
63}
64export function spatialControllerRequirementFromData(objectGraph, data) {
65 const platformAttributeForClient = contentAttributes.defaultAttributePlatform(objectGraph);
66 if (!objectGraph.client.isVision ||
67 platformAttributeForClient === null ||
68 !objectGraph.featureFlags.isEnabled("spatial_controllers_2025A")) {
69 return "NOT_SUPPORTED";
70 }
71 const spatialRequirement = platformAttributes.platformAttributeAsString(data, platformAttributeForClient, "spatialControllerRequirement");
72 if (serverData.isDefinedNonNullNonEmpty(spatialRequirement)) {
73 return spatialRequirement;
74 }
75 return "NOT_SUPPORTED";
76}
77//# sourceMappingURL=game-controller.js.map