this repo has no description
at main 3.8 kB view raw
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